IN-REPLY-TO Debian se musí zabývat přístupem k init systémům/Názory, pořád ještě nepovažujeme systemd za překomplikovaný dávno-už-ne-jen-init-systém?
Pokusme se na chvíli netrollovat a podívjme se na to trochu jinak, než je v těchto diskuzích obvyklé. Systemd není, nebyl a nebude jediná binárka. Ale představme si čistě teoreticky, že by byl, co by to znamenalo v praxi? Myslím si, že v podstatě vůbec nic.
Představme si tři binárky: funkceA, funkceB a funkceC. Jsme samozřejmě ve scénáři, že žádná z nich nemá nějaké zvláštní kapability, setuid root apod. Představme si dále, že by to místo toho někdo přepsal do jednoho programu, ve kterém by byly tři funkce funkceA(), funkceB() a funkceC() a dále main(), který by volal jednu nebo druhou, podle voleb. Z hlediska komplexity vývoje je to v podstatě jedno, každý si napíše svoji vlastní funkci, jediný reálný rozdíl je snad v tom, že některé potenciálně ošemetné věci (konfigurační parser, parser voleb na příkazové řádce, případný drop privilegií a další věci) se udělají jednou pro vždy v mainu, místo aby je každý musel dělat zvlášť a většinou blbě. Z hlediska bezpečnosti by případná zranitelnost v jedné z těch tří funkcí umožnila, např pomocí ROPu atd., volat i ty druhé dvě, ale úplně stejně může volat i ty ostatní binárky (ledaže by se používal seccomp, nějaký privátní kontejner atd., ale v praxi tomu tak téměř nikdy není, nemalou mírou i kvůli jekotu, že tyhle věci nejsou přenosné na BSD a/nebo nejsou tím pravým "unixovým" řešením - viděno na fórech Devuanu...).
Dále je možné se na to podívat tak, že je vlastně úplně jedno, jestli máme tři programy funkceA, funkceB a funkceC, nebo jeden program funkce, se závislostí na libfunkceA.so, libfunkceB.so a libfunkceC.so. I to jsou tři různé binárky, jenom způsob volání je jiný a tak nějak nevím, proč by na něm mělo vlastně záležet. V MULTICSu mimochodem neexistoval rozdíl mezi spustitelným programem a knihovnou a třeba by vůbec nebylo od věci se k tomuto principu vrátit.
A je tu ještě jeden možný náhled, co je vlastně binárka? Nic víc a nic míň, než speciální druh archivu. Je celkem snadné napsat filesystem ovladač (ať už v jádře nebo přes FUSE), aby šla jednotlivá binárka nebo knihovna namountovat a klidně pak vidět každou volatelnou funkci jako samostatnou "binárku". Jde jenom o to, na jakou úroveň si - v podstatě naprosto arbitrárně - nastavíme abstrakci. Z koncepčního hlediska se vlastně dá třeba i /dev/sda považovat za jednu gigantickou "binárku" a i když někdo bezpochyby okamžitě prohlásí, že to je blbost, takový ať si prosím alespoň všimne, že reálné rozdíly jsou vlastně jenom v implementačních detailech.
Problém neni ve formě uložení na disku, ale v závislostech. Pokud máte tři nezávislé funkce, tak prostě použijete jen tu, co se Vám líbí. Pokud vytvoříte tvrdou závislost (řekněme na systemd-logind), tak už tu volnost nemáte a je jedno jestli jsou to nezávislé binárky, funkce nebo dynamické knihovny.
Tak pokud instalujete např. balík coreutils, tak tam těch binárek máte požehnaně a rozhodně nemůžu tvrdit, že už jsem někdy (vědomě) použil všechny. Neboli stále je to jedno, prostě na disku je uložen kód, který třeba Vy osobně momentálně nepoužíváte (ale nevíte, jestli nějaká aplikace třetí strany ho náhodou nebude předpokládat) a nesejde na tom, v kterém konkrétním souboru se nachází. To na tom svém mnohaterabytovém disku máte nedostatek místa, nebo co? ;)
"Systemd není, nebyl a nebude jediná binárka. Ale představme si čistě teoreticky, že by byl, co by to znamenalo v praxi? Myslím si, že v podstatě vůbec nic.".....okrem hlbokeho rozporu so zakladnou filozofiou Unixu.
https://en.wikipedia.org/wiki/Unix_philosophy
"Make each program do one thing well. To do a new job, build afresh rather than complicate old programs by adding new "features"
"Write programs that do one thing and do it well"
"Economy and elegance of design due to size constraints ("salvation through suffering")."
Ale v principe ten vyvoj v Linuxe, kde na nas unixovych "dinosaurov" neberie ohlad, chapem. "Unixak" dnes nie je najcastejsim pouzivatelom Linuxu.
Řeknu Vám něco, co Vás asi šokuje. Lidé používají počítače proto, aby provozovali aplikace, vydělávali peníze, bavili se multimédii a hrami, učili se atd. Nikdo si nejde koupit počítač za účelem splnit "základní filozofii Unixu". Je to sice na jinou debatu, ale jsem pevně přesvědčen, že ona Unixová "filozovie" je ostatně v základu špatná a škodlivá, maximálně má smysl v některých velmi (zdůrazňuji velmi) úzce definovaných případech.
Kromě toho ta takzvaná "Filozofie" není filozofií, protože nikdo si nikdy nesedl, aby popřemýšlel o tom, jak nejlépe navrhnout funkční a koherentní OS. Unix vznikl z 95% tak, že každý si sám zbastlil nějakou slátaninu, která s odřenýma ušima řešila jeho okamžitý problém, bez žádné celkové vize nebo zamyšlení, jak zapadá do většího celku. Proto máme cron, který neví a nemůže vědět o tom, jaké služby mají běžet, mail, který je tak "geniální", že nemá API a proto nelze normálně mít v aplikaci funkci "odeslat mailem" aniž by člověk musel ručně implementovat klienta SMTP a všechno ostatní, konfigurace textovými soubory, každý s naprosto jinou a nekompatibilní syntaxí, a ex post zavedou bezpečnostní díru jménem setuid, když nějakému Unixovému filozofovi došlo, že v Unixu nejde nastavit různa přístupová práva pro různé části souboru, a tak bych mohl pokračovat donekonečna.
A navíc ta údajná "filozofie" prostě vůbec není pravda. V Unixu neexistuje jediný program, který by dělal "jednu věc". Dokonce i taková trivialita, jako je /bin/false, musí kromě vlastní primární funkce obsahovat... parser (přejděme taktně mlčením to, že je vůbec potřeba, aby existovalo cosi jako /bin/false). A za druhé neexistuje jeden jediný unixový program, o kterém bych mohl s klidným svědomím říct, že něco dělá "well". I ten zmiňovaný /bin/false má historii exploitů, s lpr se táhnou nevyřešené race conditions už desítky let, vi (kromě toho, že nevím, co je tak "well" na tom, že k pohybu kurzoru nemůžu ve výchozím stavu normálně používat šipky kurzoru) je tak proslulý svými bugy, že jiné programy, které se ho snaží nahradit, je musí záměrně implementovat taky, atd atd atd. Děkuji, myslím, že bez toho celkem přežiju a díky za systemd, Lennarte.
V posledním bodě máte pravdu, Unixák asi dneska není typickým uživatelem Linuxu ani typickou cílovou skupinou, ale možná nezbývá, než si spolu s Járou Cimrmanem říct, že o tom můžeme vést spory, můžeme s tím nesouhlasit, ale to je tak všechno, to s tím můžeme dělat.
" Lidé používají počítače proto, aby provozovali aplikace, vydělávali peníze, bavili se multimédii a hrami, učili se atd. Nikdo si nejde koupit počítač za účelem splnit "základní filozofii Unixu". "
S tym suhlasim, ale ak chcem pouzivat a administrovat pocitac tak, aby som skutocne rozumel to co robim a nie ako "cvicena opica, ktora si vie precitat a nasledne doslovne implementovat navod" tak tomu unixova filozofia pomaha. Beriem na vedomie, ze 99% pouzivatelov pocitacov takuto potrebu nema a tomu sa nasledne prisposobuju aj operacne systemy.
23. 9. 2019, 11:31 editováno autorem komentáře
Pak věřím, že jste si sám taky doma sletoval základní desku, abyste nevypadal jako cvičená opice, která tomu "nerozumí". Ze stejného důvodu je samozřejmě vyloučené na ní používat jakýkoli integrovaný obvod. Jak jste daleko s tím vaším překladačem C? Přece jenom cvičené opice se naučí používat gcc aniž by "tomu rozuměly".
PS - berte to prosím s nadsázkou...
Moj prvy pocitac, s vychodonemeckym klonom Z80 (U880D) vratane monitora napisaneho v strojovom kode (ziadny assembler), ktory mal 2kB RAM a 512B PROM, som si postavil niekedy v polovici 80. rokov. Vlastny CPU som si navrhol asi o 10 rokov neskor, ked som pracoval ako navrhar IO a dostal som sa k navrhovemu systemu Cadence.
Vlastny C kompilator nemam, ale jednoduchy Forth na mikrokontroler som si raz naprogramoval :-)
Příkazovou řádku jsem používal pár desítek let a rád ji používám i dnes tam, kde mi něco přináší, místo, aby byla koulí u nohy. Z čeho jsem už trochu vyrostl, je hraní si na l33t unixáka, který nalézá potěšení v tom, že patlá zabugované skripty na věci, které v takovém Windows prostě fungují samy od sebe. Been there, done that, jak se říká, dneska očekávám, že počítač bude plnit roli, na kterou počítače primárně existují, totiž automatizaci nudných, nezajímavých ale časově náročných činností, počínaje správou samotného OS.
> A za druhé neexistuje jeden jediný unixový program, o kterém bych mohl s klidným svědomím říct, že něco dělá "well".
Není to tak trochu klamání? Copak systemd je "well"? Ba co víc, je systemd alespoň víc "well"? Ano, dá se mu přiznat jistá snaha o koncepčnost a deklarativní způsob zápisu já taky rád. Ale obávám se, že už navěky se zapíše do Linuxové historie jako odstrašující příklad "not-well" projektu.
Žádný netriviální program není dokonalý. Systemd je určitě lepší, než to, co nahrazuje: je deklarativní, vychází z principu "všechno je API" místo "všechno je skript nebo textový soubor", je z podstaty bezpečnější (samozřejmě, že taky může mít, a už měl, zranitelnosti), má relativně výbornou dokumentaci a pokud vývojáři dister, většina uživatelů nebo správci data center ve Facebooku a Googlu všichni svorně nelžou, tak celkem spolehlivě funguje. Když někdo neustále opakuje, jak je špatný, tak bych rád slyšel nějaký opravdický argument, nejen povinnou recitaci unixové údajné filozofie nebo "moudra" stylu systemd je jedna obrovská binárka, systemd je x86 only nebo systemd je zlo, protože odstranil problém, který se můj skript snažil blbě řešit a ten skript mi tím pádem už nefunguje.
24. 9. 2019, 09:58 editováno autorem komentáře