Можно ли изменить ядро ​​в системе UNIX / Linux?

16

Я хотел узнать, возможно ли заменить ядра, например, заменить ядро ​​Linux Fedora на ядро ​​FreeBSD.

Теперь уже существует Debian GNU / kFreeBSD . Можно ли настроить дистрибутив Linux на ядро ​​BSD?

переключатель
источник
3
MacOSX - это полностью POSIX-совместимое ядро ​​на базе BSD. И в отличие от Linux, который утверждает, что не является системой Unix, OSX является системой Unix (она сертифицирована The Open Group, которая владеет торговой маркой Unix). Вы не можете запускать приложения Linux на Mac и не можете запускать приложения Mac на Linux, даже если оба они работают на процессорах Intel (ну, технически AMD64)
slebetman

Ответы:

21

Нет, каждое ядро ​​реализует свои особенности по-своему. Существует большая совместимость с POSIX, но как только вы выйдете из этого, исполняемые файлы должны быть скомпилированы с уже установленными механизмами ядра. Многие проекты содержат исходный код, который компилируется, только если вы явно говорите, что компилируете для FreeBSD или Linux. По сути, это то, что kFreeBSD. Инструменты поддерживают ядро ​​FreeBSD, но они должны быть скомпилированы для него.

Например, если вы попытаетесь использовать epoll_createFreeBSD, все будет работать не так, как ожидалось.

Конечно, вы можете кросс-компилировать инструменты из системы BSD в стиле LFS, но это может занять вечность. Не так просто, как просто собрать новое ядро.

Bratchley
источник
1
Я хотел бы услышать ваше мнение о ядре MOOL , уже есть ОС, которая его адаптирует, BOSS linux.
Шри Харша Чилакапати
Будет интересно посмотреть, что из этого получится, но я недостаточно изучил это, чтобы сказать что-нибудь умное об этом.
Братчли
1
Итак, что вы говорите, если я хочу создать систему BSD на основе пользовательского интерфейса GNU, я должен перекомпилировать все программное обеспечение GNU для ядра BSD. Я прав?
Переключатель
1
Все, что использует Linux-измы, что было бы почти всем. Может быть проще начать с kFreeBSD и перейти оттуда.
Братчли
16

FreeBSD не использует ядро ​​Linux - как следует из названия, оно использует ядро ​​BSD.

Ядро Linux можно заменить другим ядром Linux (либо тем, которое вы создали сами, либо тем, которое вы извлекли из дистрибутива). Помните, что программы пользовательского пространства в вашем дистрибутиве могут зависеть от конкретных функций ядра, которые будут скомпилированы, и могут работать некорректно, если вы запускаете их на ядре, построенном без этих функций. Например, системный дистрибутив потребует cgroups в ядре.

Для примера, который вы упомянули, да, дистрибутив GNU может быть собран для ядра Linux или для ядра BSD. Во многих случаях существуют различия во времени компиляции (например #ifdef) между программами, скомпилированными для обоих, даже если ядра объявляют один и тот же ABI. Как минимум, низкоуровневые библиотеки, такие как C Runtime Library, должны приспосабливаться к различным ABI ядра.

Тоби Спейт
источник
Повысьте упоминание об изменении C Runtime Library.
Джошуа
2

Ядро является независимой частью и регулярно заменяется во время обновлений операционной системы. Некоторые проприетарные драйверы (NVIDIA и т. Д.) Имеют установочные сценарии, которые исправляют драйвер в исходном коде ядра, собирают это ядро ​​и заменяют им текущее ядро. Следовательно, если вы разрабатываете свою собственную версию ядра, которая может выполнять все необходимые функции, не должно быть большой проблемой ее установка и оставление остальной части операционной системы. Однако чаще всего такое «новое ядро» происходит от недавней официальной версии.

Ядро Solaris портировано таким образом в некоторой степени, в результате чего OpenSolaris работает в среде Gnome.

Тем не менее, установка совершенно другого ядра является значительным усилием, поскольку интерфейсы должны быть соединены. Это, вероятно, потребует много программирования на C, а не только сценарий сборки.

h22
источник