Чи різні ядра Linux / Unix взаємозамінні?


14

Чи можу я взяти ядро ​​Linux і використовувати його з, скажімо, FreeBSD і навпаки (ядро FreeBSD в, скажімо, Debian)? Чи є універсальна відповідь? Які обмеження? Які перешкоди?


5
Ні, абсолютно ні. Гарною вправою було б спробувати її і побачити, як вона ламається. Ви навіть не можете надійно замінити ядро ​​Linux набагато старшим Linux-ядром. Заміна інструментів для користування користувачем, безумовно, можлива (якщо вона перекомпільована).
Кусалаланда

3
debian.org/ports/kfreebsd-gnu та debian.org/ports/hurd можуть вас зацікавити
muru

@Kusalananda щодо заміни інструментів userland, перехід від BSD до Linux може бути болісним: деякі інструменти BSD досить важко побудувати на системах, що не належать до BSD ... Я натрапив на кілька інструментів протягом багатьох років, які мені хотілося б портувати , але виявилося нетривіальним: - /.
Стівен Кітт

1
@StephenKitt Справжній зворотній варіант :-) Особливо, коли програмне забезпечення робить припущення про можливість доступу до /procінших специфічних для Linux дзвіночків.
Kusalananda

Що ви можете зробити, це взяти ядро ​​x86_64 (linux) і змусити його встановити на 32-бітний дистрибутив i386 (припускаючи 64-бітний процесор Intel та підтримку 32-бітних бінарних файлів, зібраних в). Це досить добре відомо, але не відразу очевидно ...
Радован Гарабік

Відповіді:


39

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

Те, що певною мірою є взаємозамінним на рівні джерела, - це поєднання ядра та бібліотеки С, а точніше API-інтерфейсів на рівні користувача, які ядро ​​та бібліотеки розкривають (по суті, подання на рівні, описаному POSIX, без з урахуванням того , що це на самому справі POSIX). Приклади цього включають Debian GNU / kFreeBSD , який будує систему Debian на основі ядра FreeBSD, і Debian GNU / Hurd , який будує систему Debian на вершині Hurd.

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

Дивіться також Як створити FreeBSD chroot всередині Linux .


1
Деякі люди мають досить сильні думки щодо того, як важливо підтримувати API ядра та користувачів синхронізованими :)
tonysdg

4
Дійсно @tonysdg, і повірте, я все про це знаю : - /.
Стівен Кітт

@tonysdg Я отримую сторінку, яку не знайдено у вашому посиланні. (Якщо тільки це не жарт, якої я пропускаю?)
mbrig

1
@mbrig: До вчорашнього дня він був там - ось архівна версія: web.archive.org/web/20171102142621/http://…
tonysdg

@StephenKitt: Ой :( Вибачте! Але основні кудоси за те, що навіть у коді є код!
tonysdg

4

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

Також файлові системи повинні бути сумісні. Крім того, параметри бінарної сумісності повинні бути скомпільовані "важко" в ядро ​​- все, що реалізується як модуль ядра, хотів би провалитися, оскільки ви не змогли запустити завантажувач модулів.

Як уже згадувалося, користувальницьке середовище, як правило, є дещо портативним, якщо ви готові перекомпілювати - як дебіанські системи на базі freebsd, або налаштувати систему netbsd pkgsrc на Linux (абсолютно нетривіально, але підтримується і можливо!).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.