Suckless: méně smradlavý software

2. 12. 2013
Doba čtení: 6 minut

Sdílet

Suckless je projekt zabývající se tvorbou software, který smrdí méně a je určen především pro pokročilé uživatele. Jde nekonvenční cestou, přičemž se drží základních znaků jako je jednoduchost, minimalismus a použitelnost. Zásadním znakem je také drsnost komunity, která je velmi kritická.

Suckless funguje od roku 2002 a dnes má několik klíčových projektů – správce oken dwm, emulátor terminálu st, webový prohlížeč surf, operační systém stali a pár desítek vedlejších projektů jako například zámek obrazovky slock, dynamické menu dmenu nebo port uživatelských aplikací z Plan 9 nazvaný 9base. Suckless má desítky tisíc uživatelů po celém světě a desítky vývojářů.

Filozofie suckless

Základy suckless se dají shrnout známými poučkami KISS (Keep It Simple Stupid), méně je více a horší je lepší (worse is better). Suckless software se snaží být co možná nejjednoduší se zachováním korektnosti, čitelnosti a použitelnosti. Zároveň zakládá na unixových principech jako například na známém: „Pište programy, které dělají jednu věc a dělají ji pořádně.“ (Doug McIllroy). Tím se zcela jasně odlišuje od moderního přístupu k tvorbě software, který si v běžné praxi váží zcela jiných atributů.

Základními metrikami „smrdutosti“ software jsou počet řádků kódu, programovací jazyk a použité technologie.

Počtem řádků kódu se rozumí něco jiného než součet počtu řádků všech zdrojových souborů. V prvním případě se bavíme o počtu logických řádků, v druhém případě pak o počtu fyzických řádků. Logických bývá méně než fyzických, které zahrnují spousty prázdných řádků a komentářů, ale někdy může jeden fyzický řádek kódu pojmout více logických řádků. V extrémním případě je (ve většině programovacích jazyků) možné napsat celý program na jeden fyzický řádek. Z toho důvodu je vhodnější pro měření počtu řádek používat speciální nástroje jako například sloccount.

Dle suckless by software měl být tak malý co se týče počtu logických řádků, aby plnil svou funkci, byl dobře čitelný a zcela korektní, ale neměl žádný kód, který nutně nepotřebuje. Jednoduše, čím menší, tím lepší. Důmyslné myšlenky jsou jednoduché a stejně takový by měl být i software. Suckless také chápe odstraňování kódu jako vývoj (zvláště pokud se odstraněním kódu nezmění funkčnost, použitelnost, čitelnost nebo korektnost programu). Vysoký počet řádků kódu indikuje vysokou složitost software, špatný návrh, množství chyb (bugů) a náročnou údržbu.

Programovací jazyk zvolený pro implementaci daného software také vypovídá o kvalitě software, i když pouze nepřímo. Čím více se použitý programovací jazyk blíží k suckless ideálům, tím je pravděpodobnější, že software implementovaný v takovém jazyce bude sdílet tyto ideály. Komunita suckless například odvrhuje nejběžnější programovací jazyky Java a C++ a přijímá jazyk C. Nevhodně zvolený programovací jazyk zavádí zbytečnou složitost vedoucí na náročnou údržbu a potřebu návrhových vzorů, kterými suckless také opovrhuje.

Dalším měřítkem je také enumerace využitých technologií a jejich soulad s ideály suckless. Například nežádoucí je využití XML, ruby, WebDAV, autoconf či SQL. Na druhou stranu, méně opovrhovanými technologiemi jsou plain text, JSON, CSV, IRC, souborový systém, nebo awk. Encyklopedii věcí, které suckless považuje za škodlivé, je dostupná online na adrese harmful.cat-v.org. Na ostatní lze použít tyto metriky a kritickou mysl.

Projekt dwm

Tiling window manager (správce oken) dwm je vlajkovou lodí suckless. Převzal tuto roli po předchozím správci wmii, který stejně tak zastoupil wmi. Dwm je tedy vrcholem evoluce a aktuálně se považuje za dokončený a hotový. V budoucnu se  ještě můžeme dočkat přepisů na jiné platformy než X11, ale seznam featur se již nerozšiřuje a většina modifikací je šířena jako komunitní patche na suckless wiki.

Projekt začal v roce 2006 a jde o klasického dlaždicového správce oken, umožňující uživateli spouštět, zobrazovat a zavírat okna programů. Dwm má dva zajímavé charakteristické rysy. Nemá žádný konfigurační soubor a má méně než 2000 řádků kódu.

Konfigurace se děje úpravou hlavičkového souboru a následnou kompilací. Takováto konfigurace kompilací má samozřejmě nevýhodu v tom, že je správce oken potřeba rekompilovat a restartovat po každé konfiguraci, ale to nutně neznamená, že je potřeba zahazovat celé sezení. Na druhou stranu takovýto postup má výhodu v tom, že uživatel získává mnohem větší jistotu stability prostředí. Pokud prošla kompilace, už není téměř žádný důvod, aby měl správce nějaké problémy za běhu. Zde je jasně vidět orientace na pokročilé uživatele.

Velikost dwm je autory shora omezena na 2000 logických řádek kódu. Projekt tedy nikdy nemůže přerůst tuto hranici a preemptivně se tak brání přílišnému bobtnání.

Zajímavostí je také způsob užití takzvaných tagů. Ty slouží podobně jako virtuální plochy, ale jde o jiný koncept. Dwm má při startu konfigurací definovaný počet tagů. Každé okno náleží přesně k jednomu tagu. Klávesovými zkratkami pak uživatel může vyjádřit, které tagy chce mít aktuálně zobrazené.

Projekt st

Suckless komunita se zaměřuje na pokročilé uživatele, takže po správci oken se dalo očekávat řešení emulátoru terminálu. Mezi nejméně špatné terminály momentálně patří rxvt či xterm. Oba mají však k suckless dost daleko (zvláště pak suckless nenáviděný xterm), a tak vznikl projekt st. Jeho vývoj započal v roce 2008 a na vývoji se podílí více než 20 vývojářů.

Během posledních let se terminál velmi stabilizoval a dnes je již možné ho bez nejmenších potíží používat v běžné (i profesionální) praxi. Počet logických (i fyzických) řádků kódu se u st blíží ke čtyřem tisícům a zdá se, že dále již projekt významně neporoste (spíše se dá očekávat zmenšování). Jednou ze zajímavých schopností st je použití truetype fontů a možnosti škálování velikosti textu za běhu, jako je běžné u megalomanských terminálů typu gnome-terminal či konsole. Stejně jako u dwm se st konfiguruje úpravou zdrojového kódu a kompilací.

Projekt sta.li

Pokud aplikujeme suckless principy na dnešní operační systémy, zjistíme, že téměř žádný operační systém se ani vzdáleně nepodobá těmto ideálům. Světlou výjimkou je snad jen OpenBSD či Plan 9. Problém suckless vidí mimo jiné v užití dynamického linkování, v obrovské glibc a dalším GNU software a také v překryvu schopností programů.

Na základě dlouhých diskuzí na mailing listu suckless vznikl návrh na nový typ operačního systému nazvaný stali. Ten by měl obsahovat pouze staticky linkované programy, minimalistické libc knihovny, pečlivě vybrané suckless programy a měl by opět být určen především pro pokročilé uživatele. Bohužel, tento projekt se ukázal být velmi náročným kvůli potížím se statickým kompilováním (které je dnes natolik opomíjené, že je někdy náročné program staticky zkompilovat). Svoji roli taky hraje nutná shoda názorů v komunitě, která je k mnoha návrhům velmi kritická a projekt tak postupuje velmi pomalu.

Stali se podobají distribuce Alpine a Bitfrost, z nichž si Stali převzalo některé nápady. Poněkud volnější implementací Stali se stal staticky kompilovaný Archlinux, nazvaný Starchlinux.

Ostatní

Suckless tvoří, zastřešuje a inspiruje množství dalších projektů. Namátkou například:

bitcoin školení listopad 24

  1. surf – minimalistický webový prohlížeč postavený na webkitu s ovládáním podobným vimperátoru.
  2. dmenu – jednoduché dynamické menu určené pro výběr programů a souborů z nabídky.
  3. 9base – port uživatelských aplikací ze systému Plan 9.
  4. tabbed – obecné rozhraní karet (tabů), běžně užívané ve spojení s prohlížečem surf nebo terminálem st.
  5. slock – velmi minimalistický zámek obrazovky.
  6. dvtm – tiling window manager pro textové prostředí.
  7. dtach – aplikace umožňující odpojení a zpětné připojení programu z terminálu (podobné gnu screen detach).
  8. sltar – reimplementace tar archivátoru.
  9. ii – miniaturní IRC klient, užívající souborový systém pro interakci.
  10. sandy – zajímavý textový editor.

Pokračování

V tomto článku jsme se dozvěděli základní informace o projektu Suckless a podívali jsme se velmi zběžně na několik důležitých suckless projektů. Každý ze zmíněných projektů by si však zasloužil vlastní článek a stejně tak bychom se mohli samostaným článkem věnovat metodologii psaní suckless software.

V příštím článku si podrobněji prohlédneme správce oken dwm, který se naučíme konfigurovat, kompilovat a používat.

Odkazy

Autor článku

Martin Kopta je absolventem ČVUT FEL, kde studoval systémové programování a od roku 2010 se věnuje profesionální programátorské praxi. Zajímá se o unixové systémy, programátorské techniky a technologie.