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?
linux
kernel
bsd
architecture
RonJohn
źródło
źródło
/proc
lub inne specyficzne dla Linuksa dzwonki i gwizdy.Odpowiedzi:
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
ioctl
specyfiki), 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 .
źródło
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!).
źródło