Új Linux születik? – A nagyra törő systemd, és ami mögötte van

Systemd everywhere
Eleinte nem sokat foglalkoztam a systemdvel, mint olyannal, sőt. Igazából nem is értettem, mi ez a nagy, hitvitába átcsapó mizéria körülötte. Ám a kíváncsiságtól hajtva utána néztem egy kicsit az egész projektnek, a naponta változó céljainak, a támogatói és ellenzői érveknek, és néhány hét alatt elég markáns véleményem lett a daemonnak csúfolt systemdről. Az alábbiakban tehát egy erősen szubjektív vélemény következik Lennart Poettering legújabb szörnyéről.

Röviden a rendszerindítókról

A rendszer indítása bonyolult folyamat, ám mi most csak a rendszerindítókra fogunk részletesen kitérni.

Miután a rendszerbetöltő (pl. GRUB, LILO) elindította a kernelt, képbe kerül a rendszerindító (init rendszer), amit maga a kernel indít. A rendszerindító feladata, ahogy a neve is mutatja, hogy ténylegesen elindítsa az operációs rendszert. Az init az első processz (PID=1), a rendszer leállásáig fut, és minden később induló processz az ő leszármazottja. A feladata még a rendszer leállításának végrehajtása is.

SysVinit

A SysVinit a tradicionális rendszerindító. Az első kereskedelmi Unix egyik 1988-as verziójában mutatkozott be. Ez a rendszer a System V R4 volt, innen ered a SysVinit elnevezés is.

A systemd térhódításáig a legtöbb Linux disztribúcióban alapértelmezett init rendszer volt. Ennek oka, hogy jól dokumentált, stabil, a támogatott platformokon és kernelekkel jól működik és a legkisebb, legegyszerűbb init rendszer, mivel szinte csak a rendszerindításért felel.Ám a korából adódóan tervezési problémákat cipel magával. Például a párhuzamos indítás képességének hiányát vagy azt, hogy disztribúciónként eltérő lehet (futási szintek, script felépítés stb.). Időről-időre kezdődtek projektek, amik egy új, jobb init rendszer elkészítését tűzték ki célul.

Upstart

Az Ubuntu saját init rendszere, ami 2006-ban debütált az Ubuntu 6.10-ben, majd alapértelmezett lett a 9.10-ben. Célja az volt, hogy a szigorúan szinkron működési elvű SysVinitet egy modernebb, eseményvezérelt init rendszerrel váltsa fel. Ilyen esemény például egy pendrive csatolása/leválasztása. A 15.04-től kezdődően az Ubuntu dobja a saját fejlesztésű Upstartot és systemdre vált.

És végre, egy elég hosszúra nyúlt bevezető után eljutottunk a cikk témájához, a systemdhez.

systemd

A systemd, ahogy a neve is mutatja, egy daemon. (Unix konvenció szerint a daemonokat egy név mögé illesztett d betűvel jelzik.) Alapvető célja, hogy leváltsa a SysVinitet. Mint ilyen, nem ő az első és nem is az utolsó kezdeményezés. A probléma nem ott kezdődik, hogy a systemd egy új, modern rendszerindító szeretne lenni. A gond ott van, ahogy ezt el szeretné érni.

Red Hat logó

A systemd kiagyalója, atyja és legfőbb fejlesztője a Red Hates német Lennart Poettering, aki nem ismeretlen. A nevéhez fűződik többek között a PulseAudio és az Avahi. Rajta kívül a már szintén Red Hat alkalmazásában álló Kay Sievers tekinthető a systemd másik fő alakjának. Ha dereng a neve, az nem véletlen, mivel ő írta az udevet és a Gummibootot. Látható tehát, hogy a systemd kulcsfigurái már letettek valami az asztalra. Valamit, valamilyen állapotban. A PulseAudióval és az udevvel szinte mindenkinek másmilyen tapasztalatai vannak, ám a magam nevében szólva engem nem nyugtat meg a tudat, hogy a systemd többnyire a fent nevezett két személy által íródik.

A systemd nem új keletű, hiszen a fejlesztése 2011-ig nyúlik vissza. És egészen addig semmi baj nincs vele, amíg csak egy init rendszer. Ám a systemd már régóta több, mint egyszerű init rendszer. De akkor mi is a systemd? Erre a kérdésre valószínűleg Poettering és Sievers sem tudna kielégítő választ adni, mivel a projekt célja látszólag napról napra változik. Szerintem sokat mondó, ha megemlítem, hogy a cikk írásakor (2015. június 2.) a systemd legutolsó stabilnak nevezett verziója a 220-as. Igen, kettőszázhúsz.

A projekt célja

  • gyors rendszerbetöltés,
  • versenyképes általános célú operációs rendszerré változtatni a Linuxot,
  • az internet következő generációs operációs rendszerének megalkotása,
  • a disztribúciók közötti értelmetlen különbségek eltüntetése (pl. /etc) és
  • az innováció visszahozása az alaprendszerbe (OS).

Meghódítandó platformok

  • asztali gép,
  • szerver,
  • konténer,
  • beágyazott rendszer,
  • mobil eszközök,
  • felhő és
  • klaszter.

Ahogy a fentiekből látható, a systemd kapcsán már legkevésbé sem az init rendszerről van szó. A systemd egy sokfunkciós valami, ami éppen init rendszer is. Nem pedig egy init rendszer, ami még mást is tud. Meg kérdem én, miért kellene egy init rendszernek az alábbi képességekkel rendelkeznie?

Systemd: beacuse we can

Képességek

Init rendszer és még képes:

  • naplózásra,
  • bejelentkezések kezelésére,
  • eszközök kezelésére,
  • ideiglenes és gyakran változó fájlok kezelésére,
  • kijelző fényerejének mentésére és visszaállítására,
  • wifi állapot mentésére és visszaállítására (rfkill),
  • bootchart készítésére,
  • titkosított tároló létrehozására,
  • EFI/GPT felismerésére,
  • virtuális gép/konténer regisztrálására,
  • minimális szintű konténer kezelésre,
  • hostnév kezelésre,
  • lokalizációs beállítások kezelésére,
  • idő és dátum kezelésére (szinkronizálás is!),
  • sysctl változó kezelésre,
  • konzol kezelésre,
  • hálózat kezelésre,
  • DNS kezelésre,
  • tűzfalként működni
  • és még egyéb dolgokra.

Az előreolvasás képességével is rendelkezett egy ideig, ám Poettering úgy vélekedett, hogy földi halandók már nem használnak merevlemezt csak SSD-t, így erre nincs szükség. Vagyis az előreolvasástól megszabadították a systemdt, ahelyett hogy mástól szabadították volna meg…

Ahogy a bőséges listából látható, a systemd mondhatni kinőtte magát. Egy túlméretezett mamut, ami egy init rendszerhez képest rengeteg extra funkcionalitással rendelkezik.

Olyanokkal, amikhez jó esetben egy init rendszernek semmi köze. Ám úgy tűnik, hogy az amúgy is nagyszabásúnak indult systemd projekt közben a főfejlesztőket elkapta a hév, és nincs megállás… amíg? Vajon mi a végső cél? Alaptelepítés része lenni? Megvan. Alapértelmezett init rendszer lenni? Megvan. A legtöbb disztrón alapértelmezettnek lenni? Megvan. Mégis mi kellhet még?

További potenciális célok

Systemd: full speed

A systemd ugyan nem fiatal projekt, de igazán most kezdett a linuxos köztudatba kerülni, amikor egyre több és több disztribúció kezdte vele leváltani az addig használt init rendszerét. Ám a systemd nemhogy nincs kész (valószínűleg soha nem lesz igazán az), ám még csak nem is stabil és megbízható. Poetteringék célja az, hogy egy új generációs init rendszer alkossanak, ami sok feladatot ellát, és kivált sok egyéb programot és csomagot. A kérdés igazából nem is az, hogy mi a további, a végső cél, hanem az, hogy miért hívják még mindig init rendszernek.

Ahogy maguk az alkotók többször, több konferencián is elmondták, nem áll tőlük távol a gondolat, hogy egy saját disztrókezdeményt készítsenek. Ha visszatekintünk a systemd képességeire (ahová a tervezett, de még nem megvalósítottakat fel sem írtam), látható, hogy egyre inkább kezd körvonalazódni egy alaprendszer. Egy kernel-systemd-asztali környezet trióból gyakorlatilag össze lehetne állítani egy OS-t. Sajnos. És ha esetleg megfordul a fejükben, hogy a kernelt is bedolgozzák a systemdbe (Gummiboot integrálási terv), meg ha megemlítem, hogy a Gnome 3-nak függősége a systemd, akkor lassan össze is állt egy totálisan bloat, használhatatlan valami. Mert a Gnome 3 jó indulattal sem asztali környezet, a systemd meg minden, csak nem „egyszerű init rendszer”.

Mielőtt félreértés esik, semmi bajom azzal a céllal, hogy egy modernebb, a mai igényekhez jobban alkalmazkodó init rendszer készüljön és kerüljön bele a disztrókba. Mert igenis vannak előnyei a systemdnek (pl. párhuzamosítás). Nekem a világmegváltó tervek és a „mi megmondjuk a tutit, ti csak használjátok” fejlesztői hozzáállás böki a csőrömet. Na meg az, hogy milyen hirtelen, és számomra meggondolatlanul lett alapértelmezett a főbb disztrók döntő hányadában.

Elterjedtsége

Az első systemdre átálló disztró a mindent kipróbáló Fedora lett a 15-ös verziónál. Aztán sorban jöttek a többiek, OpenSuse, RHEL, Ubuntu, Debian, Arch… Az átállási sort (és az indokokat) látva, megfogalmazódott bennem néhány kérdés.

Kérdések:

  • A megfontoltan (aka. hosszú idő után) változó Debian hirtelen váltott. Vajon milyen indíttatásból?
  • Az Ubuntu is váltott, azon indokkal, hogy váltott a Debian is, és könnyebb lesz az élet, ha közös az init rendszer. Az, hogy előtte az Ubuntu a saját fejlesztésű Upstartja sem volt közös a Debianéval? Ugyan már!
  • Saját fejlesztésű az Upstart. Miért dobták ilyen mondvacsinált ürüggyel a systemd miatt? Főleg úgy, hogy egy évvel korábban Mark Shuttleworth még hevesen ellenezte?
  • A RHEL, mint az üzleti felhasználók disztrója milyen megfontolásból tette alapértelmezetté a még kiforratlan, folyamatos bővülő, változó systemdt? Mármint azon kívül, hogy saját projekt. Kezdetben házon belül sem voltak odáig meg vissza tőle. Mi változott?

Anélkül, hogy összeesküvés-elméleteket gyártanék, az a véleményem, hogy valami olyasmi állhat a dolog mögött, amit mi, földi linuxosok, (még) nem láthatunk át. Azaz remélem, hogy minderre a váltási mizériára van valami ésszerű magyarázat, különben csalódtam.

Úgy vélem, ez egy drasztikus lépés volt. Ha nekem kellett volna döntés hoznom a systemd bevezetéséről az általam is vezetett disztróban, nem tettem volna egyből alapértelmezetté. Meggondolatlannak vélem, hogy egyből eldobták a SysVinitet és az Upstartot (nincs fejlesztés), mert a systemd még napi szintű bővítés, változás alatt áll.

A másik óriási problémám, hogy nemhogy alapértelmezett lett, de lassan a legtöbb disztribúcióban nem lesz lehetőség alternatívát használni. Néhány kevésbé elterjedt disztró és forrásalapú társuk nem használja a systemdt és/vagy kikerülhető, de nem feltétlenül akarnak az emberek szinte ismeretlen disztrókat használni, sokan pedig nem tehetik meg (hozzáértés híján), hogy pl. Gentoo-t használjanak.

Tehát systemd kapcsán a hirtelenjében, tömegesen alapértelmezetté válása és az alternatíva hiánya zavar. Már ami ezt a témakört érinti. Nézzük magát a programot!

Jellemzői

systemd components

A systemd hatalmas. Méltán érdemelte ki a bloatware besorolást. A fejlesztői szándékoknak megfelelően egyik fő célja az integráltság, hogy minden egyben legyen. Ezt megfejelik azzal, hogy már bevált, hagyományos linuxos eszközöket dobnak, majd helyette saját, kiforratlan szerzemény kerül bele a systemdbe. Nem egy külön, kiegészítő systemd csomagba, hanem magába a systemdbe. Megkerülhetetlenül, kihagyhatatlanul. Azaz pardon, fordítási időben bizonyos részek eltávolíthatóak belőle. De gondolom nem kell kihangsúlyoznom, hogy az átlagos felhasználó úgy használja, ahogy a disztrója szállítja, és nem fordítja újra, mert nem tudja.

Ezzel a felépítéssel a systemd tagadhatatlanul szembemegy a Unixos KISS-elvvel, ami szerint egy program egy valamihez értsen, de ahhoz nagyon. Nos, Poettering ezt sem veszi magára. Szerinte ugyanis azok, akik szerint a systemd szembemegy a Unix filozófiával, nem értik azt…

Nagymértékű integráltsága és összetettsége miatt rengeteg függősége van. Olyan függőségek, amik amúgy talán nem kerülnének fel a rendszerre, egyszerre biztosan nem. Hogy szerverek is vannak, amikre nem kéne egy kupac fölösleges program, mert több kód = több hiba? Hogy pláne nincs szükség szerveren, de sehol, egy-két hete commitolt, teszteletlen programkódra? Poettering köszöni az észrevételt, de szerinte ez jó így, és amúgy is, célja van ezzel. Mert nézzük csak meg, mennyivel tud többet a SysVinitnél, hát nyilván nagyobb lesz. Igen, Lennart, csak miért és kinek van erre szüksége?

A systemd egy minden az egyben mamut. És a fejlesztői szerint minden úgy tökéletes, ahogy ők csinálják… Nyilván. A kritikákkal nem foglalkoznak és/vagy sértésnek veszik, a hibákkal szintén nem foglalkoznak.

Tehát felmerül pár kérdés ezek kapcsán is:

  • Miért döntöttek úgy sorban a főbb disztribútorok, hogy egy KISS elveket felrúgó programot tesznek alapértelmezetté?
  • A systemd hatalmas, összetett. A több kód több hibalehetőséget rejt. A nem moduláris felépítése pedig a systemd összes részét felpakolja a gépre, így számos hibát is. Miért vállalják ezt a kockázatot indokolatlanul?
  • És amúgy is, miért nem moduláris a systemd? Könnyebb megírni, karbantartani, javítani és csak a valóban szükséges részei kerülnének telepítésre.
  • Miért nem érdeklik a fejlesztőket a felhasználói és kollegiális visszajelzések? Sem a hibajelentések, sem a javaslatok, sőt, még a patchek sem kellenek nekik. Ja, hogy Poettering szerint nincs annál rosszabb, mint mikor sokan, különböző stílusban írnak kódot és amúgy is, ők jobban tudják? Én kérek elnézést.
  • A két főkolomposon kívül alig pár ember írja a systemdt. Viszont akkora szakmai területeket felölelnek a program képességei, amihez ennyi ember egyszerűen nem érthet a kellő mértékben. Kinek és miért jó ez?
  • Miért írnak újra nulláról már régóta meglévő, bizonyított és működőképes programokat? Nem lenne ésszerűbb már meglévőt integrálni, ha már mindent bele akarnak pakolni? Rengeteg idő elmegy vele, hogy újra feltalálják a kereket, meg utána azzal, hogy befoltozzák a saját kis nulláról írt programjukat. Kinek és miért jó ez? Szerintem még Poetteringnek sem jó. Hacsak azért nem, hogy elmondhassa magáról, ilyen meg olyan programot is írt már. Sajnos kinézem belőle.

Úgy érzem, nem fogok választ kapni a kérdéseimre. Értelmes, logikus választ biztos nem.

Kritikák és reakciók

Feed the systemd animáció

Ha őszinték akarunk lenni, akkor nem maga a systemd kap rengeteg kritikát, hanem a fejlesztői. Méghozzá a céljaik és hozzáállásuk miatt. Szerencsétlen systemd nem tehet róla, hogy olyan, amilyen.

A leggyakoribb bírálat az init rendszerhez képest hatalmas mérete, az integráltsága, a nem moduláris felépítése és a KISS-elv megsértése miatt éri a program fejlesztőit. Meg azért, mert magas lovon ülnek, és eldöntötték, hogy miért is van szükségünk nekünk erre a szörnyre, és köszönik, ne szóljunk bele, ők jobban tudják. Az észrevételek, ne adj isten javaslatok és hibabejelentések hidegen hagyják őket. Vagy elvárják, hogy más javítsa ki őket (lásd a cikk végi utolsó ajánlott olvasmányt).

Vannak olyanok is, akik szerint a systemd mint olyan, főleg az alapértelmezetté válás miatt, úgy, ahogy van, káros a Linux ökoszisztémára, és fellépést sürgetnek, systemd-forkokat készítenek, esetleg új disztribúciókat… Igen, új disztrubúciók születnek a systemd miatt. Sőt, a Debiant is forkolták. Vagyis ha azt állítjuk, a systemd megosztó, elég finoman fejezzük ki magunkat.

A Debian forkja a Devuan néhány régi motors Debian admin agyszüleménye, akik hevesen ellenezték, hogy a Debian systemdre váltott. Ezért életre hívták, azaz próbálják életre kelteni a Devuan nevű systemd mentes forkot. Nem valószínű, hogy bármi értékelhető születik belőle, de a systemdről szóló írások lábjegyzetében biztos lesz helye. Akit érdekel a Devuan projekt, erre fáradjon.

A uselessd projekt pedig a 208-as systemdt forkolta, hogy megszabadítva a fölösleges részeitől egy normális init rendszer hozzanak össze belőle. Erről itt lehet többet olvasni.

Összefoglalás

Számos fórumon, levlistán utána lehet olvasni a systemd körüli vitáknak, az orrukat fenn hordó fejlesztőkről, a hozzájuk beérkező kérdéseknek, hibabejelentéseknek, a linuxos közösség és a felhasználók véleményének. Nem csak én látom borúsan a világot.

Nem lenne semmi baj a systemdvel, ha init rendszer lenne, és csak az. De nem az. Nagyon nem az, és soha nem is lesz. Az idő eldönti, mi lesz vele. Ahogy jött, úgy el is tűnhet. Ahogy az is elválik majd, hogy a disztribúciók jól döntöttek-e, amikor váltottak. Mert a felhasználók kritikusak tudnak lenni.

Érdeklődőknek ajánlom