De ce sistemul Linux este încă divizor după toți acești ani

Publicat: 2022-01-29
Un terminal Linux cu text verde pe un laptop.
fatmawati achmad zaenuri/Shutterstock

systemd are 10 ani, dar sentimentele legate de el în comunitatea Linux nu s-au atenuat – este la fel de dezbinat acum ca oricând. Deși este folosit de multe distribuții majore de Linux, opoziția hardcore nu a cedat.

Secvența de pornire Linux

Când porniți computerul, hardware-ul pornește și apoi (în funcție de tipul de sector de pornire pe care îl folosește computerul) fie se execută înregistrarea de pornire principală (MBR), fie rulează Unified Extensible Firmware Interface (UEFI). Ultima acțiune a ambelor este de a porni nucleul Linux.

Nucleul este încărcat în memorie, se decomprimă și se inițializează. Un sistem de fișiere temporar este creat în RAM, de obicei printr-un utilitar numit initramfs sau initrd . Acest lucru permite determinarea și încărcarea driverelor necesare. Aceasta, la rândul său, permite sistemului de fișiere din spațiul utilizatorului să se încarce și să se pregătească pentru a stabili mediul spațiului utilizator.

Crearea mediului de spațiu utilizator este gestionată de procesul init, care este primul proces lansat de kernel într-un spațiu utilizator. Are un ID de proces (PID) de 1. Toate celelalte procese sunt copii directe sau indirecte ale procesului init.

Înainte de systemd , standardul standard pentru procesul de init era o reelaborare a sistemului Unix System V init. Au existat alte opțiuni disponibile, dar System V init a fost opțiunea standard în majoritatea distribuțiilor derivate din non-Berkeley Software Distribution (BSD). Deoarece a venit direct de la System V Unix – strămoșul spiritual al Linuxului – mulți oameni îl consideră „modul oficial” de a face init.

Publicitate

Procesul de inițializare pornește toți demonii și serviciile necesare pentru ca sistemul de operare să funcționeze într-un mod semnificativ, interactiv. Acești demoni se ocupă de lucruri precum stiva de rețea, permițând alt hardware în interiorul computerului și oferind un ecran de pornire.

Multe dintre aceste procese de fundal continuă să ruleze după ce pornesc. Ei fac lucruri precum înregistrarea informațiilor despre evenimente, urmăresc modificările hardware pe măsură ce inserați sau eliminați dispozitive și gestionează conectările utilizatorilor. Deloc surprinzător, sistemul init include și funcții de gestionare a serviciilor.

Putem folosi ps pentru a vedea procesul care are PID 1. Vom folosi opțiunile f (listare în format complet) și p (PID):

 ps -fp 1 

Vedem că procesul cu PID 1 este systemd . Rularea aceleiași comenzi pe Manjaro Linux a dat un rezultat diferit. Procesul cu PID 1 a fost identificat ca /sbin/init . O privire rapidă la acel fișier arată că este o legătură simbolică către systemd :

 ps -fp 1
 ls -hl /sbin/init 

Folosind opțiunea ppid (ID proces părinte) cu ps , putem vedea ce procese au fost lansate direct de systemd :

 ps -f --ppid 1 

Este o listă destul de lungă, așa cum puteți vedea în imaginea de mai jos.

Alternativele

Mai multe proiecte au încercat să producă o alternativă la sistemul tradițional System V init. Una dintre principalele probleme este, cu System V init, toate procesele sunt pornite în serie, unul după altul. Pentru a îmbunătăți eficiența secvenței de pornire, multe proiecte alternative folosesc paralelismul pentru a porni procesele simultan și asincron.

Iată câteva informații despre unele dintre acestea:

  • Parvenit: Dezvoltat de Canonical, a fost folosit în Ubuntu 9.10, Red Hat, Red Hat Enterprise Linux (RHEL) 6, CentOS 6 și Fedora 9.
  • Runit: rulează pe FreeBSD și alte derivate BSD, macOS și Solaris, precum și sisteme Linux. Este, de asemenea, sistemul de inițializare implicit pe Void Linux.
  • s6-linux-init: Acest înlocuitor pentru System V init a fost conceput pentru a urma îndeaproape filozofia Unix, care este adesea redusă la sunetul „fă un lucru și fă-l bine”.
Publicitate

Există multe altele cu funcționalități și design diferite. Cu toate acestea, niciunul dintre ei nu a creat systemd care a făcut-o.

Calea de sistem

systemd a fost lansat în 2010 și a fost folosit în Fedora în 2011. De atunci, a fost adoptat de multe distribuții. A fost dezvoltat de Lennart Poettering și Kay Sievers, doi ingineri software de la RedHat.

systemd este mult mai mult decât un înlocuitor init. Mai degrabă, este o suită de aproximativ 70 de binare care se ocupă de inițializarea sistemului, demonii și serviciile, jurnalizarea și jurnalizarea și multe alte funcții care erau deja gestionate de modulele dedicate în Linux. Majoritatea acestora nu au nimic de-a face cu inițializarea sistemului.

Unii dintre demonii furnizați de systemd sunt:

  • systemd-udevd: Gestionează dispozitivele fizice.
  • systemd-logind: Gestionează conectările utilizatorilor.
  • systemd-resolved: Oferă rezoluție nume de rețea aplicațiilor locale.
  • systemd-networkd : gestionează și detectează dispozitivele de rețea și gestionează configurațiile rețelei.
  • systemd-tmpfiles: creează, șterge și curăță fișiere și directoare volatile și temporare.
  • systemd-localed: Gestionează setările locale ale sistemului.
  • systemd-machined: detectează și monitorizează mașinile virtuale și containerele.
  • systemd-nspawn: poate lansa o comandă sau alt proces într-un container ușor de spațiu de nume, oferind o funcționalitate similară cu chroot.

Și acesta este doar vârful aisbergului, care este și miezul problemei. systemd a depășit de mult ceea ce se cere unui sistem init, care, conform oponenților săi, este însăși definiția scope creep.

"E prea mare. Face prea mult.”

Oponenții systemd subliniază mixul mare și curios de funcționalități pe care îl cuprinde. Toate aceste caracteristici existau deja în Linux și, poate, unele dintre ele aveau nevoie de o reîmprospătare sau de o nouă abordare. Cu toate acestea, a grupa toate aceste funcționalități în ceea ce se presupune a fi un sistem init este derutant din punct de vedere arhitectural.

Publicitate

systemd a fost numit un singur punct de eșec pentru prea multe funcții critice, dar acest lucru nu pare să fie justificat. Desigur, aruncă filozofia Unix de a crea instrumente mici care funcționează împreună în loc de bucăți mari de software care fac totul pe fereastră. Deși systemd nu este strict monolitic (este compus din multe binare, mai degrabă decât unul uriaș), include o mulțime de instrumente și comenzi de management disparate sub o singură umbrelă.

Deși s-ar putea să nu fie monolitic, este mare. Pentru a ne face o idee despre scară, am numărat liniile de text din baza de cod kernel 5.6.15 și ramura master systemd a depozitului GitHub.

Aceasta a fost o măsură relativ brută. Numărea linii de text, nu doar linii de cod. Deci, aceasta a inclus comentarii, documentație și orice altceva. Cu toate acestea, a fost o comparație asemănătoare și ne-a oferit o etapă simplă:

 ( find ./ -name '*.*' -print0 | xargs -0 cat ) | wc -l

Nucleul avea aproape 28 de milioane (27.784.340, mai exact) de linii de text. În schimb, systemd a avut 1.349.969, sau aproape 1,4 milioane. Cu metricul nostru happy-go-lucky, systemd iese la aproximativ 5% din dimensiunea nucleului, ceea ce este o nebunie!

Ca o altă comparație, numărul de linii pentru o implementare modernă a System V init pentru distribuția Arch Linux a ajuns la 1.721 de linii.

Poettering nu ține cont de Societatea de calculatoare a Institutului de Ingineri Electrici și Electronici (IEEE) și nici de standardul POSIX (Portable Operating System Interface). De fapt, el a încurajat dezvoltatorii să ignore POSIX:

„Așadar, obțineți-vă o copie a interfeței de programare Linux, ignorați tot ce spune despre compatibilitatea POSIX și piratați-vă uimitor software Linux. Este destul de uşurator!”

Publicitate

Au existat acuzații că systemd este un proiect Red Hat de care beneficiază doar Red Hat, dar este alimentat forțat în lumea Linux mai largă. Da, a fost născut în Red Hat și este guvernat și condus de acesta. Cu toate acestea, dintre cei 1.321 de colaboratori, doar o fracțiune funcționează pentru Red Hat.

Deci, care sunt beneficiile Red Hat?

Jim Whitehurst, președintele IBM, care a fost cândva CEO al Red Hat, a spus:

„Red Hat a luat în considerare multe opțiuni disponibile și a folosit chiar și Upstart de la Canonical pentru Red Hat Enterprise Linux 6. În cele din urmă, am ales systemd deoarece este cea mai bună arhitectură care oferă extensibilitate, simplitate, scalabilitate și interfețe bine definite pentru a rezolva problemele pe care le vedem. astăzi și prevăd în viitor.”

Whitehurst a mai spus că au văzut beneficii și în sistemele încorporate. Red Hat colaborează cu „cei mai mari furnizori încorporați din lume, în special în industriile de telecomunicații și auto, unde stabilitatea și fiabilitatea sunt preocuparea numărul unu”.

Acestea par motive solide din punct de vedere tehnic. Puteți înțelege nevoia companiei de fiabilitate și nu este nerezonabil ca Red Hat să se îngrijească de propriile interese, dar ar trebui toți ceilalți să urmeze exemplul?

Beți sistemul Kool-Aid?

Unii oponenți ai systemd spun că distribuțiile și oamenii urmăresc orbește exemplul lui Red Hat și îl adoptă.

Totuși, la fel ca și expresia „băutul Kool-Aid”, nu este chiar corect. Creată în 1978, după ce liderul de cult, Jim Jones, și-a constrâns cei peste 900 de adepți să se sinucidă, bând un lichid cu aromă de struguri împletit cu cianură, expresia îl rușine în mod incorect pe Kool-Aid. Grupul a băut de fapt Flavour Aid, dar Kool-Aid a fost pătruns de acea perie de atunci.

Publicitate

În plus, distribuțiile Linux nu urmează orbește Red Hat; adoptă systemd după o deliberare serioasă. Dezbaterea a făcut furori pe listele de corespondență Debian pentru o lungă perioadă de timp. Cu toate acestea, în 2014, comunitatea a votat pentru adoptarea systemd ca sistem de inițializare implicit, dar pentru a sprijini și alternative.

Debian este un exemplu important deoarece nu este derivat din RedHat, Fedora sau CentOS. Nu există nicio conducere aplicată la Debian de la Red Hat. Și Debian, ca PID 1, are mulți descendenți, inclusiv Ubuntu și numeroasele sale spin-off.

Deciziile luate de comunitatea Debian sunt de mare anvergură. Ele sunt, de asemenea, dezbătute energic și votate folosind metoda de vot Condorcet. Nici comunitatea nu face astfel de alegeri cu ușurință.

A votat din nou în decembrie 2019 pentru a continua să se concentreze pe systemd și să continue să exploreze alternative. Opusul urmăririi orbește, acesta este de fapt un exemplu manual de democrație și libertate de alegere la locul de muncă.

Limitările alegerii

În general, nu puteți alege dacă să utilizați systemd cu o anumită distribuție Linux. Mai degrabă, distribuțiile în sine aleg dacă doresc să-l folosească și puteți alege ce distribuție Linux preferați. Poate că o distribuție Linux pe care o iubiți a trecut la systemd . La fel ca un muzician preferat care schimbă genurile, acest lucru poate fi tulburător.

Persoanele care folosesc Debian, Fedora, CentOS, Ubuntu, Arch, Solus și openSUSE și se opun adoptării systemd , ar putea simți că nu mai folosesc distribuția aleasă. Dacă se simt suficient de puternic cu privire la oricare dintre alegerile arhitecturale, scăderea domeniului de aplicare sau nesocotirea pentru POSIX, ar putea găsi că este insuportabil să continue să folosească acea distribuție.

Publicitate

Există un spectru, desigur. La un capăt, ai oamenii cărora nu înțeleg problemele (sau nici măcar nu le pasă), iar la celălalt, ai obiectorii pasionați. Undeva la mijloc sunt cei cărora nu le plac schimbările, dar nu sunt suficient de deranjați pentru a sări nava. Dar cum rămâne cu refugiații de distribuție, care nu pot rămâne la distribuția aleasă din cauza preferințelor sau principiilor lor?

Din păcate, nu este la fel de ușor ca să instalați orice sistem de init doriți. Nu toată lumea are capacitatea tehnică de a face asta, indiferent de dificultățile care apar atunci când aplicațiile sau mediile desktop, cum ar fi GNOME, au dependențe de systemd .

Dar trecerea la o altă distribuție? Unele, cum ar fi Devuan, au apărut ca fork-uri de distribuții non- systemd (în acest caz, Debian) care adoptaseră systemd . Utilizarea Devuan ar trebui să fie similară cu distribuția părinte, dar acesta nu este cazul pentru toate fork-urile non- systemd . De exemplu, dacă părăsiți Fedora și treceți la AntiX, Gentoo sau Slackware, veți avea o experiență foarte diferită.

Nu merge nicăieri

Îmi place ceva din ceea ce face systemd (mecanisme de control simple și standardizate pentru procese). Nu înțeleg motivul pentru unele dintre ceea ce face (jurnalele binare). De asemenea, nu-mi place ceva din ceea ce face (renovarea folderelor de acasă – cine a cerut asta?).

Distribuțiile precum Debian fac lucrul inteligent și investighează alternative pentru a-și menține opțiunile deschise. Cu toate acestea, systemd este în el pe termen lung.

Publicitate

Dacă administrați mașini Linux pentru alții, învățați systemd la fel de bine ca și System V init. În acest fel, indiferent de ce întâlniți, vă veți putea îndeplini sarcinile.

Folosești Linux acasă? Dacă da, alegeți o distribuție care să îndeplinească atât nevoile dumneavoastră tehnice, cât și să vă completeze ideologia Linux.

RELATE : Systemd va schimba modul în care funcționează directorul dvs. principal Linux