Suckless: czym jest "mniej okropne oprogramowanie"?

Strona główna Aktualności
Suckless: czym jest "mniej okropne oprogramowanie"? (fot. Jason Scott CC BY 2.0)
Suckless: czym jest "mniej okropne oprogramowanie"? (fot. Jason Scott CC BY 2.0)

O autorze

W niektórych linuksowych kręgach do znudzenia możemy nasłuchać się o tzw. filozofii Uniksa. Jest to metodyka tworzenia oprogramowania, wedle której każdy ma być mały, robić tylko jedną rzecz i komunikować się ze światem za pomocą strumieni. Najlepiej nieopakowanych w żaden protokół. Filozofia Uniksa ma wiele zalet, zwłaszcza patrząc z perspektywy okoliczności, w jakich powstał sam Unix. Ma też sporo wad, dotkliwych dla użytkowników, ale i programistów.

Jedną z nich jest na przykład to, że świat wyewoluował w zupełnie innym kierunku. Niezależnie od teoretycznej słuszności uniksowego podejścia do interfejsów, atomizacji i skalowalności, faktem jest że jesteśmy otoczeni oprogramowaniem kompletnie nieuniksowym. Intensywnie korzystamy z przeglądarek internetowych, ogromnych programów do wszystkiego, pozornie tylko realizujących jedno zadanie. Łączymy się z usługami, które nie dbają o uwspólnianie swojego stanu, bo są komercyjne i ich twórcom na tym nie zależy. I tak dalej.

Wdrożenie uniksowego podejścia do niektórych nowoczesnych scenariuszy staje się już niemożliwe. Zresztą, czasem jest niewskazane, bo pochodząc z innych czasów, serwuje dziś dziury w zabezpieczeniach. Nie należy więc wprowadzać go za wszelką cenę, z powodów ideowych lub estetycznych.

"software that sucks less"

Niemniej, istnieje szereg scenariuszy, w których przydałoby się dziś więcej staromodnego myślenia. Doprowadziło to do powstania chóru malkontentów, przekonanych o powszechnej niekompetencji i lenistwie programistów. Na szczęście jednak, miały też miejsce konstruktywne rzeczy, jak projekt suckless. Jest to inicjatywa mająca na celu dostarczenie minimalistycznego oprogramowania a także zbiór wytycznych i sposób "patrzenia na świat" z wykorzystaniem radykalnej formy filozofii KISS. Dlaczego radykalnej? Ponieważ bliżej jej do systemu Plan9 niż do dzisiejszych Linuksów.

Suckless dostarcza oprogramowanie działające na głównych rodzajach "mniej-więcej-Uniksa", jak FreeBSD, GNU+Linux i macOS. Składa się z kilkudziesięciu składników, niektórych całkiem ambitnych, ale najpopularniejsze to menedżer okien DWM, terminal st oraz przeglądarka internetowa surf. DWM zasługuje na oddzielną publikację, jest bowiem tak egzotyczny, dziwny i przynajmniej początkowo) nieintuicyjny, że aktywnie przeszkadza w pracy użytkownikowi nieskoremu do reedukacji. To ogólna tendencja w programach suckess, ale w DWM widać ją w szczególności.

Terminal

O wiele lepszym (i mniej zniechęcającym) przykładem wydaje się być emulator terminala st. Jest to program, który powstał, bo… xterm uznano za bloatware. Tak jest. Nie GNOME Terminal, nie Konsole, a xterm. Malutki, antyczny emulator dołączany do X11, tak stary że nie korzysta z żadnych widgetów i miewa problemy z Unicode.

To zdumiwające, ale argumenty za tym, że xterm jest za ciężki istnieją i są nawet niezłe. Program dostarcza emulację urządzeń które nie mają dziś żadnego sensu, jest długi, a jego kod od dawna nie był sprzątany i zamiast tego otrzymuje jedynie setki łatek serwisowych.

Dla porównania, st jest dziesięciokrotnie mniejszy (po zbudowaniu) i około dwudziestokrotnie mniejszy (jako kod źródłowy) niż xterm. Rozwija się znacznie wolniej i ma listę istotnych braków ujętą w pliku TODO, ale z kolei xterm otrzymuje aktualizacje co miesiąc, a kompletnie tego po nim nie widać. Pod wieloma względami st przebija więc referencyjny terminal X11: choć nie obsługuje zakładek, dynamicznej zmiany rozmiaru i profili ustawień, jest pełnoprawnym emulatorem, radzi sobie doskonale z Unicodem (nawet z Emoji!), będąc przy okazji bardzo szybkim.

Ustawienia? Jeszcze czego!

Wymowną cechą st jest brak obsługi ustawień. Jeżeli chce się zmienić profil kolorystyczny, konieczne jest naniesienie zmian na config.h i przebudowanie pliku. Przesada? Może trochę, ale zadajmy sobie pytanie: jak często zmieniamy motyw kolorystyczny terminala? Zazwyczaj wybieramy jeden, odpowiedni dla nas, i tak już pozostawiamy. Terminal st implementuje właśnie taki scenariusz, usuwając wczytywanie własnych plików konfiguracyjnych i parametrów wiersza poleceń.

To idealny przykład ekstremizmu suckless. Istotnie, wygląd terminala zmieniamy rzadko, ale już na przykład podczas prezentacji albo zdalnych sesji, warto móc coś szybko pokazać i np. zwiększyć rozmiar czcionki w locie, dynamicznie. Program st na to nie pozwala. Istnieją jednak scenariusze "codzienne" w których nie stanowi to problemu…

Przeglądarka bez interfejsu

W kwestii przeglądarek internetowych, suckelss oferuje program surf. W zasadzie nie jest to niezależna przeglądarka, a sposób obrabowania silnika WebKit z interfejsu użytkownika. Surf nie oferuje nic, nawet paska stanu (zamiast niego wykorzystuje obramowanie okna). Zakładki? Lepiej trzymać je we własnoręcznie zbudowanym menu. Karty? Po co, wystarczy otworzyć nowe okno. I tak dalej.

Bez wątpienia surf unaocznia, jak mocno rozrosły się przeglądarki internetowe i do jakiego stopnia, mimo że teoretycznie służą tylko do jednego, robią/umieją zbyt wiele. Niestety, podejście stosowane przez surf jest w pewnym stopniu zaklinaniem rzeczywistości. Tak, byłaby to doskonała przeglądarka internetowa… gdyby strony internetowe istniały dziś w formie, w której wymyślono je trzy dekady temu. Dziś przydają się menedżery haseł, wtyczki do zblokowania skryptów śledzących, panele deweloperskie dla kodu i plików cookies (szczególnie gdy tworzymy strony) i tak dalej.

Bez nich, przeglądanie internetu jest nie tylko trudniejsze, ale i po prostu mniej bezpieczne. A to jest już szkodliwy poziom wyrzeczeń. Możemy oczywiście wyrzec się stosowania stron z cięższym JavaScriptem, logowaniem OAuth, reklamami i formantami śledzącymi, ale to trudne. Nie rozliczymy w ten sposób podatków, nie sprawdzimy konta bankowego i nie podejrzymy naszych recept.

Znacznie więcej małych rzeczy

Wśród pozostałych projektów suckless znaleźć można kilka z cyklu "pie in the sky", czyli zupełnie nieosiągalnych, teoretycznych pomysłów. Należą do nich równoległy menedżer startowy stali+sinit (wszak systemd jest zaprzeczeniem suckless) oraz zastępstwo dla udev (!). Programy te są istotne głównie dlatego, że dobrze wiedzieć, że da się je jeszcze stworzyć. Gdyby stos uniksowy "odjechał" na tyle daleko, że np. systemd byłoby uniwersalnie nieodzowne, moglibyśmy mieć problem.

Ale są też mniejsze zabawki, jak klient czatu ii, bardzo ciekawy program do IRC oparty o kolejki plikowe FIFO (mimo wszystko polecam jednak bardziej irssi). Nie powinien także umknąć naszej uwadze program sent, służący do konwertowania podstawowego markdownu na przezrocza, zgodne z metodyką Tahakashiego. Wiele dobrego można powiedzieć o takim podejściu do tworzenia slajdów (a także o stosowaniu foliowych przezroczy zamiast PowerPointa), ale należy mieć na uwadze, że Markdown przegrywa np. przy równaniach matematycznych i tabelach. Ale na pewno warto spojrzeć w tym kierunku.

Niektóre z powyższych programów są spakowane i dostarczane w repozytoriach dystrybucji linuksowych (co nieco przeczy ich intencji), większość wymaga samodzielnego sklonowania przez git oraz zbudowania. Zazwyczaj nie ma skryptu automatycznej konfiguracji i można od razu lecieć z make. Budowa programów trwa dosłownie sekundy.

Dajcie nam znać w komentarzach, czy przemawia do Was metodyka suckless.

© dobreprogramy
s