… ale to, odkud nelze nic odebrat. (Antoine de Saint-Exupéry)
O systemd toho bylo za poslední roky napsáno mnoho, jak po technické stránce, tak po emocionální. Původně jsem chtěl popsat jednotlivé technické důvody, proč si myslím, že systemd je špatná cesta, ale nemá smysl psát to, co mnohokrát a lépe napsali jiní. Dneska chci psát o důvodech principiálních, nebo chcete-li filozofických.
Unix
Unix je postaven na několika málo jednoduchých principech. Jednoduchých na napsání, ale velmi, velmi složitých na pochopení. Některé věci se musejí zažít. Odtud také citát:
Unix je velmi přátelský, ale své přátele si vybírá.
Jedním ze zásadních principů je princip minimalizace. Dělej jednu věc a dělej ji pořádně. Tento princip nepřišel s Unixem. Tento princip používá věda v mnoha různých podobách. Occamova břitva například.
Pokud má jistý jev více vysvětlení, to správné bude právě to nejjednodušší.
Chemie
Určitá vědecká odvětví se s tímto pasují různě. Chemie, například, se smířila s existencí 118 prvků (z toho reálně použitelných něco kolem 90). S tím pracuje. Samozřejmě, chemie zkoumá vlastnosti oněch prvků, hledá zákonitosti v elektronových obalech a řadí je do skupin. Odtud má periodická tabulka prvků svůj nezaměnitelný tvar. Ale chemie se nesnaží (a z principu věci ani příliš nemůže), o minimalizaci počtu prvků (chemie je prostě založená na různorodosti elektronových obalů a té lze dostáhnout pouze různým atomovým číslem).
Fyzika
Fyzika (na rozdíl od chemie) naopak využívá principu minimalismu. Někdy až ad absurdum. Fyzikové se s větším než malým počtem (čehokoliv) nikdy nesmíří. Kupříkladu částicová fyzika. V knížkách ještě z 80 let dvacátého století (je skutečně poučné si i dnes přečíst například Weinbergovy První tři minuty — když tak půjčím — svět z pohledu fyziky tehdy před 37 lety vypadal diametrálně odlišně od dnešního) nalezeme tabulky se stovkami elementárních částic. Situace vypadala katastrofálně, zatímco chemie pracovala s 90 prvky, fyzika měla stále rostoucí seznamy nových a nových elementárních částic. Jenže se s tím nesmířila. Zjistilo se, že ony částice nejsou elementární, že každá z nich se sestává z jisté kombinace pouhých dvou částic. Princip minimalizace ve své nejlepší formě. Usilovnou prací se přišlo na ucelenou množinu elementárních částic, kterým říkáme standardní model. Je jich, částic hmoty, fermionů, 12. Z toho nám známá hmota potřebuje pouze 3 (u, d, e)). Plus příslušné intermediální bosony. Z pouhých 3 částic lze postavit kompletně cokoliv, co běžně vidíme kolem sebe (no dobře no, aby fungovalo Slunce a jaderné elektrárny, tak si tam připište ještě elektronové neutrino). Takže 4.
Superstruny
A fyzikům ani tohle nestačí. Jednak se ví, že standardní model nepostihuje všechno (když nic jiného, tak tam chybí gravitace), ale hlavně, vědcům i těch 12 částic + 5 bosonů přijde jako příliš mnoho. Hledá se řešení, které by obsahovalo pouze jeden stavební prvek.
Elektronika
Že je to nesmysl? Není. Veškerou digitální elektroniku na světě můžeme postavit pouze pomocí jednoho hradla. NAND (nebo i NOR, používá se ale NAND). Toť vše. Pomocí vhodné kombinace NANDů postavíte jakýkoliv kombinační obvod, pomocí vhodné kombinace kombinačních obvodů postavíte jakýkoliv sekvenční obvod. A z toho potom postavíte jakýkoliv procesor, jakoukoliv paměť, zkrátka vše, co se dneska používá. Stačí k tomu jeden základní stavební kámen a dvě úrovně signálu. Princip minimalismu na svém maximu :-D.
systemd
Jak celé tohle blábolení souvisí s Unixem, Linuxem a systemd? Unix celkem dobře ctí princip minimalismu. Základních stavebních prvků je skutečně málo. Asi by jich mohlo být ještě méně, o to se snaží jisté, dejme tomu experimentální, systémy. Každopádně, když už nějaké prvky v systému jsou, je snaha je využít do maxima. Kupříkladu příkaz ls
(výpis obsahu adresáře). Mohu ho použít na výpis obsahu adresáře, ale když jsem chytrý a navrhnu si správně adresářovou strukturu, mohu tím současně získat například seznam úkolů, seznam projektů, seznam kontaktů, nebo například seznam služeb, které se mají startovat po zapnutí počítače. Nemusím psát 5 různých nástrojů, stačí mi jeden (a případě si nastavit 4 aliasy). Kdykoliv je tento jeden nástroj vylepšen, současně se vylepší i jeho 4 další použití.
SysV Init
Klasický SysV init a rc skripty jsou psány v bashi. Bash každý admin zná. Obsahují několik základních příkazů. Grep, awk, sed, možná ani to ne, typicky ale jen vytvoření souboru (přesměrováním), spuštění nějaké binárky. Není to nic složitého. Grep, například, každý admin zná. Nepoužívá se jen v rc skriptech. Dá se použít na hromadě dalších místech.
Vidíte tu podobnost? V reálném světě mi stačí 4 částice a udělám (kdybych měl tu moc) cokoliv. V digitronice mi stačí dokonce jedna součástka. V linuxu mi stačí pár základních příkazů (nevím, 10, 15, víc ne) a udělám cokoliv. Pokud z těchto základních příkazů postavím mimo jiné init a rc systém, tak admin, který s nimi denně pracuje, si hravě poradí i se změnou nějakého rc skriptu. Rozhodně to neuvidí poprvé v životě.
Stejně tak například less
. Less mohu použít na stránkování dlouhého výstupu nějakého příkazu, stejně dobře jej mohu použít i pro čtení logů. Jeden nástroj. Pokud se jej naučím efektivně používat, současně si zlepším mnoho různých činností.
Efektivita
Pokud ale místo toho někdo zavede jiný systém, který bude mít pouze jedno použití, tak se to lidé nikdy nenaučí efektivně používat. Zatímco s příkazy less
, grep
, find
, xargs
apod. pracuji takřka denně, tak například do logů chodím 3x do roka. Ono to nevadí, protože na ty logy použiju less
, který dobře znám a nezapomenu jej. Pokud ale na přístup k logům potřebuju speciální příkaz (například systemd journalctl
), tak se jej pokaždé budu učit znovu. To nikdy nebude efektivní. Pouze efektní. Totéž platí pro systemctl enable
apod. Příkaz ln -s
používám přece jen častěji a jedním z použití u původního rc.d bylo ln -s init.d/neco rc2.d/neco
. Opět, stejně jako u ls
, less
, tak i tady jeden příkaz na vytváření symlinků může současně sloužit i jako příkaz pro aktivaci služeb při bootu. Dále, co je špatné na obyčejném spuštění /etc/init.d/něco
a proč místo obyčejného spuštění programu (což dělám mnohosetkrát za den, takže ani v případě potřeby spustit službu mě to jaksi nezaskočí) bych měl použít systemctl start
?
Co dál
Ale jak jsem psal na počátku, nechci zacházet do přílišných technických detailů, o tom to fakt není. Je to o celkovém principu nebo filozofii práce se systémem. Unix vždy stavěl na svých principech a to mu vždy dobře fungovalo. Pokud to někomu nevoní, prosím, existují (už desítky let) jiné operační systémy se zcela jiným přístupem. Kdo chce, může je použít. Nějak mi ale nedochází, proč ti, kterým unixový přístup nevoní se jej snaží změnit způsobem, jakým to dělají (rozuměj: ne moc fajn), a proč místo toho nepoužijí již existující systémy. Měli by to bez práce a bez emocí.