Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ядро ОС.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
873.98 Кб
Скачать

Вопросы лицензирования

По мнению хранителей Linux, LKM — представляет собой производную работу от ядра. Функции ядра могут помечаться как доступные только для GPL модулей.

Загрузка собственнических или GPL-несовместимых модулей устанавливает флаг 'taint' (порча) в ядре. Данный флаг означает, что какие-либо проблемы или баги имеют меньшие шансы на исследование хранителями ядра. Модули фактически становятся частью работающего ядра и могут повредить внутренние структуры данных, создавая ошибки, которые не могут быть воспроизведены теми, кто не может загрузить проприетарный модуль.

Дело Linuxant

В 2004 году, консалтинговая компания Linuxant, выпускавшая проприетарный модуль (драйвер устройства) попыталась обойти ограничения «GPLONLY» на некоторые функции ядра. Для этого в исходном коде своего модуля в графе MODULE_LICENSE был использован символ NULL:

MODULE_LICENSE ("GPL\0for files in the \"GPL\" directory; for others, only LICENSE file applies");

Определение лицензии ядром Linux производится путем лексикографического сравнения NULL-терминированных строк, поэтому сравнение указаной строки будет эквивалентно сравнению со строкой "GPL", в то время как модуль не распространяется по лицензии GPL.

FreeBSD

Модули ядра ОС FreeBSD хранятся в /boot/kernel/ (модули, распространяемые с дистрибутивом) или в /boot/modules/ для модулей, установленных из FreeBSD портов и других источников. Ядерные модули FreeBSD обычно имеют расширение .ko. Модули могут подгружаться командой kldload, выгружаться kldunload. Список модулей виден по команде kldstat. Некоторые модули загружаются на этапе первичной загрузки (указываются в файле /boot/loader.conf).

OS X

Некоторые загружаемые модули ядра в OS X могут быть загружены автоматически. Загружаемые модули ядра могут быть также загружены командой kextload. Список может быть выведен командой kextstat. Загружаемые модули ядра расположены в программных пакетах с расширением .kext. Модули поставляемые с операционной системой, хранятся в каталоге /System/Library/Extensions, модули от третьих лиц в других каталогах.

Бинарная совместимость

Linux не обеспечивает стабильный API или ABI для модулей ядра. Это означает, что существуют различия во внутренней структуре и функции между разными версиями ядра, которые могут вызвать проблемы совместимости. В попытке борьбы с этими проблемами, символ управления версиями данных помещается в .modinfo в разделе загружаемых ELF модулей. Это версий, информация может быть по сравнению с тем, что ядро перед загрузкой модуля; если версии несовместимы, то модуль не будет загружен.

Другие операционные системы, такие как Solaris, FreeBSD, Mac OS X, Windows, поддерживают API и ABI для модулей относительно стабильными, что позволяет избежать этой проблемы. Например, модули FreeBSD, скомпилированные под версию ядра 6.0 будет работать без перекомпиляции на любой другой версии FreeBSD 6.x, например, 6.4. Однако они не совместимы с другими основными версиями и должны быть перекомпилированы для использования с FreeBSD 7.x, так как совместимость API и ABI поддерживается только внутри одной ветви.