Ačkoli je systemd již deset let starý, diskuze a rozporuplné pocity, které vyvolává v linuxové komunitě, stále trvají. I přes jeho široké využití v mnoha významných linuxových distribucích, silný odpor vůči němu neustává.
Zaváděcí proces Linuxu
Při spuštění počítače se aktivuje hardware a následně, v závislosti na typu zaváděcího sektoru, se provede buď hlavní zaváděcí záznam (MBR), nebo se spustí Unified Extensible Firmware Interface (UEFI). Posledním krokem obou je načtení jádra Linuxu.
Jádro je zavedeno do paměti, kde se dekomprimuje a inicializuje. Dále se v RAM vytvoří dočasný souborový systém, obvykle pomocí nástroje initramfs nebo initrd. To umožní identifikovat a načíst potřebné ovladače. Následně se z uživatelského prostoru načte souborový systém, který se připraví na vytvoření uživatelského prostředí.
Proces init, což je první proces spuštěný jádrem v uživatelském prostoru, má na starosti vytvoření tohoto uživatelského prostředí. Má identifikátor procesu (PID) 1. Všechny ostatní procesy jsou pak buď přímými, nebo nepřímými potomky procesu init.
Před příchodem systemd byla hlavní výchozí volbou pro proces init reimplementace Init systému Unix System V. Existovaly i jiné možnosti, nicméně System V init byl standardem ve většině distribucí odvozených od Berkeley Software Distribution (BSD). Vzhledem k tomu, že pocházel přímo ze System V Unix – duchovního předka Linuxu – mnozí jej považovali za „oficiální“ postup.
Proces init následně spouští všechny démony a služby nezbytné pro funkčnost operačního systému. Tito démoni se starají o takové věci, jako je například síťový zásobník, aktivace dalšího hardwaru v počítači a poskytování spouštěcí obrazovky.
Mnoho z těchto procesů na pozadí zůstává spuštěno i po svém startu. Mají na starosti úkoly jako je například logování informací o událostech, sledování změn hardwaru při připojování nebo odpojování zařízení a správa přihlašování uživatelů. Není proto překvapením, že systém init zahrnuje také funkce pro správu služeb.
Můžeme použít příkaz ps ke zobrazení procesu s PID 1. Použijeme parametry f (zobrazení v plném formátu) a p (PID):
ps -fp 1
Vidíme, že proces s PID 1 je systemd. Stejný příkaz na Manjaro Linux vypsal jiný výsledek. Proces s PID 1 byl identifikován jako /sbin/init. Krátký pohled na tento soubor ukazuje, že se jedná o symbolický odkaz na systemd:
ps -fp 1
ls -hl /sbin/init
Použitím parametru ppid (ID nadřazeného procesu) s příkazem ps můžeme zjistit, které procesy byly spuštěny přímo systémem systemd:
ps -f --ppid 1
Jak je vidět na obrázku níže, je to poměrně rozsáhlý seznam.
Alternativní řešení
Několik projektů se pokusilo vyvinout alternativu ke klasickému System V init. Jedním z hlavních nedostatků System V init je, že všechny procesy se spouštějí postupně, jeden po druhém. Pro efektivnější zaváděcí proces mnoho alternativních projektů využívá paralelismus pro spouštění procesů souběžně a asynchronně.
Zde jsou některé z těchto alternativ:
Upstart: Vyvinutý společností Canonical, byl použit v Ubuntu 9.10, Red Hat, Red Hat Enterprise Linux (RHEL) 6, CentOS 6 a Fedora 9.
runit: Funguje na FreeBSD a dalších derivátech BSD, macOS a Solaris, stejně jako na systémech Linux. Je také výchozím init systémem na Void Linux.
s6-linux-init: Tato náhrada za System V init byla navržena tak, aby přesně dodržovala filozofii Unixu, která se často redukuje na motto „dělej jednu věc a dělej ji dobře“.
Existuje mnoho dalších s různými funkcemi a designy. Nicméně žádný z nich nevzbudil takový rozruch jako systemd.
Cesta systemd
systemd byl poprvé vydán v roce 2010 a ve Fedoře byl použit od roku 2011. Od té doby byl přijat mnoha distribucemi. Vyvinuli ho Lennart Poettering a Kay Sievers, dva softwaroví inženýři pracující pro Red Hat.
systemd je mnohem více než pouhá náhrada init. Spíše se jedná o sadu zhruba 70 binárních souborů, které se starají o inicializaci systému, démony a služby, protokolování a žurnálování a mnoho dalších funkcí, které již v Linuxu měly vyhrazené moduly. Většina z nich nemá nic společného s inicializací systému.
Některé z démonů poskytovaných systemd jsou:
systemd-udevd: Spravuje fyzická zařízení.
systemd-logind: Spravuje přihlášení uživatelů.
systemd-resolved: Poskytuje překlad síťových jmen pro místní aplikace.
systemd-networkd: Spravuje a detekuje síťová zařízení a spravuje konfigurace sítě.
systemd-tmpfiles: Vytváří, odstraňuje a čistí nestálé a dočasné soubory a adresáře.
systemd-localed: Spravuje nastavení lokálního prostředí systému.
systemd-machined: Detekuje a monitoruje virtuální stroje a kontejnery.
systemd-nspawn: Může spustit příkaz nebo jiný proces v odlehčeném kontejneru jmenného prostoru, který nabízí funkcionalitu podobnou chroot.
A toto je pouze zlomek z celkového rozsahu, což je také jádro problému. Systemd již dávno překročil rámec toho, co se vyžaduje od init systému, což je podle jeho kritiků samo o sobě definicí nabývání funkcí.
„Je příliš rozsáhlý. Dělá toho moc.“
Kritici systemd poukazují na jeho rozsáhlou a neobvyklou kombinaci funkcí. Všechny tyto funkce již v Linuxu existovaly a některé z nich možná vyžadovaly aktualizaci nebo nový přístup. Nicméně, začlenění všech těchto funkcí do toho, co by měl být init systém, je z architektonického hlediska problematické.
Systemd byl označen za jediný bod selhání pro příliš mnoho klíčových funkcí, ačkoli se to nezdá být úplně opodstatněné. Je pravda, že se zpronevěřuje filozofii Unixu vytváření malých nástrojů, které spolupracují namísto rozsáhlých softwarových celků, které dělají vše pod jednou střechou. I když systemd není striktně monolitický (skládá se spíše z mnoha binárních souborů než z jednoho velkého), zahrnuje mnoho různých nástrojů a příkazů pro správu pod jednou hlavičkou.
I když není monolitický, je rozsáhlý. Pro představu o rozsahu jsme spočítali řádky textu v kódové bázi jádra 5.6.15 a v hlavní větvi repozitáře systemd na GitHubu.
Jednalo se o poměrně hrubé měření, které počítalo řádky textu, nejen řádky kódu, a tak zahrnovalo komentáře, dokumentaci a vše ostatní. Jednalo se nicméně o srovnání a dalo nám základní představu o rozsahu:
( find ./ -name '*.*' -print0 | xargs -0 cat ) | wc -l
Jádro mělo téměř 28 milionů řádků (přesněji 27 784 340). Systemd naopak měl 1 349 969, tedy téměř 1,4 milionu řádků. Podle našeho měření vychází systemd přibližně na 5 procent velikosti jádra, což je obrovské!
Pro srovnání, počet řádků pro moderní implementaci System V init pro distribuci Arch Linux činil 1 721 řádků.
Poettering zjevně nebere v potaz standardy Institute of Electrical and Electronics Engineers (IEEE) Computer Society ani Portable Operating System Interface (POSIX). Ve skutečnosti podporoval vývojáře, aby ignorovali POSIX:
„Takže si pořiďte kopii The Linux Programming Interface, ignorujte všechno, co říká o kompatibilitě POSIX a hackujte svůj skvělý linuxový software. Je to docela osvobozující!“
Objevila se obvinění, že systemd je projekt společnosti Red Hat, který slouží pouze jejím zájmům a je vnucován širšímu linuxovému světu. Je pravda, že se zrodil v Red Hatu a je jím řízen a spravován. Nicméně, z 1321 přispěvatelů pracuje pro Red Hat pouze zlomek.
Jaké tedy plynou pro Red Hat výhody?
Jim Whitehurst, prezident IBM, který býval generálním ředitelem Red Hatu, řekl:
„Red Hat zvažoval mnoho dostupných možností a dokonce použil Canonical Upstart pro Red Hat Enterprise Linux 6. Nakonec jsme se rozhodli pro systemd, protože se jedná o nejlepší architekturu, která poskytuje rozšiřitelnost, jednoduchost, škálovatelnost a dobře definovaná rozhraní pro řešení problémů, kterým čelíme dnes, a předvídatelné problémy v budoucnosti.“
Whitehurst také zmínil, že vidí výhody i v oblasti vestavěných systémů. Red Hat spolupracuje s „největšími světovými prodejci vestavěných systémů, zejména v telekomunikačním a automobilovém průmyslu, kde je stabilita a spolehlivost na prvním místě.“
Zní to jako technicky podložené důvody. Lze chápat, že společnost vyžaduje spolehlivost, a není nerozumné, že Red Hat sleduje své vlastní zájmy. Měli by se tím ale řídit všichni ostatní?
Podlehli jste systemd „Kool-Aid“?
Někteří kritici systemd tvrdí, že distribuce a lidé pouze slepě následují příklad Red Hatu a přijímají jej.
Nicméně, stejně jako fráze „pití Kool-Aid“, to není úplně přesné. Tato fráze vznikla v roce 1978 poté, co vůdce sekty, Jim Jones, přinutil více než 900 svých následovníků spáchat sebevraždu vypitím tekutiny s hroznovou příchutí doplněné kyanidem. Nicméně, skupina skutečně vypila nápoj Flavour Aid, ale Kool-Aid je od té doby tímto případem stigmatizován.
Navíc, linuxové distribuce nenásledují Red Hat slepě, ale přijímají systemd po důkladném zvážení. Debata zuřila na e-mailových konferencích Debianu po dlouhou dobu. V roce 2014 nicméně komunita odhlasovala přijetí systemd jako výchozí init systém, ale s podporou alternativ.
Debian je důležitým příkladem, protože není odvozen z Red Hat, Fedora nebo CentOS. Red Hat nemá na Debian žádný vliv. A Debian, podobně jako PID 1, má mnoho potomků, včetně Ubuntu a jeho mnoha variant.
Rozhodnutí, která komunita Debianu přijímá, mají dalekosáhlý dopad. Intenzivně se o nich diskutuje a hlasuje se o jejich přijetí pomocí Condorcetovy metody hlasování. Komunita taková rozhodnutí nepřijímá lehkovážně.
V prosinci 2019 se znovu hlasovalo o dalším soustředění na systemd a pokračování v hledání alternativ. Opakem slepého následování je učebnicový příklad demokracie a svobody volby v praxi.
Omezení výběru
Obecně si nemůžete vybrat, zda budete používat systemd s konkrétní distribucí Linuxu. Spíše si distribuce samy vyberou, zda jej budou používat, a vy si můžete vybrat, kterou linuxovou distribuci preferujete. Je možné, že vaše oblíbená distribuce přešla na systemd. Stejně jako když oblíbený hudebník změní žánr, i toto může být nepříjemné.
Lidé, kteří používají Debian, Fedora, CentOS, Ubuntu, Arch, Solus a openSUSE a mají námitky proti přijetí systemd, se mohou cítit být vytlačováni z používání jejich distribuce. Pokud je některá z architektonických voleb, rozšiřování funkcí nebo přehlížení POSIX dostatečně silně znepokojuje, může jim připadat neudržitelné tuto distribuci nadále používat.
Samozřejmě, existuje spektrum názorů. Na jednom konci jsou lidé, kteří problému nerozumí (nebo je nezajímá), a na druhém konci jsou zapálení odpůrci. Někde uprostřed jsou ti, kteří nemají rádi změny, ale netrápí je to natolik, aby opustili loď. Ale co distribuce, kterou kvůli svým preferencím nebo zásadám nemohou nadále používat?
Bohužel to není tak jednoduché, jako si nainstalovat libovolný init systém, který chcete. Ne každý má potřebné technické dovednosti, nemluvě o obtížích, které nastanou, když aplikace nebo desktopová prostředí, jako je GNOME, mají závislosti na systemd.
Co takhle přejít na jinou distribuci? Některé, jako Devuan, vznikly jako forks distribucí bez systemd (v tomto případě Debianu), které přijaly systemd. Používání Devuanu by mělo být podobné jako u jeho mateřské distribuce, ale to neplatí pro všechny forks bez systemd. Pokud například opustíte Fedoru a přesunete se do AntiX, Gentoo nebo Slackware, budete mít úplně jiný zážitek.
Závěr
Líbí se mi některé věci, které systemd dělá (jednoduché a standardizované kontrolní mechanismy pro procesy). Nerozumím důvodům, které stojí za některými z jeho funkcí (binární protokoly). Také se mi nelíbí některé věci, které dělá (přepisování domovských složek – kdo o to žádal?).
Distribuce jako Debian postupují chytře a zkoumají alternativní možnosti, aby zůstaly otevřené. Nicméně, zdá se, že systemd je tu na dlouho.
Pokud spravujete linuxové stroje pro jiné, naučte se systemd stejně dobře jako System V init. Takto budete schopni plnit své povinnosti bez ohledu na to, na co narazíte.
Používáte Linux pouze doma? Pokud ano, vyberte si distribuci, která vyhovuje vašim technickým požadavkům a doplňuje vaši linuxovou ideologii.