Díky za článek.
Nebylo zmíněno, že jsou zde příbuzné snahy o bezpečnost a stabilitu, v podobě LTS distribucí, které by měly podporu v řádech desítek let. Povětšinou tyto snahy míří do míst, kde takový OS obsluhuje průmyslové celky, nezřídka v ostrovním režimu.
A rozmohl se nám tady na Rootu takový nešvar. Pokusy mystifikovat lidi pojmem "předvídatelný"
Cite z článku: "...protože při běhu nedochází k nějakým změnám v jádře nebo ovladačích a vše je předvídatelné."
Tak se nenechte zmást. A až se někomu podaří mít skutečně předvídatelný OS, tak ho beru plnou nádrž, a dvakrát.
Tak ono "predvidatelny" muze mit vic kontextovych vyznamu a i vy ho vyuzivate pravdepodobne ve vyznamu, proti kteremu by nekdo jiny protestoval. Pravdepodobne ve smyslu schedulingu uloh?
V clanku je mysleno "predvidatelne verze SW" nebo neco jineho (nevim co). Je to line psani? Asi no. Mohlo to byt vysvetleno. Odhalil/a jste zasadni iluminatskou konspiraci na rootu? Myslim, ze ne.
Se slovem "předvídatelný" jsem narážel na to, že jsme tu o něm diskutovali včera u zprávičky o začlenění podpory pro RTOS, která měla z Linuxu také dělat "předvídatelný OS".
Možná mám skutečně ujetý význam slova "předvídatelné", ale vyjádření typu: "a vše je předvídatelné", bych rozhodně nepoužil. Vám to nepřijde matoucí, téměř v jakémkoliv kontextu?
Na druhou stranu, není to žádné drama, zvládnu s tím žít.
Pěkný článek, krátké doplnění.
Immutable systémy přesouvají veškeré konfigurační a administrační věci do fáze, kdy se systémový obraz vytváří. Je to daleko méně pohodlné, každý software nebo změnu je nutné relativně dlouze testovat v cyklu: vytvořit nový obraz, nainstalovat nebo spustit a otestovat. Proč by tedy někdo podstupoval takové peklo když je v tomto lepší tradiční systém?
Hlavním typem zákazníka pro tento postup je organizace s flotilou stejných strojů. Typicky jsou to servery na pobočkách, nebo pokladny v jednotlivých prodejnách. Prostě místa kde nemáte IT technika, protože jich je moc a bylo by to drahé. Pak tato vyšší vstupní investice do vytvoření a otestování takového systému smysl má, navíc aktualizace jsou pak robustnější a některé technologie umí A/B partitioning s možností rollbacku, například ostree.
Ve článku není zmíněn asi nejnadějnější projekt Fedory s názvem bootc (bootable containers), který řeší zmíněný problém s dlouhým cyklem testování před nasazením. Místo speciálního způsobu instalace immutable systému, který má každá technologie jiný, se používají kontejnery.
Jinými slovy, vytvoříte Dockerfile z bootable kontejneru, odladíte si aplikace a nastavení pomocí dockeru nebo podmanu a jakmile jste spokojeni, vytvoříte si immutable image pro cloud, VMWare nebo holé železo. Celý cyklus se tak výrazně zkrátí protože spustit kontejner trvá méně než vteřinu. Pohodlně se do systému kopírují vlastní binárky a hlavně můžete využít veškeré nástroje, které byly vytvořené pro kontejnery (např. CI/CD). Software, který se používá k vytváření obrazů z bootovatelných kontejnerů, se jmenuje osbuild (image builder).
Kolega má na to téma přednášku na letošním LinuxDays 2024 tak hlasujte a poznačte si to do kalendáře, jestli máte o to téma zájem. Já na tom projektu dělám a myslím si, že je to jedna z nejzajímavějších věcí od Fedory / Red Hatu. Kdyby snad měl někdo zájem o článek na toto téma, ozvěte se a s redakcí něco domluvím :-D
Immutable systémy přesouvají veškeré konfigurační a administrační věci do fáze, kdy se systémový obraz vytváří. Je to daleko méně pohodlné, každý software nebo změnu je nutné relativně dlouze testovat v cyklu: vytvořit nový obraz, nainstalovat nebo spustit a otestovat. Proč by tedy někdo podstupoval takové peklo když je v tomto lepší tradiční systém?
To není vlastnost immutable systémů obecně ale pouze konkrétních implementací. Např. NixOS nebo GNU Guix žádným takovým problémem netrpí: požadovaný stav deklarujete v konfiguraci, systém provede vyhodnocení změny a běžící systém na tu novou verzi přejde okamžitě.
23. 9. 2024, 11:13 editováno autorem komentáře
Jenze tu vec v ty kase chces kazdy 3 dny aktualizovat, protoze si nejakej chuj usmyslel ze mas tisknout nejaky eet. Ta kasa pak musi byt nekam napojena, pouzivat nejaly to tls ... a to znamena kazdou chvili aktualizovat nejakou tu deravou knihovnu.
Testovat to nikdo nebude, protoze na to nema ani cas, natoz penize. Nez by dotestoval, najde se dalsi dira.
U ty kasy beztak chcete, aby nekam komunikovala. Doba izolovanych mechanickych pocitacich stroju, kde vrcholem zaznamu byla rolicka papiru je davna minulost. Takze tem aktualizacim se nevyhnete, at se vam to libi nebo ne.
Přesně, jeden z největších hobbymarketů v ČR nedávno nasadil kasy co jsou pouze on-line kiosky. V podstatě je to prohlížeč, vše běží v cloudu. To už je extrém, ale je to realita.
Asi nemá cenu moc reagovat na ten komentář, je plný nesmyslů. Naši zákazníci jsou hodně z této oblasti a aktualizují řekl bych v normálním režimu a samozřejmě že se aplikace testuje, dokonce i na samotných zařízeních ostree má na to funkci. Zrovna taková kasa běží izolovaně bez přístupu na internet (a to i on-line kasa, tam je pouze VPN do datacentra), tam není potřeba dělat aktualizace na denní bázi.
V článku se neustále zmiňuje bezpečnost, ale přijde mi že se tím myslí hlavně stabilita a nerozbitnost - slovo útok je poprvé a naposledy v titulku.
Jak se koncepčně řeší u těch flatpacků a pod když nějaká low-level knihovna najde závažnou zranitelnost? Postaru updatuju tu jednu knihovnu, ponovu čekám až si toho všimnou všechny aplikace a průběžně updatuju všechny, jednu po druhé? Trochu mi přijde že se tím vrací do doby statických knihoven před ELFem.
Nebo se spoléhá na Pokud by jakýkoliv škodlivý program, proces či útočník chtěl na vašem systému provést změny, které by váš počítač přinutily chovat se nestandardně, tak by se mu to buď nepovedlo nebo jen do chvíle, než počítač restartujete.
?
Jinak pamatuju v první polovině nultých let pravý immutable systém u jedné pseudostátní organizace - boot z CD, první krok smazání většiny disku. Aktualizace znamenala vypálení nových CD. Instrukce pro nonstop dohled - když to nefunguje rebootujte.
20. 9. 2024, 08:39 editováno autorem komentáře
Flatpaky maji runtime. Takže není potřeba aktualizovat každou aplikaci zvlášť, je tam dost sdíleného obsahu.
Tiez ma to irituje, ako sa jednym slovkom "bezpecnost" autor dookola snazi vyvazit vsetky nevyhody okolo :) a pritom jeden odstavec, co je tou bezpecnostou naozaj myslene by clanku dost pomohol.
Nevyhody:
20. 9. 2024, 10:46 editováno autorem komentáře
Zkousel jsem immutable Fedoru a usoudil jsem, ze pro me to neni - k mym zazitym postupum uzivani prehistorickych nastroju typu mc, vim je to prilis odolne, jak je trefne uvedeno v nadpisu clanku :)
Ale! Kdyz se nad tim zamyslim, tak pro zakladni pouziti treba u rodicu odpada vetsina nevyhod a jednoduchost zachranit system je pro me jako potencialniho spravcu rodicovskeho/detskeho systemu docela fajn.
20. 9. 2024, 15:11 editováno autorem komentáře
ak se koncepčně řeší u těch flatpacků a pod když nějaká low-level knihovna najde závažnou zranitelnost?
Ty low-level knihovny, obzvláště ty bezpečnostní, jsou zpravidla součástí runtimu, protože to je něco, co si jako autor aplikace nechcete spravovat.
Na Flathubu je základem všech runtimů FreeDesktop Runtime, který obsahuje opravdu ty nejzákladnější věci, na něm staví GNOME a KDE runtimy. Když tedy objeví chyba třeba v OpenSSL, opraví se ve FreeDesktop Runtimu a díky tomu také ve všech ostatních runtimech, které na něm staví, a všech aplikacích, které je používají.
Nicméně pokud je chyba v tom, co obsahuje samotná aplikace, musíte se spoléhat na jejího autora, že to opraví. Flathub nezakazuje bundlování. Autor aplikace si může klidně přibundlovat vlastní OpenSSL a pak je to na něm, aby si to opravil. Ultimátně je to tedy o důvěře v autora aplikace. Ale to platí u distribučních repozitářů. Bundlování je sice zpravidla zakázané, ale běžně se děje a opět je to o důvěře ve správce balíčku, že to má pod kontrolou.
Jediná distribuce, u které jsem viděl, že se šlo opravdu balíček po balíčku, odstraňovalo se vlastní krypto a vynucovalo se používání vybraných systémových knihoven, byl RHEL.
To je easy, viz nedavno tady kolem tokeny Yubi, proste to vemes, rozslapnes a vymenis.
A pokud bys nekdy videl aspon z rychliku libovolnej korporat, tak odpoved je velice snadna. Neaktualizuje se nic. A to ani v tom pripade, ze bys hypoteticky moh. Proc? Protoze dodavatel ti garantuje ze X bude funkcni prave s verzi a revizi Y. S zadnou jinou. Jakakoli aktualizace = kdyz se to podela, at uz to s tim neco spolecnyho ma nebo ne, je to na tobe.
Jak se to teda resi? Mno vkladaji se mezi to vsemozny proxy, ktery to dost casto vsemozne rozbijej samy o sobe, ale je tu proste nejaka snaha ten primarni system pokud mozno maximalne odstinit od cehokoli.
"Ve zkratce jde o to, že Flatpak může nabízet sdílení knihoven v rámci lokálního flatpakového repozitáře. Nemusíte je pak přibalovat k programu. Jde o klasický koncept distribuovaných aplikací, jen se to děje v rámci vašeho lokálního repozitáře. "
Clovek by povedal, ze skoro ako doterajsie existujuce nie-flatpak riesenie, co?
Uz sa tesim na moment, ked niekto pride s tym, ze toto zdielanie je problematicke ("aktualizacia zdielanej kniznice vo flatpaku nieco rozbila") a zacne budovat flatpak vo flatpaku, aby si clovek instaloval vsetky zavislosti lokalne... v uz lokalnom adresari. :-)
No, určité podstatné rozdíly tam jsou:
- Flatpak umožňuje pouze jednu závislost: na konkrétním runtimu. Nevytváří se tam komplikované vazby závislostí jako u balíčkovacích systémů, kdy jeden balíček může záviset na libovolné množině jiných balíčků.
- Je to celé nezávislé na samotném systému. Je fajn, že tradiční neflatpak řešení to mají taky pošéfované, ale balíček z Debianu vám nebude kvůli neuspokojeným závislostem fungovat na Fedoře a naopak.
Ne, že by v tom byl Flatpak nějak unikátní. Je to v podstatně kontejnerová technologie určená pro desktopové aplikace. Runtimy jsou obdobou základních obrazů u klasických kontejnerů.
Mne zaklad te myslenky neprijde spatny.
V podstate v soucasne dobe operacni system obstarava dve z velke casti disjunktni veci: 1) nastartovani zakladniho systemu, jadra a ovladacu zarizeni, 2) beh uzivatelskych aplikaci.
Soucasne standardni distribuce jsou vsechny delane tak, ze uzivatelske aplikace musi sdilet verze knihoven se zakladem systemu. Ale jelikoz ty aplikace komunikuji se systemem skrz jadro, tak neni moc duvodu, proc je s temi verzemi svazovat.
Ja si klidne umim predstavit, ze si nainstaluju Ubuntu 20.04, a ono nekde krom /{bin,lib} apod., bude mit jeste podslozky /ubuntu22.04/{bin,lib} a podobne (ale taky treba /ubuntu18.04/{bin,lib}). V podstate takove runtimy. A pak si aplikace muzou svobodne vybrat zakladni runtime, vuci kteremu se kompiluji. Tj. bude existovat minimalne jedna verze OS, kde ta aplikace pujde zbuildit na "zakladnim" systemu. To je dobre pro udrzovatelnost. A na systemech jinych verzi se proste jenom zpristupni ten spravny runtime a aplikace na nich pobezi bez problemu. Nevim, proc by fakt, ze systemovy runtime potrebuje glibc 1.30, musel znamenat, ze aplikace nemuzou pouzivat glibc 1.40.
Technicky je to samozrejme malicko slozitejsi, ale kdyby si treba zakladni system (rekneme Ubuntu 20.04) pri buildeni balicku udelal symlink /ubuntu20.04->/, tak by to mohlo tu technickou cast vyznamne zjednodusit.
A spravce "zakladnich" distribuci by to nijak nad ramec nezatezovalo, proste by si dal piplali svoje Ubuntu 20.04 a vubec by je nezajimaly aplikace, ktere potrebuji novejsi knihovny (ty by proste presly na novejsi runtime). Jediny problem pak samozrejme muze byt, kdyz se vyvojarum mezi runtimy nepodari najit zadny, ktery by nabizel knihovny ve spravne kombinaci verzi, kterou potrebuji. Ale to bude dost malo pripadu.
Ano, bylo by to trochu plytvani mistem na disku, protoze najednou by tam clovek misto jednoho Ubuntu mel 3, ale zase ty nesystemove runtimy s sebou nemusi nest kernel, firmwary a podobne, takze by to snad nemuselo byt az tak zle (ostatne, flatpak runtimy jsou podle me neco dost podobneho).
> Clovek by povedal, ze skoro ako doterajsie existujuce nie-flatpak riesenie, co?
To je skoro ako otazka na radio jerevan: ano, presne, ale je to uplne inak :-)
V prvom rade runtime su verzionovane. Toto ma obrovsky dopad na vyvojarov aj pouzivatelov. Vyvojari mozu cielit na stabilny set API (presne z tohto dovodu su verzionovane SDK na konkurencnych systemoch) a pouzivatelia mozu sucasne pouzivat aplikacie vyuzivajuce rozlicne verzie runtime.
V pripade klasickych distribucii mali pouzivatelia k dispozicii jednu verziu runtime (danu verziu distribucie) a aplikacie sa museli prisposobit. To zase malo za nasledok, ze pouzivatelia mali k dispozicii zvycajne starsie verzie aplikacii, ktore fungovlali s danou verziou runtime, resp. distribuciou. Nehovoriac o tom, aku zataz zostavit distribuciu to predstavuje pre tvorcov -- je to ako nahananie hordy maciek, aby vsetky aplikacie fungovali s vybranymi verziami kniznic (presne spominany problem: v novej verzii distribucie sme updatli kniznicu libX na aktualny release a polka veci nefunguje).
Tak si to predstavte ako ze mozete mat nainstalovane debian 10, 11, 12 a redhat 7, 8, 9 sucasne a kazda aplikacia si moze vybrat , co bude pouzivat, sucasne vsetky naraz, bez rebootov a zmeny desktopovych prostredi.
Tahle odpověď mi přijde trochu devalvuje to se security patchováním pomocí updatu runtime (musím updatovat všechny runtime? Co když je nějaký už opuštěný?)
Jinak sdílené knihovny jsou taky verzované, aspoň takový byl design - IIRC stejné první číslo za .so je stabilní/zpětně kompatibilní API, a může být v systémy víc verzí. Teda ne že by se to až tak chytlo, ale občas je víc verzí i v jedné distribuci.
Otázka jak moc má aplikace sledovat updaty a vývoj závislostí a knihoven (runtimu, chcete-li) má asi v různých situacích různé nejlepší odpovědi, a tomu bude odpovídat jaké je vhodné technické řešení.
Pořád se musí autor starat o jednu závislost pro jednu runtime, prostě zvedne snadno verzi. Flatpak samotný upozorňuje když něco používá deprecated runtime. A hlavně je díky tomu mnohem snazší cílit na nové verze závislostí a runtimes, takže ta deprecation přijde pomaleji. Pokud chci vyvíjet pro Debian bez flatpaku, musím držet závislosti dost konzervativně, případně staticky linkovat.
Clovek by povedal, ze skoro ako doterajsie existujuce nie-flatpak riesenie, co?
Ano, ale tohle je další z mnoha nekonečných diskusí v IT. :-)
Uz sa tesim na moment, ked niekto pride s tym, ze toto zdielanie je problematicke ("aktualizacia zdielanej kniznice vo flatpaku nieco rozbila") a zacne budovat flatpak vo flatpaku, aby si clovek instaloval vsetky zavislosti lokalne... v uz lokalnom adresari. :-)
Tohle je také komické. Vždy tady byly k disposici staticky kompilované jazyky, takže pokud má někdo problém s nevyhovujícími verzemi knihoven (proč vlastně? - velmi vážně míněná otázka) v OS, tak si klidně mohl ten svůj program zkompilovat staticky a měl by po problému.
Ne, místo již existujících řešení se zavede jiné, které je určené pouze k zakrytí nepořádku v těch programech a jejich vývoje a místo toho, abychom se zaměřili na způsob vývoje v linuxu tak se to jen hodí do kontejneru a zavře se víko, aby na ten ... ehm nepořádek, nebylo příliš vidět.
Vedle toho na FreeBSD od roku 2015 jsem nezažil jediný problém při kompilaci portů. Vše je z distribuce, každý port si určuje co všechno potřebuje k běhu a vedle toho i ke kompilaci, nikdy žádný problém. Za těch skoro 10 let se nikdy nestala hádka o knihovny, kdy jeden program vyžadoval verzi 1 a druhý 5. Toto je velmi častý argument proponentů flatpaků apod, ale tak chtěl bych to vidět v praxi a taky bych chtěl vidět důvod, proč to tak je.
Jestli to nebude tím, že BSD bylo vždycky spíš katedrála a Linux spíš tržiště. A hlavně na Linux cílí násobně více softwaru než na BSD, takže udržet nějakou štábní kulturu je prakticky nemožné.
abychom se zaměřili na způsob vývoje v linuxu
Co přesně to je způsob vývoje v Linuxu? Způsob vývoje toho, co se zpravidla považuje za samotný OS? To by asi nějak ovlivnit šlo, ale ovlivnit způsob vývoje softwaru, který cílí na Linux? Good luck. Tu autoritu nikdo nemá. Dřív ji z části měly distribuce, ale už ji dávno ztratily. Dnes je většině autorů softwaru ukradené, jestli je jejich software v repozitářích linuxových distribucí. Dnes člověk přijde na jejich stránky a u instalace pro Linux najde:
curl -fsSL instalacni-skript.sh | sh a podobné věci.
Buď před tímto zavřeme oči a budeme si na svém písečku vytvářet ideální svět, zatímco ten reálný je někde úplně jinde, nebo tu realitu akceptujeme a přijdeme s řešeními, která její negativa aspoň zmírňují.
Jestli to nebude tím, že BSD bylo vždycky spíš katedrála a Linux spíš tržiště. A hlavně na Linux cílí násobně více softwaru než na BSD, takže udržet nějakou štábní kulturu je prakticky nemožné.
Chápu narážku, ale katedrála je jen base (+kernel). Ten není v portech, ten se kompiluje zcela zvlášť a zcela nezávisle na portech.
Na freebsd serverech mám tentýž software jako na linuxových serverech. Tady porovnávám stejné věci.
Dnes je většině autorů softwaru ukradené, jestli je jejich software v repozitářích linuxových distribucí.
V tom případě mě je zcela ukradený ten software. Já mám prostě mnohem větší nároky na software a pokud autor není schopný software napsat tak, aby šel snadno nainstalovat, tak já jako admin (i jako uživatel) o tento soft vůbec nestojím.
Buď před tímto zavřeme oči a budeme si na svém písečku vytvářet ideální svět, zatímco ten reálný je někde úplně jinde
A kde je ten reálný svět a na čem běží?
Když to zjednoduším, proč bychom měli měnit linux jen proto, že někteří autoři dělají problémy a současně chtějí, aby jejich soft běžel na linuxu? A proč před nimi ustupovat? A když se ustoupí, bude opravdu ten výsledek lepší? Opravdu bude lepší "svět", kde se umožní instalovat každá kravina s libovolnou verzí knihoven, libovolně složitě a jen se to zavře do kontejneru? Opravdu to bude lepší pro ty programy samotné, které jsou napsané tak blbě, že jednak není možné vytvořit klasický balíček a ještě navíc vyžadují speciální verze?
Když to zjednoduším, proč bychom měli měnit linux jen proto, že někteří autoři dělají problémy a současně chtějí, aby jejich soft běžel na linuxu? A proč před nimi ustupovat? A když se ustoupí, bude opravdu ten výsledek lepší? Opravdu bude lepší "svět", kde se umožní instalovat každá kravina s libovolnou verzí knihoven, libovolně složitě a jen se to zavře do kontejneru? Opravdu to bude lepší pro ty programy samotné, které jsou napsané tak blbě, že jednak není možné vytvořit klasický balíček a ještě navíc vyžadují speciální verze?
Ústup by to byl, kdyby bylo z čeho. Distribuční repozitáře ve svých nárocích příliš neustupují, ale výsledkem je, že jsou méně a měně relevantní. Před 20 lety byl pro open-source projekt problém, když nebyl v repozitářích, dnes už to je skoro jedno. Je to dané i tím, že vymáhání těch požadavků stojí usilí a to prostě neškáluje. Škálovalo to, když existovaly tisíce projektů, které cílily na Linux, dnes jsou jich stovky tisíc. Nebýt v distribucích je dnes normál a byl by, i kdyby o to měli tvůrci pořád zájem, protože distribuční repozitáře a jejich pravidla prostě do takových čísel neškálují.
Ve výsledku rozhoduje uživatel. A většina z nich bude vždy preferovat prasácky napsaný software, který ale má ty funkce, které potřebuje, před softwarem, který je správně napsaný, ale neumí to, co potřebuje. Člověk by si mohl říct, proč nemít oboje, jenže to druhé taky vyžaduje úsilí a prostředky, kterých je omezené množství, a pokud zákazník preferuje první, budou autoři softwaru také tíhnout k prvnímu. Bez ohledu na to, co si o tom myslí platforma, pro kterou se ten software píše.
Myslíte, že se dnes distribucí někdo ptá? To by musely distribuce nějaký typ instalací úplně zakázat, jenže pak budou volit uživatelé nohama a půjdou tam, kde jim to půjde. A ani nemusí opustit Linux. Mezi distribucemi je taková konkurence, že distribuce víc potřebují ten software než naopak.
Stačí se podívat na software kolem AI. To jsou naprosto nerozpletitelné molochy závisející a bundlující konkrétní verze knihoven v kombinacích, kterým distribuce nemůže nikdy vyhovět. Neběží to na tvém OS? Nevadí, budeme to provozovat na jiném.
Reálně tak dnes distribuce nemají na tvůrce softwaru skoro žádné páky, takže není z čeho ustupovat. Jak už jsem psal, na výběr mají mezi tím to ignorovat a budovat svůj malý dokonalý svět bez valných šancí jej prosadit v reálném světě, nebo akceptovat realitu a mít řešení, které ty trendy reálného světa aspoň nějak mírní.
malý dokonalý svět bez valných šancí jej prosadit v reálném světě
Ale tohle za mě není vůbec špatně. Každý profi produkt je pro velmi omezenou skupinu lidí. To, že něco v nějakém OS nejde, vůbec automaticky neznamená, že je to špatně. To, že něco nejde je velmi často velmi dobře.
A jinak by mě fakt zajímalo (podruhé), co touhle větou myslíš. Linux se v reálném světě velmi dobře prosadil už před těmito technologiemi.
Ale tohle za mě není vůbec špatně. Každý profi produkt je pro velmi omezenou skupinu lidí. To, že něco v nějakém OS nejde, vůbec automaticky neznamená, že je to špatně. To, že něco nejde je velmi často velmi dobře.
Tohle je mentalita, která dostala BSD tam, kde je. Mnohé věci dělají čistěji, konzervativněji, ale taky se prosadili jen v relativně úzké množině nasazení. Linux se umí okolnímu světu přizpůsobit lépe. Platilo to před 20 lety, kdy se prosadil, a platí do i dnes, kdy si udržuje dominanci.
A jinak by mě fakt zajímalo (podruhé), co touhle větou myslíš. Linux se v reálném světě velmi dobře prosadil už před těmito technologiemi.
Linux se prosadil v jiném kontextu, než jaký platí dnes. Pokud by se pořád držel jen toho, co fungovalo před 20 lety, tak nebude mít odpovědi na dnešní dobu. IT před 20 lety bylo přece jen dost odlišné. Už jen personálně: před 20 lety Linux ujídal komerčním Unixům, to znamená, že na něj přecházeli admini, kteří měli unixové návyky v krvi. Jenže pak se tento růst vyčerpal a Linux musel začít růst na úkor Windows nebo získávat nové instalace s úplně novými adminy. A tihle lidi mají úplně jiné návyky a schopnosti a i tomu se musí Linux přizpůsobovat. Kdyby se Linux nepřizpůsoboval a byl jen pro úzkou skupinu expertů, kteří mají Unix v krvi, tak si to dominantní postavení neudrží.
A úplně stejně to platí pro vývojáře: před 20 lety pro Linux psali software lidi, pro které to byla primární, nebo i jedná platforma, kterou dokonale znají. Dnes pro něj píše podstatně větší množství vývojářů, ale takových, pro které je to třeba druhý nebo až třetí systém, který musí podporovat.
Jinak asi je chybné se bavit o Linuxu jako o nějaké entitě. Nic takového není. Ultimátně mají kontrolu nad nějakými pravidly distribuce a žádná sama o sobě nemá dostatečnou váhu, aby něco opravdu natvrdo prosadila. To si může dovolit Apple, který má do svého ekosystému uzamknuté stovky milionů lidí s iPhonem, ale my kdybychom začali něco natvrdo prosazovat, tak za pár měsíců jsou zákazníci na AlmaLinuxu, nebo do roka na Debianu nebo Ubuntu. Kvůli tomu, jsou tvůrci linuxových distribucí spíše ve vleku celého odvětví, než že by mu mohli něco diktovat. Na jednu stranu je to nutí odpovídat na poptávku a držet si tak uživatele a zákazníky, na druhou stranu to s sebou nese omezené možnosti, jak věci ovlivnit.
Kdyby tu nebyl Flatpak, tak se budou uživatelům distribuovat balíčky s binárkami, které do systému instalují kdoví co, AppImage, které do systému mountují kdoví co apod. Tvůrců, kteří by šli a dali si tu práci udělat aplikaci pro Linux pořádně a řádně ji udržovali, by navíc bylo minimum. V tomto jsem realista. I když okno do alternativní reality nemám a dokázat to tak nemůžu.
20. 9. 2024, 18:28 editováno autorem komentáře
Tohle je mentalita, která dostala BSD tam, kde je.
Ano, za mě super.
úzké množině nasazení
Což není špatně.
A tihle lidi mají úplně jiné návyky a schopnosti a i tomu se musí Linux přizpůsobovat.
Ne nemusí. Tohle je blbost na entou. Když mi do kuchyně začnou chodit pekaři, tak to fakt neznamená, že začnu guláš kynout.
A za druhé, už je tady jedna generace, která se narodila a vyrostla už v době dávno po unixu, po vzniku linuxu. Tohle není žádný problém z hlediska starých unixových adminů. Tyhle lidi lze naučit linux přímo od nuly. A není to žádný problém. Ve své (skoro už 20 let) praxi jsem vychoval několik linux adminů. Vůbec není důvod se odkazoval na Windows. Ti lidé moc dobře vědí (tak jak jsme to věděli my), že existuje více OS, mají zvědavost (tak jako my), takže není vůbec žádný problém z kompletního nováčka udělat za rok, dva linux admina a současně není žádný problém se od nich učit. Takže fakt vůbec není potřeba linux přizpůsobovat windows nebo čemukoliv jinému. Tohle mám ze své každodenní praxe.
kdybychom začali něco natvrdo prosazovat, tak za pár měsíců jsou zákazníci na AlmaLinuxu, nebo do roka na Debianu nebo Ubuntu
No a v čem je problém? Ať si každý používá co chce. Já Debian a FreeBSD a nosím trička ArchLinuxu.
Kdyby tu nebyl Flatpak, tak se budou uživatelům distribuovat balíčky s binárkami, které do systému instalují kdoví co, AppImage, které do systému mountují kdoví co apod.
Tohle si nemyslím. Osobně si myslím a celý život to tak praktikuju (a určitě nejsem jediný), že když něco nejde, tak se zamyslím nad tím, jestli to dělám dobře. Potom zjistím, že ne, a udělám to lépe. Z tohoto plyne moje přesvědčení, že čím více různých zakrývacích vrstev existuje, tím nakonec hůře.
Triviální příklad. Někdy kolem roku 2010 jsem přešel na Debian (z CentOSu), věděl jsem, že nechci dělat bash skripty na kde co a hledal jsem systémový způsob. Prakticky měsíc po přechodu na Debian jsem se naučil dělat deb balíčky a do nich vkládat závislosti. Takže dneska i když znám třeba Ansible, tak jej (pro soukromé projekty) nepoužívám, protože po minimální instalaci debu stačí nainstalovat jeden balíček a systém mám v odpovídajícím stavu.
Kdyby do mě někdo narval, že existuje Ansible a Flatpak a že deb je dáběl ;-), tak bych to dodnes dělal blbě. Takto mi fakt stačí minimální instalace a s využitím standardním prostředků distra se obejdu bez ansible a flatpaku a hromady dalších věcí.
Ne nemusí. Tohle je blbost na entou. Když mi do kuchyně začnou chodit pekaři, tak to fakt neznamená, že začnu guláš kynout.
Když jsme u těch kuchařů, tak pokud mám jednu špičkovou michelinskou restauraci, můžu tam mít špičkové nároky na kuchaře. Pokud potřebuju zajistit chod 200 restaurací, tak prostě nemůžu mít nároky na úrovni michelinské restaurace, protože tolik kuchařů na takové úrovni prostě neseženu. Budu rád za kuchaře s mnohem menšími schopnostmi a možná budu rád i za toho pekaře. Ho nenechám kynout guláš, ale recepty pro něj budu muset patřičně zjednodušit, protože nejenže nikdy před tím pořádně nevařil, ale ani nemá čas se do toho pořádně ponořit, protože půlku směny musí pořád péct.
No a v čem je problém? Ať si každý používá co chce. Já Debian a FreeBSD a nosím trička ArchLinuxu.
V čem je problém? No samozřejmě v penězích. Ukaž mi firmu, která ti řekne, ať jde klidně většina zákazníků používat konkurenci, že budou jen rádi. Ale tohle neplatí jen pro komerční distribuce. I dobrovolník třeba v Debianu je motivovaný tím, aby zrovna Debian používalo co nejvíc lidí. Kdyby všichni utekli k jiných distribucím, protože se Debian uživatelům nepřizpůsobil, taky by z toho nadšený nebyl.
Jinak díváš se na to optikou špičkového admina s dekádami zkušeností, ale takových lidí je zoufale málo. Šlechtí tě, že jsi vychoval pár dalších dobrých adminů, ale my to vidíme v trochu jiném měřítku, kdo ty naše systémy obsluhuje. Čím populárnější RHEL a Linux obecně je, tím se laťka lidí, kteří ho obsluhují snižuje. Gaussova křivka je v tomto neúprosná. A není to nutně o inteligenci nebo schopnosti těch lidí, ale často to jsou lidi, pro které je to naprostá bokovka a nemají motivaci a čas se v tom výrazně zlepšit. Nemělo by to tak být, ale je.
I dobrovolník třeba v Debianu je motivovaný tím, aby zrovna Debian používalo co nejvíc lidí.
To teda fakt nevím. Já tu snahu o co největší zastoupení linuxu nikdy neměl a nikdy jsem ji nechápal. U spousty činností vidím lidi, kteří moc nemají rádi, když jejich produkt používá někdo, kdo tomu vůbec nerozumí a neváží si toho.
Gaussova křivka je v tomto neúprosná.
Pokud se kvalita lidí s počtem snižuje, tak to znamená pro ně vytvářet takové prostředí, které je nasměruje tu věc udělat snadno a správně. A to fakt neznamená tam dávat další vrstvy, které zakryjí nějakou chybu a nebude na ni vidět. Protože ta chyba někdy vyhřezne. A kdo to potom bude řešit? Další, méně zkušení admini?
ale často to jsou lidi, pro které je to naprostá bokovka a nemají motivaci a čas se v tom výrazně zlepšit.
Tohle je hromada dalších problémů k diskusi. A i tihle lidi a možná o to víc, potřebují snadný přístup k pravdivým informacím o tom, jak daný systém konfigurovat.
Jo, prostě v žádném argumentu nevidím důvod přizpůsoboval linux třeba například windows a takto nalákat další adminy. No a pokud ano, tak se klidně můžem vrátit cca 20 let na zpět, kdy tady byl Mandrake, kde už v té době vše bylo klikací a člověk do /etc/ vůbec nemusel. (Dneska už si nevzpomenu na jméno toho nástroje, ale když jsem v roce 2006 nastoupil do první práce, tak tehdy tam linux ovládal pomocí nějakého webového nástroje napsaného v perlu a už tehdy jen klikal do webu. A udělal tam úplně všechno od sítě až po rozdělení disků. Takže pokud někdo touží po klikacím Windows adminovi, tak tohle už tady bylo.)
S těmi adminy jsem trochu uhnuli od tématu. Já je uváděl jen jako příklad, proč se musí Linux vyvíjet a nezůstávat tam, kde byl před 20 lety, ale oni nejsou ten důvod, proč vznikají věci jako Flatpak nebo Docker. Ty vznikly kvůli vývojářům, ale tam byl ten vývoj podobný. Před 20 lety dělala software pro Linux jen linuxová komunita. Ti, pro které to byl primární platforma. Distribuční repozitáře fungovaly jako síto a motivace.
Jenže ta základna se tak rozrostla, že linuxová komunita je dnes v menšině. Dělají to často lidi, pro které je Linux jen jedna z platforem, nebo firmy, pro které je to platforma s nejmenším počtem zákazníků (když se bavíme o desktopu) a ti ti na rovinu řeknou: buď to pro nás bude tak snadné, že úsilí bude odpovídat počtu zákazníků, kteří to chtějí, nebo to vůbec dělat nebudeme. Že by na to najali zkušené linuxové vývojáře, je úplné sci-fi. Zaprvé je takových hrozně málo a zadruhé to je úplně mimo rozpočet, který jsou ochotní do toho dát. U serverového softwaru je to trochu jiné, tam si nemůžou dovolit Linux zcela ignorovat, ale zase to dělají cestou nejmenšího odporu.
Myslím, že máme i trochu jiný názor na to, co je příčina a co důsledek. Flatpak nebo Docker nejsou příčinou současného stavu, ten panoval dávno před nimi, jen ten trend postupně sílil a oni na něj odpověděly. A nikdo se linuxových distribucí neptal, jestli chtějí Docker. Oni ho prostě udělali a lidi ho začali masově používat. Linuxová komunita to mohla ignorovat, ale moc by s tím neudělala, jedině by musela zakazovat technologie, které to potřebuje, což úplně náš styl nikdy nebyl. Kdyby to ignorovala, nijak to nezastaví. Jen by se dočkala něčeho, co je extrémně populární a vyrostlo do platformy, která sice běží na Linuxu, ale jinak si vše řeší sama a nemusí se na nikoho ohlížet. Tím, že to linuxová komunita přijala, si zajistila určitý vliv na to, jak to bude vypadat.
Důvod, proč BSD taková dilemata řešit nemusí, je ten, že mimo BSD komunitu velice nikoho nezajímá, je tam, kde byl Linux před 20 lety. Můžeme se na to dívat tak, že Linux se stal obětí svého úspěchu, nebo tak, že BSD se stalo obětí svého elitářství. :)
Myslím, že máme i trochu jiný názor na to, co je příčina a co důsledek.
Myslím, že se míjíme v mnoha věcech. Pro mě podíl linuxu na trhu nic neznamená a považuji to za dost špatnou metriku. Mě je fakt jedno, jestli ten který OS má 40% nebo 0,01%.
Na boom dockeru se mělo reagovat: "vývojáři, vytvářet balíčky je snadné, vůbec nepotřebujete novou platformu" a prostě to zpropagovat tímto směrem. Protože já se v praxi setkávám s tím, že mnoho progs vůbec neví, jak lze vytvářet balíčky, nikdy se s tím nesetkali a pokud ano, tak mají dost hrůzné představy, co to vlastně je. Na tuto situaci se nemá reagovat propagací dockeru nebo flatpaku, ale má se na to reagovat stylem: "tohle máme v systému už 30 let, balíček vytvoříte jedním příkazem".
A (tohle píšu už taky několik let) pokud má někdo problém s vytvořením balíčku, tak to skoro automaticky znamená, že je ten projekt špatně vedený. A čímž dřív to ten prog zjistí, tím lépe. Mě například v jednu chvíli přestalo bavit dělat balíčky pro python, tak jsem přešel na golang. Statická binárka, linux, freebsd, windows z jednoho Makefile. Balíčkování je trivka, vůbec nemusím řešit závislosti na python modulech (které jsou nebo taky nejsou v distru) apod. Jinými slovy, nepříjemnost v balíčkování pythonu mě přinutila zamyslet se a teď mám lepší řešení po všech stránkách.
Proto říkám, že není úplně vhodné do systému dávat a ještě navíc propagovat kdejaké ulehčení, protože to potom ve výsledku znamená, že ta bude jen více nepořádku.
Ale balíčky jim nedají to, co jim dá ten kontejner, tedy společně s aplikací distribuovat i prostředí, v kterém to mají otestované, že to funguje. A to není jen o pohodlnosti vývojářů a špatně napsaných aplikacích.
Mám v týmu zkušené linuxové vývojáře, kteří ví, jak aplikace pro Linux psát a stejně s tím zápasí. I když uděláš aplikaci, která nevyžaduje konkrétní verze knihoven, tak stejně narazíš na to, že v jedné distribuci tu knihovnu buildí nebo patchují způsobem, který upstream nezamýšlel, v další zase něco odstraní (třeba z patentových důvodů), další zase kašle na opravy a má tam upstreamem dávno opravené chyby apod. U takových Boxes to řešíme každou chvili, protože s virtualizačním stackem dělají distribuce divy. A domluva není možná, protože oni pro to mají zase svoje důvody.
Flatpak je v tomto případě darem z nebes, protože v něm ta aplikace běží v prostředí, v kterém byla jeho vývojáři otestovaná, bez ohledu na to, co za podivnosti v distribuci dělají.
Jasně, mohli bychom udělat balíček s velkým staticky slinkovaným blobem, ale je to opravdu lepší než aplikace, která je do velké míry izolovaná ve Flatpaku?
Ale balíčky jim nedají to, co jim dá ten kontejner, tedy společně s aplikací distribuovat i prostředí, v kterém to mají otestované, že to funguje. A to není jen o pohodlnosti vývojářů a špatně napsaných aplikacích.
Jenže to prostředí považuju za blábol už od roku 2006. Tehdy jsem programoval v javě a dodnes všechny moje programy fungují. A už tehdy jsem nadával na to, že si kdejaký program si tahá vlastní konkrétní verzi JRE (především do Windows).
Tedy už 18 let jsem svědkem toho, že vůbec není potřeba žádné speciální prostředí, programy napsané před 18 lety fungují v dnešní javě.
Totéž v php (ano, už je to trapné, tohle píšu asi tak po sté). Jsou programy v php, které bylo obtížné nainstalovat a následně i provozovat. Ty jsem dal na blacklist. Nezajímají mě. Vedle toho existují už dávno mrtvé programy, napsané pro php 5.1.6, které fungují dodnes na php 7. Není s tím žádný problém.
Pokud si někdo vybere knihovnu, která má problémy s licencí, tak je to problém toho proga nebo týmu.
Já tohle myslím fakt vážně. Jestli si někdo v IRL háže klacky pod nohy a hledá co možná nejméně kompatibilní věci, tak ať si to užije. Já to dělám přesně naopak. A od zástupce distribuce (tebe), bych také čekal apel na to to dělat správně, dodržovat nějaké good practices, tyto průběžně upravovat, nabízet sadu co nejméně problematických knihoven a tímto celé prostředí vylepšovat.
> Vedle toho existují už dávno mrtvé programy, napsané pro php 5.1.6, které fungují dodnes na php 7. Není s tím žádný problém.
Tohle mi spíš přijde jako štěstí než důkaz kvality kódu daného vývojáře. Nebyly mezi 5.1.6 a 7 zpětně nekompatibilní změny jazyka? Jestli to pořád funguje, měl vývojář štěstí že na nic takového nenarazil, ale bez křišťálové koule to jde těžko predikovat.
Tohle mi spíš přijde jako štěstí než důkaz kvality kódu daného vývojáře. Nebyly mezi 5.1.6 a 7 zpětně nekompatibilní změny jazyka?
To já nevím, já v php napsal možná sto řádků. Já bych neřekl, že je to štěstí. S tímhle se potýkám 20 let své praxe. Vždy někdo přijde s tím, že je potřeba speciální verze doslova čehokoliv (jádra, ovladače, hw, knihovny, překladače, prohlížeče), zatímco hned vedle toho existují projekty, které nemají vůbec žádný problém a jsou starší než linux samotný (což se teda netýká Gallery 2).
https://www.php.net/manual/en/migration70.incompatible.php
Existuje spousta vlastností a funkcí jazyka, které byly v 5.1.7 v pohodě, a v 7.0 skončí pádem aplikace. Některé z nich byly deprecated v pozdějších verzích 5.x, ale ne v době 5.1.x
Co jsem si je prošla, nejspíš nebude problém narazit na aplikaci vyvinutou pro 5.1 která nebude mít problém v 7.0, ale rozhodně se nedá ten zbytek hodit jen na vývojáře.
Pokusy o to to vylepšovat probíhaly více než 20 let a situace si nijak nezlepšovala. Kdyby byla po těch 20 letech situace nadmíru výtečná, tak vývojáři tak masově neskočí po kontejnerech. A opravdu to není jen o lenosti a neschopnosti psát dobrý kód.
Je prostě realitou, že člověk nepíše proti jedné knihovně, ale proti X jejím variantám, které jsou v různých verzích, a i ve stejných verzích se v různých distribucích můžou chovat různě. Rady, že si má vybrat tu správnou knihovnu, jsou opravdu knížecí, protože v některých oblastech prostě na výběr není (viz. ta virtualizace).
Efektivně to vede k tomu, že si vývojáři musí omezovat výběr funkcí na ty opravdu neproblematické všude a případně reimplementovat, či forknout a skrytě bundlovat ty problematické. A situace je ve výsledku ještě horší, protože je to nepřiznané. Člověk používá aplikaci, která má nádherně dynamické linkování na své závislosti, ale ve skutečnosti má celou vlastní implementaci krypta, kdysi forknutou z nějaké knihovny. A že jsem takových případů viděl...
Jako vývojář s povahou, že se snaží udržet zpětnou a dopřednou kompatabilitu, tak čím větší rozptyl verzí, tím to je těžší a těžší.
Když budu psát v PHP7, tak to vyžaduje určitou pečlivost, a otestování aby to na 8čce neházelo noticky.
Psát v PHP8 aby to běželo i na PHP5 je zase sebemrskačství. Ten jazyk používá nové konstrukce které prostě chceš používat.
> Ale balíčky jim nedají to, co jim dá ten kontejner, tedy společně s aplikací distribuovat i prostředí, v kterém to mají otestované, že to funguje.
Navíc i ten kontejner jde napsat i dost minimalisticky, pokud tu technologii člověk použije správně. Můj výstup konterjnerů builděných z nix packages je v podstatě jen serverová aplikace samotná (A občas busybox, pokud do kontejneru chci občas vlézt s shellem). Mohla bych to instalovat i jako normální balík a občas to dělám, ale kontejnery mají výhody větší než jen „bundlované prostředí“. Navíc díky podmanu a systemd integraci už není potřeba řešit moloch Docker.
>Statická binárka, linux, freebsd, windows z jednoho Makefile.
Jedna z největších kritik Flatpaku co vídám je „bundluje to celé prostředí, takže je to nebezpečné, protože nejde updatovat závislosti bez upgrade aplikace“. Osobně s tím nesouhlasím a ty zjevně taky ne, jinak nepoužíváš Golang, ale je v tu chvíli opravdu velký rozdíl mezi tím distribuovat kompletně staticky slinkovanou binárku a flatpakem?
Flatpak mi dá tohle všechno a navíc aplikační sandbox, mám velkou šanci že pokud je aplikace napsaná správně a používá XDG portály, nemůže vést chyba v aplikaci k přístupu mimo sandbox.
Osobně s tím nesouhlasím a ty zjevně taky ne, jinak nepoužíváš Golang, ale je v tu chvíli opravdu velký rozdíl mezi tím distribuovat kompletně staticky slinkovanou binárku a flatpakem?
Já jsem měl a stále mám se statickými binárkami problém. U golangu pro mě převážily jiné výhody a také zatím velmi snadná rekompilace na všechny OS. Navíc já celkem zásadně používám pouze standardní knihovnu + connector do postgresu, takže těch případných bezpečnostních chyb tam není tolik.
Ale obecně, za mě jsou sdílené knihovny skvělý vynález a základ. A myslím si, že za těch 50 let jako lidstvo známe způsob jak je psát a používat. To, že se to v nějakém prostředí neděje vnímám jako problém toho prostředí. (Ale celkově je to samozřejmě složitější.)
Osobně za tím vidím lenost/neschopnost vývojářů. Jak na straně použité knihovny, tak aplikace.
Vidím v tom problém s držením kompatibility jednotlivých verzí - u aplikací striktní vyžadování nejnovější verze knihovny nebo naopak setrvávání na historické. U knihovny je to zase neschopnost/neochota držet kompatibilní rozhraní té knihovny (neschopnost muže být i ve formě malého počtu zdrojů na držení více verzí).
Setkal jsem se s aplikací, která striktně vyžadovala nejnovější verzi interpretu. Při zkoumání proč a co reálně z té nejnovější verze potřebují, tak nic. Prostě proto. Že vyžadovaná verze interpretu nebyla součástí žádné distribuce, to vývojáře nezajímalo, dokonce s tím přišli u minoritního update (X.Y.Z -> X.Y+1.W), krása. Takže řešením byl kontejner přímo od vývojářů. Mimochodem, dost prasácky udělaný a i s tím bylo dost problémů.
Opačný problém, setrvávání na historické verzi knihovny, je asi častější. Nikdo nechce jít do portace na novější, vývojáře nezajímá, že nikdo jiný danou verzi už nepoužívá... Tak zase, šup s tím do kontejneru a sere pes.
Ale ani jedno není dobré. Řešení to ale nemá, pokud vývojáři nechtějí s tím něco udělat... Jen mi přijde, že cca 15 let zpět to byl celkem standard. Nehnal se vývoj tolik dopředu, dbalo se na zpětnou kompatibilitu a podobně.
Ad setrvávání na starých knihovnách : krásný příklad je GIMP. Před rokem a něco přišla verze, která z GTK2 (protože GTK už byla EOL) upgradovala na GTK3 a v podstatě s dnem vydání mohli začít pracovat na portaci GTK4.
Tohle je příklad aplikace, která je robustní a kde dělat upgrade zásadní knihovny "protože nikdo jiný tu starou už nepoužívá," je prostě veliký problém. Zvláště, pokud aplikace se starou verzí knihovny funguje a upgrade se dělá vlastně jen proto, protože EOL. Vím, vím, co mi chcete říct...
Jen, že to prostě není tak jednoduché a u projektů tohoto typu jako GIMP se vlastně může jednat o kontinuální portaci...
Hele, zrovna ten GIMP jsem měl na mysli už v okamžiku psaní toho příspěvku a podle mne je to někde na hranici té mé myšlené neschopnosti*) a výjimky potvrzující pravidlo.
U toho GIMP-u je to takový dvojitý problém, GTK původně byla zkratka Gimp Tool Kit - vznikl právě kvůli GIMP-u. Jenže někde ujel vlak a GTK jede prostě rychleji... Taky to může být prostě to, že si v GIMP-u ukousli větší sousto koláče, než dokážou sníst. Nový GIMP má přinést tolik novinek, že až oči přecházejí - a některé potřebují opravdu veliké přepsání vnitřní logiky. Nebylo by tedy lepší rozdělit práci na dva kroky? Portaci na aktuální/aktuálnější GTK a pak přepsat jádro aplikace? Nevím, nedokážu posoudit... Možná ne... Jen nahlas přemýšlím...
Na druhou stranu, ono to možná ukazuje i na problém v té GTK knihovně - pokud portace aplikace na novou verzi vyžaduje tak hluboké zásahy, že to autoři nedokážou stíhat, je s tou knihovnou něco špatně, protože nedokážou dostatečně držet zpětnou kompatibilitu/model vývoje toto umožňující. Trošku tím zabřednu do GTK vs. QT války. Portace celého prostředí KDE na QT6 trvala kratší dobu. Proč? Je to lepším návrhem QT? Lepším návrhem KDE? Lepším zaměřením dostupných zdrojů? Nebo jen a pouze většími dostupnými zdroji? Nechci otevírat válku GTK/QT/Gnome/KDE. Opět jen nahlas přemýšlím.
*) nemyšleno jen jako „blbí vývojáři“! Ale právě kvůli té komplexnosti, nedostatku zdrojů a možná i zastarání kódu, takže ten přepis se prostě táhne, protože potřebují komplexní refaktoring, který trvá a trvá...
Zažil jsem přechod středně velké aplikace z PyQt3 na PyQt4, pak PyQt5 a pak PyQt6. Vím dvě věci - (Py)Qt ty migrace měla docela dobře podchycené a ty změny v API většinou rozumně náročné. A nebylo to C. Tipnul bych si, že Gtk+ a C je dost větší oříšek a každá z těch věcí tam přidává svoji část problému.
Qt má určitě podstatně větší zdroje na vývoj a a údržbu a tudíž i na držení zpětné kompatibility, takže v tomto ohledu na tom bude líp. Mezi GTK 2 a GTK 3 bylo prakticky 10 let a musel se tam udělat velký řez. Od verze 4 už se počítá s menšími inkrementálními změnami a vydáním co cca 3 roky.
Ono dost záleží na tom, jak je i ta samotná aplikace napsaná a udržovaná. Mezi GTK 2.0 a poslední verzí GTK 2 před vydáním GTK 3 byl taky docela velký rozdíl. Postupně se to modernizovalo, starší věci se označovaly za deprecated... když aplikace ten vývoj sledovala, nebyl přechod na GTK 3 takový problém. Když zamrzla někde v raných dobách GTK 2, bylo to mnohem více práce. To si myslím, že je problém i GIMPu.
Když zamrzla někde v raných dobách GTK 2, bylo to mnohem více práce. To si myslím, že je problém i GIMPu.
No vida, a jsem u toho...
No a pokud se vrátíme na začátek, jak toto vyřeší kontejner? Nijak, jen to zakryje. Ale to shnilé zůstane shnilé pořád.
Mimochodem, používaní kontejnerů má svůj smysl - pro rozdělení ekosystému aplikace na samostatné části a jejich izolace, tam, kde to má smysl. U serverových aplikací asi nikdo příčetný nebude rozporovat výhody. Ale i tam se to musí dělat pořádně a s rozmyslem.
A kde jsem psal, že zrovna toto má řešit kontejner? :)
Kontejner je dobrý od toho, když mám aplikaci otestovanou proti GTK 4.2 a v distribucích se začne objevovat 4.3, která sice drží zpětnou kompatibilitu, ale nemusí se chovat 100% stejně a kontejner mi umožní používat 4.2, dokud si nenajdu čas a neodladím a neotestuju to s 4.3. Nebo když aplikaci potřebuju dostat i k uživatelům, kteří jedou na nějakém hodně konzervativním distru, které má pořád GTK 4.0, ale moje aplikace používá vlastnosti, které se tam dostaly s 4.1 a 4.2, a zároveň nechci, aby uživatelé trpěli chybami, které se od verze 4.0 opravily.
Kontejner ale za aplikaci opravdu nevyřeší, že roky nesleduje vývoj grafického frameworku a pak má problémy přejít na novou verzi. Může maximálně pomoct v tom, že takovou aplikaci můžu šoupnout do izolovanějšího prostředí a nemít kvůli ní komponenty, které nejsou upstreamem dávno podporované, přímo v systému.
Zrovna v tomto případě, nebylo by jednodužší a přímočařejší řešení:
libGTK-4.0.so
libGTK-4.1.so
libGTK-4.2.so
?
U knihovny je to zase neschopnost/neochota držet kompatibilní rozhraní té knihovny (neschopnost muže být i ve formě malého počtu zdrojů na držení více verzí).
Jenže potom je otázka, proč ten vývojář používá takto problematickou knihovnu.
Na tohle v těchto svých komentářích narážím. Autor použije něco, co je špatně. Proto se to nedá zabalit, proto použije kontejner. A právě z tohoto důvodu tady (a už dávno na svém webu) kritizuju tu poslední technologii, v tomto případě kontejnerizaci, která pro všechny zúčastněné jen zakrývá ten pravý stav věcí. Kontejner se dá snadno vyrobit a nainstalovat, takže se nikdo nemorduje s balíčkem a tedy to nevidí. Autor je spokojen a to že má v programu zcela špatnou knihovnu ho vlastně vůbec netankuje. Takže je to další vrstva na zakrývání problémů.
Opačný problém, setrvávání na historické verzi knihovny, je asi častější.
Jenže tohle by ve skutečnosti nemělo vůbec vadit. Knihovna v5 by měla obsahovat všechno z v1. Pokud je některá věc deprecated, tak se to ohlašuje tak cca 10 let a ta funkce je tam další 5 let (ale třeba už ne v dokumentaci).
Já prostě nikde nevidím problém a ani v praxi nepozoruju.
Hele, v tomto s Tebou souhlasím. Jen v běžné praxi toto vidím jako problém - ten problém je přesně to, co popisuješ - neudržitelný vývoj.
> tak si klidně mohl ten svůj program zkompilovat staticky a měl by po problému
Není potřeba kompilovat staticky (což jednak znamená, že pokud tvůj software je z více binárek, tak je v každé ta knihovna znova, jednak s některými věcmi (glibc) je to opruz a nefunguje to), typický komerční software (různé CADy apod.) to dělá tak, že jsou to normálně dynamické binárky, ale nastavené tak, aby se knihovny prioritně hledaly v /opt/jméno_výrobce.
Ono bohate staci, kdyz autor aplikace deklaruje jake knihovny v jakych verzich aplikace ocekava, a normalni distro si je proste v tech verzich dotahne k prislusne aplikaci. Klidne muzes mit 10 verzi teze knihovny.
Jenze to by fikulini nesmeli vymejslet ze verze <X neni dost khull a oni ji z repa vyhodej.
Stejne tak by samozrejme bylo fajn, kdyby autori knihoven drzeli kompatabilitu = starsi aplikace by videla to na co je zvykla a nove veci by videla jen aplikace nova.
bez prezdivky ...
Jenze to by fikulini nesmeli vymejslet ze verze <X neni dost khull a oni ji z repa vyhodej.
a ty se frikuline budes o balicek s tou starou verzi starat? nebo zaplatis nekoho kdo bude? a pokud jde o tve ciste soukrome potreby, muzes si preci udelat vlastni soukromy ci primo lokalni repositar, kam si muzes kdyz uz ne zkompilovat/pripravit vlastni balicky, pouzit ty odstranene i kdyby jen s upraveou jejich depends, kdyz by to stacilo.... cokoliv z toho je lepsi nez blbe kecy ;-)
23. 9. 2024, 23:51 editováno autorem komentáře
Tak nekteri jsou gramotni, jini jako ty nikoli ...
Distro ten balicek ma, staci na nej nehhrabat ze? NIKDO se o NIC starat nemusi.
Kdyz si ten tenhle post napisu treba ve foxovi verze 0.7, je ti do toho taky uplny kulovy.
Takze te radim presne k tem frikulinum, kvuli kterym veci prestavaji fungovat, aniz by k tomu byl jakykoli relevantni duvod krome blabolu. A presne proto NIKDY nikdo tuxe pouzivat realne na desktopu nebude. Protoze na tedch widli aspon vi, ze kdyz mu to na nich fungovalo pri instalaci bude to na nich fungiovat i za 10, 15 nebo 20 let.
pokud by slo o balicek se shel scriptem tak ano, ale jakmile jde o binarni obsah kterej ma zavislosti na dalsich binarnich baliccich ktere se mezitim (s povysenim verze distribuce) aktualizujou, tak jaksi proste pises z neznalosti pekne kraviny ;-)
takze znovu si precti co sem psal, vyber si nejakou moznost a zkus si to sam...
No já jenom abysme tu příliš nehýkali nad těma aplikačníma packama - zrovna teď po přechodu na nové LTS ubuntu mě trestál snap, ve spojení s apparmor. Plnil mi dmesg log hláškama o nemožnosti zapisování do nějakého adresáře firefoxu. Nainstaloval jsem apparmoří profiles, nepomohlo. Odinstaloval jsem snapí firefox a hle v systému zůstal normální firefox. V tom novym gnome je trochu těžký zjistit co ikonka na panelu zrovna spouští. Odinstaloval jsem normální firefox, hlášky apparmoru v dmesg jsou pořád, odinstaloval jsem snap a hádej co. Pořád je to rozjebaný. Ještě tam jsou další hlášky něco s acpi a pod... tenhle apparmor byl čert dlužen...Přehlídnout to nemůžu a už se s tim drbu tejden, páč to nejde dobře vypnout... :-(
Porad nikde neni receno, jak tedy probiha update toho immutable systemu. Doufam, ze nekolik let bez updatu nebezi. Tam, kde je a/b partitioning, je to jasne. A tam, kde neni? Prijde muminek s flaskou, nabootuje z ni a dd? To doufam, ze ne =)
Ale i u toho a/b, jak zajistim, ze mi do druhe partitiony nezapise nejaky hacker? Takze bych se po rebootu mohl tesit akorat na adresu btc penezenky?
A taky pochybuju, ze beh aplikaci z uni balicku zlepsuje bezpecnost. Jak uz psal kolega vyse, po hotfixu jednoho balicku musim cekat, nez si toho vsimnou vsechny aplikace. Ok, runtimy to trochu resi, ale treba takovy docker potrebuje, aby se prebuildily vsechny zavisle image. To taky muze trvat (nekdy to ani nedotrva).
Proste mi prijde, ze v takovem systemu misto abych dal duveru jedinemu tymu distro maintaineru, tak najednou musim davat duveru desitkam az stovkam tymu... To rozhodne k bezpecnosti neprispiva (tohle samozrejme plati jen kdyz na tom immutable systemu provozuju i jine aplikace, nez jsou v image).
A jasne, je hezke, ze mi zadny utocnik neprepise /usr/bin/ls, ale treba k .ssh/authorized_keys ma porad bez problemu pristup. Takze argumentovat tim, ze derave aplikace na immutable systemu nevadi, je blbost.
A jako posledni vec - kdyz se tedy nektere updaty (treba v a/b) updatuji restartem, tak jak zaridim, ze restart vyresi vsechny problemy? Kdyz senpak vlastne startuje jinej, pozmenenej, system?
Jak Silverblue, tak Flatpak a vlastně i bootable kontejnery používají libostree. V dokumentaci je detailně popsáno, jak to celé funguje, včetně integrity, aktualizací, rebootů, možnosti vytvořit si test který aplikaci po upgradu ověří a pokud neprojde tak se automaticky udělá rollback. Na některé otázky to odpovídá.
Souhlasím s tím, že článek vyznívá trošku jako "immutable = bezpečnější" což samozřejmě není. Troufám si tvrdit, že je tomu naopak - immutable systémy jsou daleko náročnější na správu, aktualizace probíhají spíše méně často než u tradičních deploymentů
Díky za pěkný shrnující článek. Silverblue používám už sedm let a dnes na prakticky všech svých počítačích, udělalo to z Fedory bezúdržbový systém. Nejvíc se mi na tom líbí ta flexibilita přesouvání se mezi verzemi. Včera jsem na pracovním počítači přešel na Fedoru 41, která vyšla teprve v betě, a zcela bez stresu, protože když by něco nefungovalo, jedním rebootem bych byl zpátky ve Fedoře 40. Funguje to i v rámci jednoho vydání a je to super na bisektování regresí.
Dávám to i na počítače běžným uživatelům, protože ugprade systému s tím zvládnou sami a hlavně jsou schopní i beze mě se vrátit k předchozí verzi, když by se něco pokazilo.
Jinak v článku je drobná chyba: toolbox není nástroj na package layering, na to je v neměnných variantách Fedory rpm-ostree. Toolbox slouží k vytvoření pracovního prostředí nad neměnným systémem, kde si můžete instalovat balíčky, zapisovat atd. Je to tenká vrstva nad podmanem, která kontejner upravuje pro použití na desktopu: připojení domovského adresáře, display serveru, dbusu atd.
Když ono to hezký překlad nemá. "Hledání nového výskytu starých chyb pomocí binárního dělení (historie)" je poněkud dlouhé.
Mně tedy bisektování regresí přijde podstatně srozumitelnější, protože obě slova mají přesný význam a nemusím luštit dvouřádkový opis.
Silverblue je super, má to tchýně akorát už se mi 3x stalo, že se zasekly aktualizace. Naposledy to byl nějaký problém s grubem, musel se provést ruční zásah. A před tím zase program Updates neviděl žádný updaty.
Zřejmě je to jen problém lidské síly - Silverblue se nedostává takové pozornosti, jako tradiční Fedoře.
Ovšem pro prarodiče je to ideální, nerozbitný systém. Zaselký aktualizace zase nejsou až takový problém, systém jel normálně. Lepší než cokoli jiného.
U běžných uživatelů to dělám tak, že jim v ostree nastavím pravidelný staging na pozadí a jen řeknu, ať to čas od času restartují. Nevyřeší to zaseknuté aktualizace kvůli GRUBu, ale vyloučí to aspoň tu grafickou nadstavbu a nutnost, aby s ní nějak pracovali.
Premyslim jak si prarodice rozbijou system, kdyz jim clovek neda prava roota? Pokud si pokazi nastaveni Chrome/Firefoxu, tak to stejne zustane v home adresari a nacte se i po restartu, ne?
Nerozbijí si ho rodiče, ale ten systém se může rozbít sám. Neděje se to už tak často, ale třeba regrese u podpory hardwaru se stávají. A když máti po aktualizaci na novou verzi kernelu začne vypadávat wifina, je to na dálku těžké řešit. Takto jí stačí říct, aby po bootu vybrala druhou položku v menu a je v tom systému, který jí před tím fungoval.
Hm, asi necemu nerozumim ale predchozi verzi kernelu si muzu zvolit i v ubuntu, a to neni nemenny OS.
Ano, ale jen u kernelu. U neměnného systému prostě nabootuju do celé předchozí verze systému a nemusím řešit s uživateli, jestli je ta chyba v kernelu a pomůže nabootovat se starším kernelem nebo je chyba někde jinde.
A samozřejmě to stejně funguje i u celého upgradu systému. Moje máti si sama přejde z Fedory 39 na 40. Dřív bych ji toto určitě dělat nenechal.
Takze kdyz se objevi nova vadna verze nejakeho softwaru, cojavim napriklad emailovy program, tak i BFU zvladne prepnout na predchozi verzi?
Takze nemenny system si udrzuje vice verzi vsech programu?
Každý neměnný systém to má trochu jinak, ale u těch založených na OSTree jako Silverblue, je to tak, že je ten systém verzovaný jako v gitu. Každé vydání je jedna větev a každý denní souhrn aktualizací je commit v dané větvi. Když aktualizuji, stáhne se další snapshot systému, do kterého potom rebootuju. U upgradu je to analogické, jen se změní větev.
OSTree by default udržuje vždy dva snapshoty systému: ten aktuální a ten předchozí. V GRUBu si člověk vybírá, do kterého nabootuje. Nicméně na serveru se drží veškerá historie, takže pokud člověk chce, může si stáhnout libovolnou podporovanou verzi Fedory v libovolném snapshotu (aktualizaci z konkrétního dne) a přepnout do ní. Má to samozřejmě efektivní deduplikační systém, takže se ukládají jen rozdíly, ne celé obrazy, to samé při stahování nových snapshotů.
Jinak aplikace jsou standardně oddělené od systému a běží ve flatpacích. Žijí si nezávisle na systému a ani si nevšimnou, že se pod nimi změnil. Ale i Flatpak používá OSTree, každá aplikace má historii aktualizací a člověk se mezi nimi může volně pohybovat, případně aplikaci zamknout na konkrétním snapshotu, ale tady to zatím nemá žádné jednoduché UI, takže běžný uživatel by to nezvládl.
Dobre, takze pokud BFU nezvladne prepnout na predchozi verzi programu, jen kernelu, tak nevidim tu vyhodu oproti klasickemu systemu, kde BFU taky zvladne prechod na predchozi verzi kernelu.
Porad nechapu, proc by takovy system mel byt lepsi v tomto ohledu: "izap: Ovšem pro prarodiče je to ideální, nerozbitný systém."
Fedora bez desktopových aplikací má odhadem nějakých 2000 balíčků, kernel reprezentuje pár z nich. Pokud nevidíte rozdíl mezi vrácením pár balíčků a všech 2 tisíc balíčků do poslední funkční verze, tak už nevím, jak vám to líp vysvětlit.
Mnojo, protoze ja uvazuji primarne o techto dvou problemech: 1, chyba jadra, kdy nove jadro ma nejaky potiz s danym hardwarem, 2, chyba uzivatelskeho programu. Prvni problem se resi v obou typech systemu stejne. Druhy problem nemenny system neresi nijak lip.
Jasne, muze nastat cojavim treba problem s novou verzi crontabu, nejakou novou verzi knihovny, ale takovy problem jsem jeste v ramci spravy rodicovskych pocitacu nepotkal, pripadne nebyl vazny abych si to zapamatoval.
Asi proto, ze pouzivam LTS distribuce, a prechod na novou verzi LTS si pohlidam. V ramci jedne LTS jsou problemy s knihovnama asi marginalni, protoze se drzi pokud mozno stejna verze.
Kdyby to bylo rolling distro, tak asi takove problemy potkavam casteji?
Je mozne ze placam hlouposti, nejsem ajtak.
Ty si myslis, ze treba takovy buntu se bez roota neaktualizuje? Mno a chcipne to prave po ty aktualizaci.
A pokud rozjebnes profil browseru, tak chci videt, jak stim BFU cokoli udela, protoze ten browser pak uz nikdy nenastartuje.
Ech. Tak znova.
Jo, aktualizuje.
Ja se snazim pochopit, v cem je ten nemenny system lepsi v tomhle pouziti: "pro prarodiče je to ideální, nerozbitný systém".
Ubuntu se aktualizuje. Pokud nastane chyba jadra, tak v ubuntu i nemennem systemu poradim po telefonu at pri startu zvoli ten druhy radek (predchozi kernel/system). Tady je to stejne pro oba typy systemu.
Pak je problem s programy typu Chrome (zasadni pro BFU). Dle Eischmann "jsou standardně oddělené od systému a běží ve flatpacích. Žijí si nezávisle na systému". Takze tady nemennem systemu nedokaze BFU nejak snadno vratit verzi, stejne jako to nedokaze v ubuntu.
Zatim jsem pochopil, ze nemenny system oproti standardnimu resi snadno systemove balicky. Takze nemenny system navic oproti standardnimu pomaha se systemovymi balicky, ale jak jsem psal vyse, techto problemu v souvislosti s aktualizacemi potkavam minimum (=jsem nepotkal).
Jo, muzu to chapat blbe, ale z diskuze ani clanku jsem to lip nepochopil.
To zacina byt nejakym zvykem necist predchozi diskuzi a napalit tu komentar?
26. 9. 2024, 09:00 editováno autorem komentáře
Tak neměnný systém je primárně o tom, že máte jeden otestovaný obraz a vždy víte, co uživatel v systému má. U balíčkovacího systému vždy dříve nebo později vytvoříte kombinaci balíčků, která nikdy nebyla otestovaná.
Pokud se něco po aktualizaci rozbije, tak se systém prostě vrátí k poslednímu fungujícímu obrazu. Nic jiného není třeba řešit. Pokud to máte na pokladně, tak se vám pokladna automaticky vrátí k předchozímu obrazu, pokud správně nenabootuje do koncové aplikace. U desktopového Silverblue ten jeden krok musí udělat uživatel, ale je to tak jednoduché, že to zvládne. A tohle funguje vždy, ať se jedná o kernel nebo jakoukoliv jinou komponentu, ať jde o update nebo upgrade. Vaše řešení funguje jen pro kernel a jen v rámci jedné verze distribuce. Já nechci nechat uživatele roky hnít na starém LTS. Mám instalace, které jsou i 10 let staré, a chci, aby to ti lidi zvládli pokud možno trvale samostatně. S neměnným systémem se můžou přesouvat z jedné verze na další, jak postupně vycházejí, aniž by mě k tomu potřebovali a aniž bych já musel mít obavu, že skončí s rozbitým systémem a já jim zrovna nebudu moct pomoct.
Ne nadarmo jsou dnes všechny mobilní systémy, systémy v hodinkách, televizích atd., kde prostě potřebujete, aby to fungovalo bez zásahu uživatele, image-based a neměnné.
Jinak velkou část té stability dělá to, že aplikace běží ve Flatpaku. Vždy totiž běží v tom prostředí, v kterém jej autoři otestovali, bez ohledu na to, jak se systém pod nimi měnil. Dřív jsem měl zkušenost, že po upgradu systému některé aplikace nějaký čas nefungovaly úplně optimálně, protože v systému přistála nová verze systémové knihovny, na které závisí a která se chová trochu jinak. Tyhle problémy úplně odpadly. Tohohle jde dosáhnout i na tradiční distribuci, když se budete striktně držet flatpaků, ale v neměnných systémech jako Silverblue je to standardní řešení.
Pokud vám vaše řešení s LTS vyhovuje, já vám to neberu. Netvrdím, že neměnný systém je jediná možnost, jak daného dosáhnout. Osobně jsem si za ty roky vyzkoušel obojí a dnes volím neměnný systém, ale nikomu to nenutím.
Jenom doplním, že ve Windows není potřeba po každé aktualizaci restartovat. Po spoustě ano, protože je dost obtížné aktualizovat runtime nad kterým něco běží, sdílené knihovny které jsou právě používané, atd. I kdyby šlo soubory aktualizovat na FS, což Windows by default zakazují, tak to neopatchuje běžící procesy. Dá se použít hot patching, ale ten Microsoft zatím umožňuje jen pro vybrané edice Windows (a například MSVC runtime, za jistých okolností).
https://techcommunity.microsoft.com/t5/azure-sql-blog/hot-patching-sql-server-engine-in-azure-sql-database/ba-p/849700
A je třeba říci celou pravdu. MS většinou uvolňuje patche ve větším množství během patch Tuesday. Je super pokud restart vyžaduje třeba jeden patch z pěti, ale pokud je skoro vždy nějaký takový součástí dávky z patch Tuesday, tak nakonec restartovat stejně musíte.
Chápu, že článek neměl rozebírat aktualizace ve Windows. Berte to čistě jako doplnění.
To sice může být pravda, ale třeba některé korporace vyžadují restart, a to jakože skutečný restart, minimálně jednou za 14 dnů. Je jedno jestli nějaké aktualizace proběhly nebo ne, restartovat se muší, i kdyby na chleba nebylo...
Dovedu to pochopit. Ona spousta aplikací má větší či menší resource leaky, a často je to vidět i u OS a driverů. Když máte leak v DB engine, driveru pro připojení k příslušné DB, na web serveru, v TCP stacku, antiviru a v nějaké aplikaci v Javě která vám míchá data dlouhým bidlem, tak dříve či později něco přestane fungovat. Pokud má korporace pracovní dobu, tak může být snazší jednou za čas v noci nebo o víkendu rebootovat. U desktopů je situace ještě horší, protože na nich běží dlouhá řada aplikací které jsou postavené z mnoha úrovní abstrakce postavených nad sebou, mají obrovský stavový prostor, jsou event-driven, a po celou dobu užívání vytvářejí a/nebo modifikují objekty.
Tak hlavně dneska v době distribuovaných systémů by pravidelné restarty měly být samozřejmostí a aplikace by s tím měla počítat. Když někde potkam server s uptime víc než pár týdnů (měsíců, ano, i roků), ježí se mi z toho chlupy až na pytlíku.
Problém to může být na desktopu, když je to vynucené.
Vedle toho existují i immutable systémy typu NixOS, kde se nic jako in-place aktualizace knihoven neděje a každá aplikace si svoje závislosti umí používat nezávisle. Na serverech je pak nutný reboot prakticky jen když se aktualizuje jádro.
Jen připomenu, že už před >20 lety se dělaly cross compilace OS + drivery + sada programů do statického souboru. Prostě malý monolit, klidně bez podpory konzole, nebo vtipně, bez driverů k HID, nasazovaný v všelijakých krabičkách, například v routerech. Říkali jsme tomu firmware, i když je to trochu sporný název.
A co se týče aplikací, takový starý dobrý pes chroot taky umí pěkné kousky, až si říkám, zda mnozí dockeriské, flatpakisté, snapisté, appimagisté a další izolatisté mají dostatečně dobré důvody ho nepoužít.
Nebylo by to dost khull ... to je ten duvod vis?
Tux se pred temi lety vesel na disketu a jeste si na ni mel i dost mista na vlastni data. Cely dos mel v poslednich verzich mozna 300kB.