Proces rozwoju Linuksa

Wolne oprogramowanie i dystrybucje GNU / Linux przyniosły radykalną zmianę sposobu, w jaki systemy operacyjne są rozwijane poprzez budowanie wspólnoty rozwoju w całym internecie.

Ten rozwój społeczności w Internecie ma następujące cechy, które opisano szczegółowo w dalszej części tego artykułu:

Ten szybki cykl nie nadaje się do większości zastosowań przemysłowych lub osobistych. Następnie pojawiają się dystrybucje GNU / Linuksa, których główną rolą jest zapewnienie stabilności poprzez udostępnianie wersji jądra Linuksa w wolniejszym tempie i utrzymywanie tych wersji przez kilka lat.

Publiczny proces rozwoju w Internecie

Greg Kroah-Hartman wyjaśnił proces rozwoju jądra Linuksa dla Groklaw . Greg Kroah-Hartman pisze sterowniki dla Linuksa od 1999 roku i obecnie jest opiekunem niektórych podsystemów jądra (USB, rdzeń sterownika, sysfs, linux-hotplug, udev, itp.).

Koncepcja łatki

Aby zrozumieć, jak działa ten proces, musisz najpierw zrozumieć, co to jest łatka (lub łatka francuska). Aby zmiana została zaakceptowana w jądrze, programiści muszą stworzyć łatkę i wysłać ją do opiekuna kodu, który chcą zmienić. Robią to, wprowadzając zmiany w kodzie źródłowym jądra, a następnie używając narzędzia porównywania . To narzędzie generuje plik w formacie tekstowym (plik poprawki), który zawiera listę zmodyfikowanych linii w ich stanie przed i po modyfikacji, jak pokazano w poniższym przykładzie:

--- a/drivers/usb/image/microtek.c +++ b/drivers/usb/image/microtek.c @@ -335,7 +335,7 @@ static int mts_scsi_abort (Scsi_Cmnd *sr mts_urb_abort(desc); - return FAILURE; + return FAILED; } static int mts_scsi_host_reset (Scsi_Cmnd *srb)

Przykład pokazuje, że plik „drivers / usb / image / microtek.c” zawiera wiersz, który był przed zmianą:

return FAILURE;

i jest teraz po zmianie:

return FAILED;

Ten plik tekstowy można wysłać pocztą e-mail do innych osób, które mogą natychmiast zobaczyć zmienione wiersze kodu i przekazać opinię na temat zmiany. Aby zastosować łatkę, wszystko, co musisz zrobić, to uruchomić inny program o nazwie patch , przekazując mu plik poprawki jako parametr.

Cały rozwój jądra Linuksa odbywa się poprzez publiczne wysyłanie poprawek pocztą elektroniczną. Patrząc na główną listę dyskusyjną poświęconą rozwojowi jądra (na przykład http://marc.theaimsgroup.com/?l=linux-kernel ), można zobaczyć setki tych poprawek wysłanych do rundy, omówionych, skrytykowanych.

Łańcuch produkcji i przetwarzania plastrów

Zespół programistów jądra to grupa ludzi, którzy stworzyli pseudo-piramidę. U podstawy piramidy stoją setki programistów, którzy piszą od 1 do kilku tysięcy łatek. Ci programiści wysyłają swoje poprawki do opiekuna pliku lub grupy plików, które zmodyfikowali. Lista opiekunów jest przechowywana w pliku MAINTAINERS, który znajduje się w źródłach głównej gałęzi rozwojowej jądra. Obecnie istnieje około 300 różnych opiekunów.

Jeśli opiekun uzna zmianę za uzasadnioną i ją zatwierdzi, wysyła ją do opiekuna podsystemu jądra, którego dotyczy problem. Istnieją opiekunowie dla prawie wszystkich podsystemów jądra (sieć, sterowniki USB, wirtualny system plików, rdzeń modułu, rdzeń sterownika, sterowniki Firewire, sterowniki sieciowe itp.) Osoby te są również wymienione w pliku MAINTAINERS i wszystkie z nich. Opiekunowie poszczególnych pliki lub kierowcy wiedzą, do kogo wysłać zmiany.

Opiekunowie podsystemu następnie wysyłają łaty do zatwierdzenia przez Linusa Torvaldsa lub Andrew Mortona i wtedy łatka jest włączana do głównej gałęzi rozwojowej jądra.

Zwróć uwagę, że każda osoba, która dotknie poprawki w tym łańcuchu transmisji, dodaje wiersz „Podpisany przez:” do kodu, który pokazuje dokładnie, kto wprowadził zmianę i przez kogo została zatwierdzona. W przypadku błędu można natychmiast zidentyfikować osoby odpowiedzialne za winę.

Publikacja łatek na listach mailingowych

Wszystkie zmiany są wykonywane przez e-mail. Programiści wysyłają poprawki do innych programistów na różnych listach mailingowych. Istnieje główna lista linux-kernel . Ta lista otrzymuje około 200 do 300 wiadomości dziennie i omawiany jest tam prawie każdy aspekt jądra. Ze względu na duży ruch wszystkie podsekcje rdzenia utworzyły własne listy mailingowe, aby współpracować w określonym obszarze.

Wiadomości zamieszczane na tych listach mailingowych są archiwizowane w wyspecjalizowanych witrynach, na przykład „  http://marc.theaimsgroup.com/  ” ( ArchiveWikiwixArchive.isGoogle • Co robić? ) I http: // www .gmane .org , które umożliwiają konsultację i badanie wiadomości rozpowszechnianych w przeszłości.

Tak więc łatka jest umieszczana na liście mailingowej. Inni programiści przeglądają to, oferują sugestie z kopią na liście, aby wszyscy wiedzieli. W końcu zostaje znaleziony konsensus i łatka jest akceptowana przez opiekuna, aby przesłać ją wyżej w łańcuchu.

Aby to zilustrować, weźmy przykład Arjana Van de Ven, programisty jądra Linuksa i jego projektu Fastboot, mającego na celu skrócenie czasu uruchamiania systemu GNU / Linux.

Po przemyśleniu wszystkiego, co mogłoby spowolnić po uruchomieniu jądra, Arjan wymyślił rozwiązanie w postaci zestawu 3 łatek. Te poprawki można zobaczyć tutaj:

patch 0/3: fastboot patches series 1 patch 1/3: fastboot: Create a "asynchronous" initlevel patch 2/3: fastboot: turn the USB hostcontroller initcalls into async initcalls patch 3/3: fastboot: convert a few non-critical ACPI drivers to async initcalls

Wkroczyło wielu programistów, wątek można śledzić tutaj:

http://thread.gmane.org/gmane.linux.kernel/709026/focus=709139

A potem interweniował Linus Torvalds i stwierdził, że rozwiązanie nie jest zadowalające, ponieważ nie jest na odpowiednim poziomie szczegółowości:

http://article.gmane.org/gmane.linux.kernel/743021/

Oryginalny autor wziął pod uwagę uwagi Linusa i przedstawił nową propozycję z następującą serią łatek:

http://article.gmane.org/gmane.linux.acpi.devel/36513

które zostały ponownie skomentowane, a rozwój był kontynuowany.

Jak pokazuje powyższy przykład, cały rozwój jądra jest publiczny, widoczny dla wszystkich, ponownie zarchiwizowany publicznie dla wszystkich. Ten publiczny przegląd modyfikacji kodu jądra Linuksa przez wiele par oczu jest niezbędny, ponieważ pomaga zapewnić jakość w procesie rozwoju.

Szybki i stopniowy cykl rozwoju

Wczesne publikowanie, publikowanie często jest podstawową zasadą tworzenia wolnego oprogramowania.

Na początku rozwoju jądra Linuksa (około 1991 r. ) Linus Torvalds nierzadko wypuszczał nową wersję jądra Linuksa kilka razy dziennie. Dzięki takiemu modelowi rozwoju Linus w bardzo efektywny sposób zaangażował swoich użytkowników w proces rozwoju. Ten sposób kultywowania społeczności współtwórców i wykorzystywania Internetu jako narzędzia do współpracy, jakiego nikt inny nie zrobił wcześniej, był kluczowymi czynnikami sukcesu jądra Linuksa.

Cykl rozwoju jądra Linuksa

Od tego samego początku ten cykl rozwoju nieco zwolnił, jednak jądro Linuksa nadal ewoluuje w bardzo szybkim tempie w porównaniu z oprogramowaniem zamkniętym (Windows XP w 2001 r. , Windows Vista w 2007 r. ): Wersja 2.6. X co 8 do 12 tygodni, jak wskazano w poniższej tabeli:

Wersja jądra 2.6.0 2.6.1 2.6.2 2.6.3 2.6.4 2.6.5
Data wydania 18 grudnia 2003 9 stycznia 2004 4 lutego 2004 18 lutego 2004 11 marca 2004 04 kwietnia 2004
Wersja jądra 2.6.6 2.6.7 2.6.8 2.6.9 2.6.10 2.6.11
Data wydania 10 maja 2004 16 czerwca 2004 14 sierpnia 2004 18 października 2004 24 grudnia 2004 2 marca 2005
Wersja jądra 2.6.12 2.6.13 2.6.14 2.6.15 2.6.16 2.6.17
Data wydania 17 czerwca 2005 29 sierpnia 2005 28 października 2005 3 stycznia 2006 20 marca 2006 18 czerwca 2006
Wersja jądra 2.6.18 2.6.19 2.6.20 2.6.21 2.6.22 2.6.23
Data wydania 20 września 2006 29 listopada 2006 4 lutego 2007 25 kwietnia 2007 8 lipca 2007 9 października 2007
Wersja jądra 2.6.24 2.6.25 2.6.26 2.6.27 2.6.28 2.6.29
Data wydania 24 stycznia 2008 17 kwietnia 2008 13 lipca 2008 9 października 2008 24 grudnia 2008 23 marca 2009
Wersja jądra 2.6.30 2.6.31 2.6.32 2.6.33 2.6.34 2.6.35
Data wydania 9 czerwca 2009 9 września 2009 3 grudnia 2009 24 lutego 2010 16 maja 2010 3 sierpnia 2010

Różne gałęzie rozwoju

Obecnie rozwój jądra Linuksa odbywa się w kilku gałęziach  :

Gałęzie rozwoju jądra Linux.svg

Zarządzanie wersjami jądra

Do kwietnia 2005 roku zespół programistów jądra korzystał z komercyjnego oprogramowania BitKeeper do zarządzania wersjami źródeł jądra. Plik5 kwietnia 2005, firma BitMover ogłosiła, że ​​skupia się wyłącznie na swojej komercyjnej ofercie BitKeeper i wycofuje darmowego (ale nie darmowego) klienta używanego przez wielu darmowych programistów.

To wydarzenie skłoniło twórców jądra Linuksa do wynalezienia własnego narzędzia do zarządzania wersjami, które nazywało się Git .

Dystrybucje GNU / Linux

Aby zrozumieć rolę dystrybucji GNU / Linuksa , ważne jest, aby mieć pewne pojęcia na temat obwodu jądra Linuksa i jego modularności.

Zakres jądra Linuksa: jądro, gałąź jądra i dystrybucje GNU / Linux

Zakres jądra Linuksa jest często źle rozumiany, ponieważ ten sam termin Linuksa jest używany dla jądra Linuksa (samego jądra ), gałęzi drzewa jądra i dystrybucji GNU / Linux, z których każda ma jeszcze jeden zakres. Większy, jak pokazano na Niżej wymienione. Dystrybucja GNU / Linux jest zbiorem tysięcy pakietów oprogramowania i gałęzi jądra, zawierającej jądro, sterowniki, komponenty sieciowe i systemy plików.

Modułowość jądra Linuksa

Gdyby filozofię Uniksa , która również stanowi podstawę jądra Linuksa, można by podsumować jednym słowem, to słowo to prawdopodobnie oznaczałoby modułowość. Uniks został pierwotnie opracowany w celu uzyskania wysoce modułowego rozwiązania, aby był bardziej elastyczny i przyjazny dla użytkownika niż monolityczne i złożone systemy operacyjne w tamtych czasach. Ta modułowość przetrwała i była nieustannie udoskonalana przez około 35 lat systemów operacyjnych typu Unix; wpłynęło to na ich niezwykłą żywotność i niezmienną popularność pomimo wieku (co jest ważne zgodnie ze standardami IT).

GNU / Linux to bardzo modułowy system operacyjny . Użytkownik może zainstalować tylko te części, które mu odpowiadają. W większości przypadków wybierze domyślne instalacje oferowane w menu instalacji, ale nie musi. Na przykład, jeśli instaluje serwer, można dezaktywować interfejs graficzny, aby zwolnić pamięć i procesor do innych zadań.

Modułowość zaczyna się od jądra. Nawet jeśli użytkownicy nie kompilują własnego jądra, obecność systemu ładującego (którym może być GRUB lub LILO) jest przypomnieniem, że nie są oni ograniczeni do jednego zainstalowanego jądra. Kiedy użytkownicy kompilują własne jądro, dowiadują się, że jego zawartość jest konfigurowalna i że wiele sterowników może być w razie potrzeby ładowanych jako moduły przez system, zamiast być wkompilowanych w jądro.

Ta sama modułowość występuje na poziomie podsystemów. Jądro współpracuje z ponad 30 różnymi systemami zarządzania plikami. Zarządzanie pakietami oprogramowania ma dwa główne formaty, RPM i Debian, a także kilka nowszych formatów, takich jak przenoszenie dystrybucji Gentoo. Inne alternatywne systemy są nadal w fazie rozwoju.

Podsystemy wciąż ewoluują. Weźmy na przykład lpd, oryginalny system drukowania firmy Unix w Berkeley. Przez lata był rozszerzany przez LPRng, a następnie zastąpiony przez CUPS (Common UNIX Printing System). Podobnie, gdy kilka lat temu XFree86 stało się nie do przyjęcia ze względu na zmianę jego licencji, która uczyniła go niewolnym, X.org zastąpił go rozwidleniem poprzedniej wersji XFree86. Niedawno ALSA zastąpiła OSS (Open Sound System) w wielu dystrybucjach.

Historia powtarza się w interfejsie użytkownika. W większości dystrybucji domyślną powłoką jest GNU bash , która ewoluowała przez lata. Istnieje jednak ponad pół tuzina możliwych zamienników, w tym tcsh, csh, pdksh, zsh i BusyBox.

Taka sama różnorodność występuje w środowisku biurowym . KDE i GNOME to najpopularniejsze środowiska, ale niektórzy użytkownicy, którzy przedkładają wydajność nad łatwość użycia, przyjmą na przykład IceWM zamiast KDE lub GNOME. Jeśli chodzi o menedżera okien, KDE wybrało KWM, podczas gdy GNOME wybrał Metacity, ale te domyślne menedżery można zastąpić dziesiątkami alternatyw.

Ta modułowość umożliwia również aktualizację niektórych części systemu bez wpływu na resztę systemu. Na przykład można zainstalować najnowszą wersję GNOME lub KDE bez zmiany wersji jądra.

Rola dystrybucji GNU / Linux

Ta wolność wyboru niekoniecznie jest odpowiednia dla wszystkich użytkowników. Tutaj właśnie wkraczają dystrybucje GNU / Linuksa.

Jak Ian Murdock, założyciel dystrybucji Debian, zauważył w manifeście z 1993 roku  :

Dystrybucje są niezbędne dla przyszłości Linuksa. Eliminują potrzebę lokalizowania, pobierania, kompilowania i instalowania przez użytkownika, a także zawierają szereg narzędzi niezbędnych do zbudowania działającego systemu Linux. Ciężar budowy systemu spoczywa na twórcy dystrybucji, a jego pracą można dzielić się z tysiącami innych użytkowników. Prawie wszyscy użytkownicy Linuksa zaczną od dystrybucji, a większość z nich będzie nadal korzystać z dystrybucji ze względu na wygodę, nawet po zapoznaniu się z systemem .

Dystrybucje GNU / Linuksa odgrywają ważną rolę w ekosystemie zbudowanym wokół jądra Linuksa.

Łączą najlepsze pakiety oprogramowania (na przykład dystrybucja Debiana zawiera ponad 10 000 pakietów oprogramowania) w zintegrowaną ofertę dostosowaną do ich użytkowników lub klientów.

Ponadto niewiele osób, a nawet mniej firm, może sobie pozwolić na szybki, 8-12 tygodniowy cykl wydawania jądra. Dystrybucje zapewniają cykl bardziej dostosowany do ich potrzeb. Częstotliwość wydawania nowych wersji zależy od uznania każdej dystrybucji i może wynosić od sześciu miesięcy dla bardziej zaawansowanych, takich jak Fedora lub Ubuntu , od 12 do 18 miesięcy dla bardziej komercyjnych dystrybucji, takich jak Red Hat , SuSE i nowsze ”. lat dla Debiana .

Cykl rozwoju niektórych dystrybucji GNU / Linuksa

Cykl rozwoju dystrybucji Red Hat

Cykl rozwoju dystrybucji Debiana

Uwagi i odniesienia

  1. „  Groklaw - How The Kernel Development Process Works, Greg Kroah-Hartman  ” , na groklaw.net (dostęp 22 kwietnia 2021 ) .

Zobacz też

Linki wewnętrzne