V předchozích dílech našeho volného seriálu jsme si představili projekt Suckless a jeho základní myšlenky. Vlajkovou lodí Suckless je dlaždicový správce oken dwm, který se dnes považuje za dokončený. Poté se komunita věnovala především vývoji emulátoru terminálu st, který se rychle posunul do velmi použitelné fáze a pomalu se stabilizuje podobně jako dwm. Pozornost Suckless komunity se nyní opět přesouvá k dalšímu projektu – tentokrát se snaží uskutečnit si sen o vlastním operačním systému.
Projekt nazvaný Stali je aktuálně vaporware (software veřejně oznámený, ale zatím nevydaný – pozn. redakce). Po několika měsících velmi vyostřených debat se podařilo ujednat si některé základní myšlenky, které mají být pro projekt charakteristické. Po této fázi debatování se několik schopnějších členů komunity pustilo do experimentování s prototypy a přinášeli do věci některé velmi zajímavé postřehy. Aktuálně se komunita věnuje neřízenému experimentálnímu budování základů Stali, jako například zaváděcího init systému, kompilačního systému či základních uživatelských aplikací. Stali tak získává den ode dne ostřejší rysy.
Na první pohled by se mohlo zdát, že se Suckless snaží vytvořit jen další GNU/Linux distribuci. V takovém případě by vše bylo triviální. Stačí vybrat dostupný software, seskládat jej dohromady a nová distribuce je na světě. Stali je však něco jiného než pouhá distribuce. Na druhou stranu ale také nejde ani o zcela nový operační systém, jakým je například HelenOS.
Čtěte: HelenOS nikdy nebude dokončený, říká jeho autor Jakub Jermář
Cílem projektu je něco mezi. Operační systém s Linux jádrem a pečlivě vybranými komponentami. Od běžné GNU/Linux distribuce se liší mimo jiné tím, že se od GNU snaží držet, jak nejdál to prakticky lze. Ve výsledku má Stali ve světě operačních systémů být něčím podobným, čím je dwm ve světě pracovních prostředí – systémem vhodným pro pokročilé uživatele, programátory a hackery, přičemž se snaží co nejblíže držet ideálů Suckless.
„… why not talk about my favourite Linux-distribution, namely Ubuntu? It's a prime example for a system requiring constant maintenance due to its bloatedness. It may be stable as long as you stay on the predefined paths, but as soon as you leave them, you're faced with insolvable problems previously glossed over with dirty hacks. We want to create a system you can do anything with, which allows you to work on integral components, fine-tune settings, remove shit you don't need and set up stuff by yourself. It should be intuitional for the experienced user, but also relatively easy to learn and understand for the inexperienced without requiring to learn hundreds of proprietary interfaces.“
– Laslo Hunhold, (Suckless mailing list 2013)
Během debat na mailing listu Suckless se podařilo kolektivně dohodnout hrubé obrysy Stali a mezi nejzásadnější rozhodnutí, které se promítlo i do názvu projektu, patří způsob kompilace software. Vše ve Stali by mělo být kompilované staticky. S tím souvisí i rozhodnutí nepoužít glibc jako základní C knihovnu, ale místo ní použít minimalističtější knihovnu, jako například musl nebo uclibc.
Myšlenka statického linkování je v dnešní době minimálně zvláštní (pozor, bavíme se o statickém a dynamickém linkování a ne o dynamic loading). Dynamické linkování je již tak zaběhlé a tak všudypřítomné, že se považuje za standardní způsob propojování knihoven a programů. Situace došla až tak daleko, že dynamické linkování je často jediný způsob, jak nějaký program smysluplně úspěšně zkompilovat. Chtít tedy linkovat veškerý software v operačním systému staticky a neposkytovat dynamický linker je velmi radikální. Přímo to tak nutí vybírat pouze takový software, který lze smysluplně staticky linkovat. Z toho tedy vyplývá potřeba volit jinou implementaci standardní C knihovny než glibc kvůli její přílišné velikosti.
„Static linking to the glibc is not very smart, as it's a beast, but doing so with a suckless libc like musl is a whole different story.“
– Laslo Hunhold, (Suckless mailing list 2013)
Obecně je dynamické linkování považováno za dobrý nápad a statické linkování za nevhodné (vyjma specializovaných prostředí). Většině komunity nedělá velký problém začít vyjmenovávat jednotlivé argumenty podporující tuto obecnou znalost. Suckless většinu těchto argumentů vyvrací a naopak statické linkování vyzdvihuje. Zkuste se alespoň na chvíli věnovat jejich argumentaci a pokusit se ji pochopit. Mnoho zajímavých argumentů je k dispozici na stránce projektu, popřípadě na ideologické studnici Suckless komunity.
Praktická ukázka staticky linkovaného systému je Bifrost – minimalistická linuxová distribuce zaměřená na sítě. Novějším experimentem je staticky linkovaný Arch Linux, Starch Linux, využívající právě knihovnu musl. Relevantními projekty jsou také Sabotage a Aboriginal Linux. Zajímavý je také operační systém Plan 9, velmi oblíbený systém Suckless komunity, který dynamické linkování nepodporuje.
Po fázi dohadování komunity nastalo experimentování, ve kterém se objevilo několik build systémů, které dokáží provést statickou kompilaci systému. Bylo nalezeno mnoho technických překážek, ale ve výsledku se ukázala myšlenka statického linkování realistická. Nicméně jako schůdnější řešení se ukázalo přepsat většinu základních komponent systému od začátku, v souladu se Suckless principy. Většina dostupných základních komponent systému jako například init systém nebo základní utility (coreutils) nejsou v souladu se záměry Stali.
„In a word, we want an unobfuscated system.“
– Charlie Kester, (Suckless mailing list 2013)
Začalo tedy hledání a psaní vhodných základních komponent systému. Většinu základních uživatelských programů jako například ps
, lsmod
, mount
, cat
, tar
a mnoho dalších komunita napsala nově v rámci ubase a sbase . Často přitom vycházela ze zdrojových kódu OpenBSD. Na místo init systému se uvažují projekty sinit, cinit a podobné velmi minimalistické init systémy (~ 100 LOC v C). Pro správu démonu se uvažuje o svc či runit. Jako správce zařízení ( /dev
) se uvažuje smdev, nldev či mdev. Jako správce oken samozřejmě dwm, jako window system prozatím X, v budoucnu pak Wayland. Jako hlavní příkazový interpreter pak mksh.
„Most of this code is very easy to read and understand and that's the main point. We only tend to implement the most common and useful options.“
– sin, (Suckless mailing list 2013)
Postupně vznikají další a další programy pro Stali. Často se sejde více řešení a komunita pak vybírá podle kritéria – co možná nejjednodušší a co nejvíce užitečné.
Stali má před sebou zřejmě dlouhou cestu, ale projekt se hýbe každý den vpřed a tempo vývoje se zrychluje. Je tedy docela možné, že se dočkáme prvního vydání Stali během několik následujících měsíců. Ještě zajímavější než čekat na vydání je však zapojit se do projektu se svým nápadem – příležitostí je velmi, velmi mnoho a není to nijak těžké. Repositáře jsou k dispozici na git.sta.li.
V příštím článku o Suckless si povíme o webovém prohlížeči Surf.