Чи можу я взяти ядро Linux і використовувати його з, скажімо, FreeBSD і навпаки (ядро FreeBSD в, скажімо, Debian)? Чи є універсальна відповідь? Які обмеження? Які перешкоди?
/proc
інших специфічних для Linux дзвіночків.
Чи можу я взяти ядро Linux і використовувати його з, скажімо, FreeBSD і навпаки (ядро FreeBSD в, скажімо, Debian)? Чи є універсальна відповідь? Які обмеження? Які перешкоди?
/proc
інших специфічних для Linux дзвіночків.
Відповіді:
Ні, ядра різних реалізацій операційних систем у стилі 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 .
Деякі ядра мають бінарну сумісність, що дозволяє змішувати програми користувацького простору з різними ABI (наприклад, freebsd може до певної міри працювати з бінарними файлами Linux), однак основними бінарними файлами (наприклад, програма init, завантажувач модулів, інструменти налаштування драйверів пристроїв, бібліотека C , інструменти, необхідні для налаштування файлових систем ...) на практиці матимуть надто багато необхідності знати про інтерфейси рівня ядра, щоб успішно завантажувати систему з іноземним ядром.
Також файлові системи повинні бути сумісні. Крім того, параметри бінарної сумісності повинні бути скомпільовані "важко" в ядро - все, що реалізується як модуль ядра, хотів би провалитися, оскільки ви не змогли запустити завантажувач модулів.
Як уже згадувалося, користувальницьке середовище, як правило, є дещо портативним, якщо ви готові перекомпілювати - як дебіанські системи на базі freebsd, або налаштувати систему netbsd pkgsrc на Linux (абсолютно нетривіально, але підтримується і можливо!).