NixOS jako imutabilní systém

V tradičních Linuxových distribucích (Debian, Ubuntu, Arch Linux) je souborový systém vysoce dynamický a mutabilní (měnný). Správce balíčků nebo uživatel s právy root může kdykoliv přepsat soubory v `/usr/bin`, změnit konfiguraci v `/etc` nebo aktualizovat sdílenou knihovnu v `/lib`. Tento přístup s sebou ale nese rizika v podobě nekonzistence, závislostního pekla (Dependency Hell) a nestability po aktualizacích.

NixOS k tomuto problému přistupuje zcela revolučně a implementuje koncept imutabilní (neměnné) infrastruktury přímo na úrovni běžícího operačního systému.

Princip imutability v NixOS

Neměnnost v NixOS neznamená, že na disk nelze zapisovat. Znamená to, že jednou zapsané systémové komponenty a aplikace již nelze modifikovat. Pokud je vyžadována změna, nevzniká úprava stávajícího souboru, ale vytváří se soubor úplně nový.

Tento koncept stojí na dvou klíčových mechanismech:

1. Neměnné úložiště /nix/store

Všechny systémové balíčky, knihovny, ovladače i konfigurační skripty jsou uloženy v adresáři `/nix/store`. Tento adresář je operačním systémem namontován striktně v režimu pouze pro čtení (read-only).

Každý balíček má svůj vlastní izolovaný podadresář, jehož název obsahuje kryptografický hash:

/nix/store/5h8m3n8z...-nginx-1.24.0/
/nix/store/xd7j9q4p...-openssl-3.0.8/

Hash se počítá ze všech vstupů balíčku (zdrojový kód, závislosti, flagy překladače). Pokud by se změnila byť jen jediná řádka v konfiguraci při kompilaci Nginxu, výsledkem bude jiný hash a balíček se zapíše do úplně jiného adresáře. Stávající funkční Nginx zůstane nedotčen.

2. Symbolické odkazy (Symlinks) jako architektura systému

Protože adresář `/nix/store` obsahuje stovky izolovaných verzí programů, systém je skládá dohromady pomocí stromu symbolických odkazů.

Standardní adresáře jako `/bin` nebo `/usr/bin` v NixOS vůbec neexistují (s výjimkou `/bin/sh`, který je zachován kvůli kompatibilitě skriptů). Místo toho má systém aktuální stav (tzv. generaci) nasměrovaný pomocí symlinků přímo do konkrétních složek v `/nix/store`.

Při změně konfigurace nebo aktualizaci se v `/nix/store` sestaví nové komponenty a systém pouze „přepne“ hlavní symbolický odkaz na novou generaci. Tento proces je atomický – buď proběhne celý úspěšně, nebo se nestane nic.

Adresář /etc a správa konfigurace

V běžném Linuxu je `/etc` centrem mutability, kde se soubory neustále přepisují. V NixOS je většina souborů v `/etc` (např. `/etc/ssh/sshd_config`) pouhým symbolickým odkazem vedoucím do read-only úložiště `/nix/store`.

Pokud se pokusíte upravit soubor v `/etc` ručně, editor vám nahlásí, že soubor je určen pouze pro čtení. Jediným legálním způsobem, jak změnit konfiguraci, je upravit deklarativní soubor `/etc/nixos/configuration.nix` a nechat systém přegenerovat novou sadu symlinků.

Výhody imutabilního přístupu

Výhoda	Popis
Eliminace závislostního pekla	Dvě různé aplikace mohou běžet současně, i když vyžadují odlišné (a vzájemně nekompatibilní) verze stejné systémové knihovny. Každá si sahá do svého adresáře v `/nix/store`.
Instantní Rollback (Návrat zpět)	Pokud nová generace systému selže, v bootloaderu při startu jednoduše šipkou zvolíte předchozí generaci. Systém nastartuje do stavu před aktualizací, protože staré soubory v `/nix/store` stále fyzicky existují.
Samočisticí systém (Garbage Collection)	Smazáním aplikace z konfigurace se neodinstalují soubory okamžitě. Jakmile ale spustíte příkaz `nix-collect-garbage`, systém projde symlinky, zjistí, které balíčky v `/nix/store` už žádná generace nepoužívá, a bezpečně je smaže.

Kam se ukládají uživatelská data?

Imutabilita se týká jádra, systému a aplikací. Uživatelská data v `/home`, proměnná data v `/var` (např. databáze, logy) a runtime soubory v `/run` samozřejmě zapisovatelné jsou.

Pro pokročilé vyznavače čisté imutability nabízí NixOS komunitní koncepty jako Erase Your Darlings (Vymaž své miláčky). Při tomto nastavení se celý kořenový souborový systém (`/`) při každém restartu kompletně smaže (běží např. v paměti RAM nebo se obnovuje z prázdného snapshotu souborového systému Btrfs/ZFS). Trvale se ukládají (perzistují) pouze vybrané explicitně definované složky jako `/home` nebo `/var/lib/postgresql` pomocí technologie zvané Impermanence.

Související články:

Úvod do operačního systému NixOS

Infrastruktura jako kód (IaC)

Srovnání souborových systémů: Btrfs, ZFS a role v imutabilitě

Tagy: tag>linux nixos immutability devops architecture systems_administration