Stabilny model wersji jądra Linuxa został wprowadzony w 2005 r., gdy stwierdzono, że istniejący model rozwoju jądra (nowa wersja co 2–3 miesiące) nie spełnia potrzeb większości użytkowników. Użytkownicy chcieli, aby w ciągu tych 2–3 miesięcy zostały wprowadzone poprawki błędów, a dystrybucje Linuksa miały problemy z utrzymywaniem jąder na bieżąco bez informacji zwrotnej od społeczności jądra. Zasadniczo próby zapewnienia bezpieczeństwa poszczególnych jąder i wprowadzania najnowszych poprawek błędów wymagały dużych nakładów pracy i były skomplikowane.
Stabilne wersje jądra są oparte bezpośrednio na wersjach Linusa Torvaldsa i są wydawane co tydzień lub częściej, w zależności od różnych czynników zewnętrznych (pory roku, dostępne poprawki, obciążenie konserwatora itp.). Numeracja stabilnych wersji zaczyna się od numeru wersji jądra, a na końcu dodawana jest dodatkowa liczba. Na przykład Linus wydał jądro 4.4, a następnie stabilne wersje jądra oparte na tym jądrze mają numery 4.4.1, 4.4.2, 4.4.3 itd. Ta sekwencja jest zwykle skracana do numeru 4.4.y, gdy odnosi się do stabilnego drzewa wersji jądra. Każde drzewo stabilnej wersji jądra jest obsługiwane przez jednego dewelopera jądra, który odpowiada za wybór potrzebnych poprawek do wydania oraz zarządzanie procesem sprawdzania i wydawania.
Stabilne jądra są utrzymywane przez cały czas trwania bieżącego cyklu rozwojowego. Gdy Linus wyda nowe jądro, drzewo poprzedniej stabilnej wersji jądra zostanie zatrzymane, a użytkownicy będą musieli przejść na nowszą wersję jądra.
stabilne jądra o długim okresie działania;
Po roku stosowania tego nowego procesu stabilnych wersji stwierdziliśmy, że wielu użytkowników Linuksa chce, aby jądro było obsługiwane przez dłuższy czas niż kilka miesięcy. W odpowiedzi na to stworzono wersję jądra LTS, a pierwsze jądro LTS (2.6.16) zostało wydane w 2006 roku. Od tego czasu co roku wybierane jest nowe jądro LTS, a społeczność jądra utrzymuje je przez co najmniej 2 lata.
W momencie pisania tego tekstu jądra LTS to wersje 4.4.y, 4.9.y, 4.14.y, 4.19.y, 5.4.y i 5.10.y. Nowe jądro jest publikowane co tydzień. Ze względu na potrzeby niektórych użytkowników i dystrybucji kilka starszych jąder jest nadal obsługiwanych przez deweloperów jądra w wolniejszym cyklu wydawniczym. Informacje o wszystkich stabilnych jądrach, które są utrzymywane przez długi czas, o tym, kto jest za nie odpowiedzialny, i jak długo są one aktualizowane, można znaleźć na stronie kernel.org releases.
W przypadku wersji jądra LTS akceptowanych jest średnio 6–8 łatek dziennie, a w przypadku zwykłych stabilnych wersji jądra 10–15 łatek dziennie. Liczba poprawek na wersję waha się w zależności od bieżącego czasu wydania jądra w wersji rozwojowej i innych zmiennych zewnętrznych. Im starsze jest jądro LTS, tym mniej poprawek jest do niego dostępnych, ponieważ wiele najnowszych poprawek błędów nie dotyczy starszych wersji. Jednak im starsze jądro, tym trudniej jest wdrożyć zmiany, które należy wprowadzić, ze względu na zmiany w kodzie źródłowym. Oznacza to, że chociaż ogólna liczba stosowanych poprawek może być mniejsza, wysiłek związany z utrzymywaniem jądra LTS jest większy niż w przypadku zwykłego stabilnego jądra.
Reguły dotyczące stabilnych poprawek jądra
Od czasu wprowadzenia zasad dotyczących tego, co można dodać do stabilnej wersji jądra, zasady te pozostały prawie niezmienione. Podsumowaliśmy je poniżej:
- musi być wyraźnie poprawna i przetestowana;
- Nie może być większa niż 100 wierszy.
- Musisz poprawić tylko jedną rzecz.
- Musisz naprawić coś, co zostało zgłoszone jako problem.
- Może to być nowy identyfikator urządzenia lub funkcja dla sprzętu, która nie dodaje nowych funkcji.
- Musi być już scalony z drzewem Linusa Torvaldsa.
Ostatnia reguła „Musi być już scalona z drzewem Linusa Torvaldsa” zapobiega utracie poprawek przez społeczność jądra. Społeczność nigdy nie chce, aby poprawka została wprowadzona do stabilnej wersji jądra, która nie jest jeszcze dostępna w drzewie Linusa Torvaldsa, aby każdy, kto przejdzie na nowszą wersję, nie zauważył regresji. Zapobiega to wielu problemom, które mogą wystąpić w przypadku innych projektów, które utrzymują stabilną i rozwojową gałąź.
Aktualizacje jądra
Społeczność jądra Linuksa obiecała użytkownikom, że żadna aktualizacja nie spowoduje zerwania zgodności z niczym, co działało w poprzedniej wersji. Nadal dotrzymujemy tego zobowiązania. Wsteczny regres może wystąpić, ale są to błędy o najwyższym priorytecie i są one szybko naprawiane lub zmiana, która spowodowała regres, jest szybko wycofywana z drzewa jądra Linuksa.
Dotyczy to zarówno stopniowych aktualizacji stabilnego jądra, jak i większych aktualizacji, które są wprowadzane co 3 miesiące. Jednak społeczność zajmująca się jądrem może dać takie zapewnienie tylko w przypadku kodu scalonego z drzewem jądra Linuksa. Każdy kod scalony z jądrem urządzenia, który nie znajduje się w wersjach kernel.org, jest nieznany, a interakcje z nim nie mogą być planowane ani nawet rozważane.
Urządzenia oparte na Linuksie, które mają duże zestawy poprawek, mogą mieć poważne problemy podczas aktualizacji do nowszych wersji jądra z powodu dużej liczby zmian między każdą wersją (10–14 tys. zmian na wersję). Zestawy poprawek SoC są szczególnie znane z problemów z aktualizacją do nowszych jąder ze względu na ich duży rozmiar i znaczne modyfikacje kodu jądra specyficznego dla architektury, a czasem nawet kodu jądra rdzenia. W rezultacie większość dostawców układów SoC zaczyna stosować na swoich urządzeniach wersje LTS, dzięki czemu urządzenia te mogą otrzymywać aktualizacje dotyczące błędów i zabezpieczeń bezpośrednio od społeczności jądra Linuxa.
Bezpieczeństwo
Podczas publikowania wersji jądra społeczność jądra Linuxa prawie nigdy nie deklaruje konkretnych zmian jako poprawek zabezpieczeń. Wynika to z podstawowego problemu, jakim jest trudność w określeniu, czy poprawka jest poprawką zabezpieczeń w momencie utworzenia. Ponadto wiele poprawek jest uznawanych za związane z bezpieczeństwem dopiero po upływie długiego czasu, dlatego społeczność zajmująca się jądrem zdecydowanie zaleca, aby zawsze stosować wszystkie opublikowane poprawki.
Gdy problemy z bezpieczeństwem zostaną zgłoszone społeczności związanej z jądrem, są one jak najszybciej rozwiązywane i publicznie publikowane w drzewie rozwojowym oraz w stabilnych wersjach. Jak już wspomnieliśmy, zmiany te prawie nigdy nie są opisane jako „naprawka zabezpieczeń”, ale wyglądają jak inne poprawki błędów w jądrze. Robimy to, aby umożliwić poszkodowanym stronom zaktualizowanie swoich systemów, zanim problem zostanie ogłoszony przez osobę, która go zgłosiła.
Szczegółowe informacje o zgłaszaniu błędów związanych z bezpieczeństwem do społeczności jądra, aby jak najszybciej je rozwiązać i naprawić, znajdziesz w artykule Błędy związane z bezpieczeństwem w przewodniku użytkownika i administratora jądra Linux na stronie www.kernel.org.
Zespół odpowiedzialny za jądro nie ogłasza publicznie błędów związanych z bezpieczeństwem, dlatego numery CVE dla problemów związanych z jądrem Linuksa są zwykle publikowane po kilku tygodniach, miesiącach, a czasem nawet latach od połączenia poprawki z gałęziami stabilnej i rozwojowej.
Zadbaj o bezpieczeństwo systemu
Podczas wdrażania urządzenia z systemem Linux zdecydowanie zalecamy, aby wszystkie aktualizacje jądra LTS były pobierane przez producenta i przesyłane do użytkowników po przeprowadzeniu odpowiednich testów, które potwierdzą, że aktualizacja działa prawidłowo. Daje to kilka korzyści:
- Wersje zostały sprawdzone przez deweloperów jądra jako całość, a nie poszczególne części.
- Trudno jest określić, które łatki naprawiają problemy związane z bezpieczeństwem, a które nie. Prawie każda wersja LTS zawiera co najmniej jedną znaną poprawkę zabezpieczeń, a wiele z nich są jeszcze „nieznane”.
- Jeśli testy wykażą problem, społeczność deweloperów jądra szybko go rozwiąże.
- Próby odfiltrowania tylko wprowadzonych przez Ciebie zmian powodują powstanie drzewa jądra, którego nie można prawidłowo scalić z przyszłymi wersjami upstream.