Guix választása Nix helyett

A linuxos csomagkezelés világában két innováció történt az emúlt években. Az egyik a konténerizált csomagok, a másik pedig a funkcio­nális csomag­kezelés. Az utóbbi ötlet kipattanásából lett a Nix, én mégis ennek az ötletnek a másolatát, a Guixet választottam.

A tisztán funkcionális csomagkezelés lehetősége Eelco Dolstra holland informatikus fejéből pattant ki. Ennek a kidolgozását ő papírra is vetette, egy 281 oldalas PhD dolgozatot készített belőle az Utrechti Egyetemen. Dióhéjban összefoglalva a különböző csomagokat egyedi hashhel kell ellátni, amiket az adott csomag összeállításához szükséges szoftverkomponensekből kell számolni. A különböző csomagokat egy funkcionális programozási elveket tiszteletben tartó nyelvvel kell leírni, ami biztosítja, hogy az adott szoftverkomponensekből építkezve mindig ugyanaz lesz az eredmény. Ha bármi megváltozik egy csomagban, akkor az egyedi hash is más lesz, ezért tökéletesen elkülönül a korábbi csomagtól.

Ezeknek az elveknek a megvalósítása után egy olyan csomagkezelőt kapunk, ami a következőket maradéktalanul teljesíti:

  • több verzió egyidejű telepítése

  • teljes függőségfeloldás

  • nem csak rendszerszintű, hanem felhasználó szintű csomagtelepítés is

  • elvágólagos frissítések

  • szemétgyűjtés

  • átlatható és reprodukálható programfordítás

Ez mind nagyon jól hangzik, de jöjjenek a hátrányok is. A Nix csak az elveket kölcsönzi a funkcionális programozásból, a programnyelvet nem, hanem kitalált magának egy újat. Egy annyira újat, hogy még a szintaktikája sem hasonlít semmire. Ha az ember úgy dönt, hogy megtanulja, akkor el kell fogadnia azt a tényt, hogy soha sehol máshol nem fogja ezt a tudást kamatoztatni. Ezzel el is érkeztünk az első problémához a Nixszel kapcsolatban.

A második probléma, hogy a Nix projekt lassú, különösen ahhoz a népszerűséghez képest, ami körülveszi. A Nixnek 2 éve van egy fantasztikus megoldása, ami végre 2023-ban kikerül a kísérleti stádiumból. Ez pedig a Nix Flake. Ez egy annyival jobb módszer a különböző csomagok, rendszerek, felhasználói környezetek definiálására, hogy a közösség nagy része úgy gondolja az új felhasználóknak nem is érdemes mást tanítani. De mivel ez a megoldás még mindig nem lett hivatalosan stabillá nyilvánítva, ezért a hivatalos dokumentációkban még nem lehet kizárlóag ezt oktatni.

De, ami a hivatalos projekt kezét megköti, az nem érvényes az egyéb, gyakran profitorintált kezdeményezések kezét. Az egyik ilyen startup cég a Determinate Systems, ami 2023. januárjában megjelentette a Zero to Nix dokumentációs csomagját. Hogy mi volt a Nix projekt válasza erre? A dokumentációs csapatot vezető fejlesztő lemondott, mivel úgy érezte, hogy a Determinate Systems inkább viszi előre a saját cégét, mint az egész Nix projektet.

A Nix körüli ambiciózus startupokból nincs hiány. Ott van a Cachix, ami csomagoló kiszolgálókat üzemeltet, és ezen kívül a Devenv megoldást fejleszti és népszerűsíti. Vagy ott van a FloxDev Inc., ami a hasonló nevű Flox programot tolja.

Ezek alapján azt látom, hogy a Nix, mint közösségi projekt bajban van. Hihetetlen lehetőségek rejlenek benne, de azok, akik át tudják magukat küzdeni a meredek tanulási görbén, inkább alapítanak egy céget, és egy saját termékbe teszik a jobbító ötleteiket, ahelyett, hogy a Nix projektet vinnék előre.

Erre a két problémára megoldás a Guix. A Guix a többi GNU projektben is használt Scheme programozási nyelvet kibővítő Guile-t használja. A Scheme és a Common Lisp pedig népszerű funkcionális programozási nyelvek, aki hajlandó megtanulni őket, az később is sok hasznát veszi. A GNU projekthez való kötődés pedig egy elég erős garanciát ad arra, hogy ha valaki hajlandó elmerülni a Guixben, akkor utána nagy valószínűség szerint vissza is fog adni a közösségbe.

De nyílván nem fenékig tejföl a Guix sem. Jóval kevésbé népszerű, mint a Nix, ezért sokkal kevesebb csomag, és sokkal rendszertelenebbül karbantartott csomag található meg benne. Tökéletes példa, hogy PHP-ból nem volt 8-as verzió egészen idén februárig. Ez 3 év késés, és imagemagick könyvtár mind a mai napig nincs hozzá. A Guixnél ráadás nehezítés, hogy a fejlesztés a GNU hagyományoknak megfelelően történik. A Git tároló nem a Github, hanem a git.savannah.gnu.org, és a pull requestek helyett levelezőlistára küldött patchekkel történik a fejlesztés.

Mindezek ellenére egészségesebbnek látom a Guix mögött álló közösséget, és a csomagkezelésemet és a linuxos operációs rendszeremet is lecseréltem Guixre.