Jestem użytkownikiem OpenBSD. W FAQ OpenBSD napisano:
OpenBSD to kompletny system przeznaczony do synchronizacji. To nie jest jądro plus narzędzia, które można aktualizować niezależnie od siebie.
Kiedy aktualizujesz system, robisz to za jednym razem; jądro i system podstawowy zostaną zastąpione. Następnie przejdź i zaktualizuj swoje pakiety innych firm . Jeśli kompilujesz ze źródła , przekompiluj jądro i uruchom je. Następnie przebudowujesz system podstawowy, a następnie zainstalowane pakiety. Jeśli minęło więcej niż kilka tygodni / miesięcy od ostatniego przebudowania wszystkiego, najpierw zainstaluj migawkę i przebuduj stamtąd (jeśli korzystasz z najnowszej gałęzi CVS).
Posiadanie niezsynchronizowanego jądra, systemu podstawowego i / lub pakietów stron trzecich jest potencjalnym źródłem problemów i mniej lub bardziej dyskwalifikuje cię od uzyskania poważnej pomocy z oficjalnych list mailingowych.
Nie mam nic przeciwko temu. W rzeczywistości jest to jeden z powodów, dla których korzystam z OpenBSD. To sprawia, że system jest spójną jednostką i ułatwia mi dokonanie jego mentalnego przeglądu.
Jak to jest w systemie Linux? Większość Linuksów, o których wiem, nie ma „systemu podstawowego” w tym samym sensie co BSD, a raczej zbiór pakietów zmontowanych przez dostawcę dystrybucji. Dalsze oprogramowanie jest następnie dodawane do tego przez lokalnego administratora w taki sposób, że granica między tym, co istniało od samego początku, a tym, co zostało dodane później, jest co najwyżej rozmyta.
Czy Linux (ogólnie) nie ma silnego jądra do sprzężenia przestrzeni użytkownika? Jądro jest aktualizowane, o ile wiem, jak każdy inny pakiet oprogramowania i nieco mnie dezorientuje, że jest to w ogóle możliwe. Dodaj do tego fakt, że niektóre nawet kompilują niestandardowe jądra (co jest odradzane w OpenBSD) i mają wiele różnych wersji jądra wymienionych w menu rozruchu.
Kto lub co gwarantuje, że różne podsystemy systemu Linux są w stanie współpracować ze sobą, nawet jeśli są aktualizowane niezależnie od siebie?
Pytam dlatego, że inny użytkownik na tej stronie zapytał mnie, czy zastąpienie jądra w jego systemie Linux nowszą wersją „byłoby wykonalne”. Jadąc od strony OpenBSD rzeczy, nie mogę powiedzieć, że tak, to byłoby zagwarantowane nie złamać system.
Używam „Linuksa” powyżej jako skrótu dla „dystrybucji Linuksa”, jądra + narzędzi.
źródło
Odpowiedzi:
Linus Torvalds ma bardzo silną opinię na temat zmian w jądrze powodujących regresję przestrzeni użytkownika (szczegółowe informacje zawiera pytanie „ Jądro Linux: łamanie przestrzeni użytkownika ”).
Interfejs między przestrzenią użytkownika a jądrem jest zapewniany przez wywołania systemowe. Nowsze jądra mogą mieć więcej wywołań systemowych i zmian w wyjściowych, gdy zmiany te nie psują istniejących aplikacji. Kiedy interfejs wywołania systemowego ma parametr flagi, nowe jądra często ujawniają nową funkcjonalność za pomocą nowej flagi bitowej. W ten sposób jądro zachowuje zgodność wsteczną ze starymi aplikacjami.
Gdy zmiana istniejącego interfejsu nie była możliwa bez naruszenia przestrzeni użytkownika, dodano dodatkowe wywołania systemowe zapewniające rozszerzoną funkcjonalność. Dlatego istnieją trzy wersje
dup
i dwie wersjeumount
wywołania systemowego.Polityka posiadania stabilnej przestrzeni użytkownika jest przyczyną, dla której aktualizacje jądra rzadko powodują problemy w aplikacjach przestrzeni użytkownika i ogólnie nie oczekuje się problemów po aktualizacji jądra.
Jednak ta sama stabilność API nie jest gwarantowana dla interfejsów jądra i innych szczegółów implementacji . Sysfs (on
/sys
) i procsfs (on/proc/
) ujawniają szczegóły implementacji jądra dotyczące konfiguracji środowiska uruchomieniowego, sprzętu, sieci, procesów itp., Które są używane przez aplikacje niskiego poziomu. Interfejsy mogą się zmieniać w niekompatybilny sposób między wersjami jądra, jeśli jest ku temu dobry powód. Zmiany nadal starają się zminimalizować niezgodności, jeśli to możliwe, i istnieją zasady, w jaki sposób aplikacje mogą korzystać z interfejsów w najmniej prawdopodobny sposób powodując problemy. Wpływ jest również ograniczony, ponieważ aplikacje niskiego poziomu nie powinny używać tych interfejsów.@PeterCordes wskazał, że jeśli zmiana w procfs lub sysfs spowoduje uszkodzenie aplikacji używanej przez skrypty inicjujące dystrybucję, możesz mieć problem.
Zależy to nieco od tego, jak twoja dystrybucja aktualizuje jądro (wsparcie długoterminowe lub główna), a nawet wtedy problemy są stosunkowo rzadkie, ponieważ dystrybucje zwykle wysyłają zaktualizowane narzędzia w tym samym czasie.
@StephenKitt dodał, że zaktualizowana przestrzeń użytkownika może wymagać nowszej wersji jądra, w którym to przypadku system może nie być w stanie uruchomić się ze starym jądrem, a informacje o wydaniu dystrybucji wspominają o tym, gdy jest to właściwe.
źródło
/proc
) i sysfs (/sys
) są utrzymywane tak stabilnie, jak to możliwe, zgodnie z tą samą polityką / filozofią „nie niszcz przestrzeni użytkownika”. Ponadtoioctl()
kody w plikach urządzeń en.wikipedia.org/wiki/Ioctl . Wykracza to daleko poza prostą kompatybilność ABI z wywołaniem systemowym, ale jak mówisz, kiedy jest dobry powód, rzeczy się zmieniają w/proc
i/sys
. Nie zepsuje większości programów bezpośrednio, ale jeśli zepsuje niskopoziomowy program przestrzeni użytkownika używany przez skrypty inicjujące dystrybucji, możesz mieć problem. Na szczęście jest to rzadkie.rfkill
przełącznik IIRC , zmieniły lokalizacje w niektórych aktualizacjach jądra. Tak/proc
i/sys
są znacznie mniej stabilne niż syscall interfejsu. Na szczęście dystrybucje zwykle nie zawierają takich aktualizacji jądra, chyba że jest to ważna aktualizacja wersji dystrybucji./proc
i/sys
zwykle - usuwanie zajmuje lata). Jednak aktualizacja przestrzeni użytkownika może wymagać nowego jądra i możesz skończyć z systemem, którego nie można uruchomić, jeśli nie masz wystarczająco nowego jądra. Informacje o wydaniu Distro wspominają o tym, gdy jest to właściwe (więc nie aktualizuj dystrybucji na ślepo, przeczytaj informacje o wydaniu).Jądro Linux i przestrzeń użytkownika dystrybucji Linuksa, która w przeszłości była zdominowana przez narzędzia użytkownika opracowane w ramach projektu GNU, są luźno powiązane. Po części wynika to z projektu, a po części z konieczności.
W przeciwieństwie do BSD, w których jądro oraz podstawowa przestrzeń użytkownika są zaprojektowane i utrzymywane razem, jądro Linux i jego przestrzeń użytkownika zostały opracowane i są obsługiwane przez różne osoby. Utrzymanie ich w ścisłym powiązaniu byłoby trudne, nawet jeśli społeczność tego pragnie, co nie wydaje mi się.
@Sebasth podkreśla również doskonale, że główną zasadą projektu jądra Linux jest to, że nie może on naruszać przestrzeni użytkownika. Co oczywiście jest kolejnym czynnikiem wymuszającym luźne sprzęganie.
Jednak nadal istnieje pewien stopień sprzężenia. Wystarczająco stare jądro Linuksa nie będzie działać z nowoczesnymi dystrybucjami.
źródło
glibc
na przykład). (Ale tak, to nie jest obietnica jądra, to obietnica przestrzeni użytkownika.)Rozumiem, że Linux jest jądrem, a wszystko inne jest pomocnicze. Zdecydowanie możesz zaktualizować jądro niezależnie od (wielu) zainstalowanych pakietów, ponieważ są one zazwyczaj powiązane z bibliotekami, a nie z samym jądrem. Takie sprzężenie zazwyczaj widać tylko między wersjami jądra a sterownikami sprzętowymi (np. Sterownikami GPU). Niektóre oprogramowanie jest kompatybilne tylko z niektórymi wersjami jądra, ale należy to określić w indywidualnej dokumentacji tych programów.
Dość powszechne jest posiadanie dwóch pakietów pakietów jądra w systemie - aktualnie używanego pakietu i wcześniej zainstalowanego pakietu. Podczas aktualizacji, po upewnieniu się, że nowa wersja działa poprawnie, najstarszą można usunąć i nadal masz znaną bezpieczną rezerwę. Na przykład Red Hat (i jego kuzyni) musi
package-cleanup --oldkernels --count 2
to robić automatycznie.źródło
Oprócz wszystkich dobrych argumentów tutaj, mogę dodać kilka punktów, które pomogą.
Znamy już zasady zespołu jądra, a jako dystrybucje Linuksa staramy się zachować jak najczystszy kod źródłowy jądra. Oznacza to, że ilekroć pojawi się luka w zabezpieczeniach lub coś, co wymaga poprawki, informujemy zespół jądra i staramy się pomóc w załataniu poprawek, ale ostatecznie ostateczna decyzja należy do zespołu jądra.
Niektóre dystrybucje dodają dodatkowe łaty bardziej niż inne, ale pomysł polega na tym, aby zachować je tak, jak pochodzą od deweloperów. Oczywiście, niektóre programy wymagają specjalnej konfiguracji jądra, szczególnie wirtualizacji i sterowników innych firm i zwykle oba są używane do pracy z określoną wersją jądra lub przynajmniej niezbyt starą wersją ... powodem jest to, że próbują do pracy z najnowszymi funkcjami jądra iz tego powodu, jeśli spróbujesz uruchomić je ze starym jądrem, mogą one nie działać poprawnie.
Dodatkowym elementem, o którym należy pamiętać, jest to, że wszystkie dystrybucje Linuksa mają zespół opiekunów, ludzi, którzy zapewniają zgodność całego oprogramowania z systemem. Dlatego prawie każda dystrybucja ma wersję stabilną i niestabilną. Programiści pracują z „niestabilnym” oprogramowaniem, a gdy wszystko jest testowane, oznaczają je jako stabilne, dopiero potem normalny użytkownik może zaktualizować pakiet, więc jeśli osoba, która zapytała Cię, jest normalnym użytkownikiem, jest w 90% bezpieczna, że oprogramowanie zostało dobrze przetestowane .
Więc kim jest, społeczność, a następnie jakie powinno być wspólne podejście, potrzebujemy oprogramowania współpracującego, a nie zepsucia systemu, dlatego staramy się przestrzegać niektórych standardów, takich jak Hierarchia Standardów Systemu Plików .
źródło