Могу ли я взять ядро Linux и использовать его, скажем, с FreeBSD и наоборот (ядро FreeBSD, скажем, в Debian)? Есть ли универсальный ответ? Каковы ограничения? Какие препятствия?
/proc
или других специфических для Linux наворотов.
Могу ли я взять ядро Linux и использовать его, скажем, с FreeBSD и наоборот (ядро FreeBSD, скажем, в Debian)? Есть ли универсальный ответ? Каковы ограничения? Какие препятствия?
/proc
или других специфических для Linux наворотов.
Ответы:
Нет, ядра из разных реализаций операционных систем в стиле 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 .
Некоторые ядра имеют двоичную совместимость, что позволяет вам смешивать программы пользовательского пространства с различными ABI (например, freebsd может в некоторой степени работать с бинарными файлами linux), однако, бинарные файлы ядра (например, программа init, загрузчик модулей, инструменты настройки драйвера устройства, библиотека C) инструменты, необходимые для настройки файловых систем ...) на практике будут иметь слишком много информации об интерфейсах уровня ядра для успешной загрузки системы с чужим ядром.
Кроме того, файловые системы должны быть совместимы. Кроме того, параметры двоичной совместимости должны быть «скомпилированы» в ядре - все, что реализовано в виде модуля ядра, может потерпеть неудачу, потому что вы не можете запустить загрузчик модулей.
Как уже упоминалось, пользовательские среды имеют тенденцию быть несколько переносимыми, если вы хотите перекомпилировать - например, системы Debian, основанные на freebsd, или настроить систему netbsd pkgsrc в Linux (абсолютно нетривиально, но поддерживается и возможно!).