Czy różne jądra Linux / Unix są wymienne?

14

Czy mogę wziąć jądro Linuksa i używać go, powiedzmy, z FreeBSD i odwrotnie (jądro FreeBSD w, powiedzmy, Debianie)? Czy istnieje uniwersalna odpowiedź? Jakie są ograniczenia? Jakie są przeszkody?

RonJohn
źródło
5
Nie, absolutnie nie. Dobrym ćwiczeniem byłoby wypróbowanie go i zobaczenie, jak się psuje. Nie można nawet niezawodnie zastąpić jądra systemu Linux znacznie starszym jądrem systemu Linux. Z pewnością można jednak wymienić narzędzia użyteczne dla użytkownika (jeśli zostaną ponownie skompilowane).
Kusalananda
3
debian.org/ports/kfreebsd-gnu i debian.org/ports/hurd mogą Cię zainteresować
mur
@Kusalananda na temat wymiany narzędzi z obszaru użytkownika, przejście z BSD na Linuksa może być bolesne: niektóre narzędzia BSD są dość trudne do zbudowania na systemach innych niż BSD ... Przez lata natknąłem się na kilka narzędzi, które chciałbym przenieść , ale okazało się, że nie jest trywialne: - /.
Stephen Kitt
1
@StephenKitt Odwrotna jest również prawda :-) Zwłaszcza, gdy oprogramowanie zakłada, że ​​można uzyskać dostęp /proclub inne specyficzne dla Linuksa dzwonki i gwizdy.
Kusalananda
Co możesz zrobić, to wziąć jądro x86_64 (linux) i wymusić jego instalację w 32-bitowej dystrybucji i386 (zakładając, że 64-bitowy procesor Intel i wsparcie dla 32-bitowych plików binarnych skompilowanych). Jest to dość dobrze znane, ale nie od razu oczywiste ...
Radovan Garabík

Odpowiedzi:

39

Nie, jądra z różnych implementacji systemów operacyjnych typu Unix nie są wymienne, zwłaszcza dlatego, że wszystkie przedstawiają różne interfejsy do reszty systemu (przestrzeni użytkownika) - ich wywołań systemowych (w tym ioctlspecyfiki), różnych używanych przez nich wirtualnych systemów plików. ..

Do pewnego stopnia wymienna jest na poziomie źródłowym kombinacja jądra i biblioteki C, a raczej interfejsów API na poziomie użytkownika, które jądro i biblioteki udostępniają (zasadniczo widok warstwy opisanej przez POSIX, bez biorąc pod uwagę, czy faktycznie jest to POSIX). Przykładami tego są Debian GNU / kFreeBSD , który buduje system Debian na jądrze FreeBSD oraz Debian GNU / Hurd , który buduje system Debian na bazie Hurd.

Nie jest to całkiem poziom zamienności jądra, ale próbowano ujednolicić wspólny interfejs binarny aplikacji, aby umożliwić używanie plików binarnych w różnych systemach bez potrzeby ponownej kompilacji. Jednym z przykładów jest Intel Binary Compatibility Standard , który pozwala na uruchamianie zgodnych z nim plików binarnych na dowolnym systemie Unix implementującym go, w tym na starszych wersjach Linuksa z warstwą iBCS 2. Użyłem tego pod koniec lat 90., aby uruchomić WordPerfect w systemie Linux.

Zobacz także Jak zbudować chroota z FreeBSD w Linuksie .

Stephen Kitt
źródło
1
Niektóre osoby mają dość mocne opinie na temat tego, jak ważne jest, aby jądro i interfejsy API użytkownika były zsynchronizowane :)
tonysdg
4
Rzeczywiście @tonysdg i wierzcie mi, wiem o tym wszystko : - /.
Stephen Kitt
@tonysdg Otrzymuję stronę nie znalezioną w twoim linku. (Chyba że to żart, którego mi brakuje?)
mbrig
1
@mbrig: Do wczoraj było - zarchiwizowana wersja: web.archive.org/web/20171102142621/http://…
tonysdg
@StephenKitt: Ouch :( Przepraszam !! Ale wielkie uznanie za to, że nawet mam kod w jądrze na początek!
tonysdg 23'18
4

Niektóre jądra są kompatybilne binarnie, co pozwala mieszać programy przestrzeni użytkownika z różnymi ABI (np. Freebsd może do pewnego stopnia współpracować z plikami binarnymi linux) - jednak podstawowe pliki binarne (np. Program init, moduł ładujący, narzędzia do konfiguracji sterowników urządzeń, biblioteka C , narzędzia potrzebne do skonfigurowania systemów plików ...) w praktyce będą miały zbyt dużo wiedzy na temat interfejsów poziomu jądra, aby pomyślnie uruchomić system z obcym jądrem.

Również systemy plików musiałyby być kompatybilne. Ponadto opcje kompatybilności binarnej musiałyby zostać skompilowane „twardo” do jądra - wszystko, co zostało zaimplementowane jako moduł jądra, chciałby zawieść, ponieważ nie można uruchomić modułu ładującego.

Jak wspomniano, środowiska użytkownika są zazwyczaj przenośne, jeśli chcesz dokonać ponownej kompilacji - podobnie jak debianowe systemy oparte na freebsd lub konfiguracja systemu netbsd pkgsrc na Linuksie (absolutnie nie jest trywialny, ale obsługiwany i możliwy!).

rackandboneman
źródło