Являются ли разные ядра Linux / Unix взаимозаменяемыми?

14

Могу ли я взять ядро ​​Linux и использовать его, скажем, с FreeBSD и наоборот (ядро FreeBSD, скажем, в Debian)? Есть ли универсальный ответ? Каковы ограничения? Какие препятствия?

RonJohn
источник
5
Нет, абсолютно нет. Хорошее упражнение - попробовать и посмотреть, как оно сломается. Вы даже не можете надежно заменить ядро ​​Linux гораздо более старым ядром Linux. Заменить пользовательские инструменты, безусловно, выполнимо (если перекомпилировано).
Кусалананда
3
debian.org/ports/kfreebsd-gnu и debian.org/ports/hurd может вас заинтересовать
Muru
@Kusalananda относительно замены пользовательских инструментов, переход с BSD на Linux может быть болезненным: некоторые инструменты BSD довольно сложно собрать на не-BSD системах ... За эти годы я столкнулся с несколькими инструментами, которые мне бы хотелось портировать , но оказалось, что нетривиально: - /.
Стивен Китт
1
@StephenKitt Обратное тоже верно :-) Особенно, когда программное обеспечение делает предположения о возможности доступа /procили других специфических для Linux наворотов.
Кусалананда
Что вы можете сделать, это взять ядро ​​x86_64 (linux) и принудительно установить его в 32-битном дистрибутиве i386 (при условии, что 64-битный процессор Intel и поддержка скомпилированных 32-битных двоичных файлов). Это довольно хорошо известно, но не сразу очевидно ...
Радован Гарабик

Ответы:

39

Нет, ядра из разных реализаций операционных систем в стиле Unix не являются взаимозаменяемыми, в частности потому, что все они представляют разные интерфейсы для остальной части системы (пользовательского пространства) - их системные вызовы (включая ioctlособенности), различные виртуальные файловые системы, которые они используют. ..

Что в некоторой степени взаимозаменяемо на уровне источника, так это комбинация ядра и библиотеки C, или, скорее, API уровня пользователя, которые предоставляют ядро ​​и библиотеки (по сути, представление на уровне, описанном POSIX, без с учетом того , что это на самом деле POSIX). Примеры этого включают Debian GNU / kFreeBSD , который строит систему Debian поверх ядра FreeBSD, и Debian GNU / Hurd , который строит систему Debian поверх Hurd.

Это не совсем на уровне взаимозаменяемости ядра, но были попытки стандартизировать общий двоичный интерфейс приложения, чтобы позволить использовать двоичные файлы в различных системах без перекомпиляции. Одним из примеров является стандарт двоичной совместимости Intel , который позволяет двоичным файлам, соответствующим ему, работать в любой системе Unix, в которой он реализован, включая более старые версии Linux с уровнем iBCS 2. Я использовал это в конце 90-х годов для запуска WordPerfect в Linux.

Смотрите также Как создать chroot FreeBSD внутри Linux .

Стивен Китт
источник
1
Некоторые люди имеют достаточно твердое мнение о том, как важно синхронизировать ядро ​​и пользовательские API-интерфейсы :)
tonysdg
4
Действительно @tonysdg, и поверьте мне, я знаю все об этом : - /.
Стивен Китт
@tonysdg Я получаю страницу, не найденную по вашей ссылке. (Разве это не шутка, которую я пропускаю?)
mbrig
1
@mbrig: До вчерашнего дня это было там - вот архивная версия: web.archive.org/web/20171102142621/http://…
tonysdg
@StephenKitt: Ой :( Извините! Но
слава богу за то, что у меня
4

Некоторые ядра имеют двоичную совместимость, что позволяет вам смешивать программы пользовательского пространства с различными ABI (например, freebsd может в некоторой степени работать с бинарными файлами linux), однако, бинарные файлы ядра (например, программа init, загрузчик модулей, инструменты настройки драйвера устройства, библиотека C) инструменты, необходимые для настройки файловых систем ...) на практике будут иметь слишком много информации об интерфейсах уровня ядра для успешной загрузки системы с чужим ядром.

Кроме того, файловые системы должны быть совместимы. Кроме того, параметры двоичной совместимости должны быть «скомпилированы» в ядре - все, что реализовано в виде модуля ядра, может потерпеть неудачу, потому что вы не можете запустить загрузчик модулей.

Как уже упоминалось, пользовательские среды имеют тенденцию быть несколько переносимыми, если вы хотите перекомпилировать - например, системы Debian, основанные на freebsd, или настроить систему netbsd pkgsrc в Linux (абсолютно нетривиально, но поддерживается и возможно!).

rackandboneman
источник