„Unveränderliche“ Linux-Distros, Teil 7 NixOS: Der Immutable-Standard

Von Christian Rentrop 4 min Lesedauer

Anbieter zum Thema

Wer Immutable-Linux denkt, meint oft NixOS: Das Linux-System ist der Quasi-Standard im Immutable-Bereich, weil es einerseits schon lange verfügbar ist und andererseits hochflexibel eingerichtet werden kann. Ideal für Software-Entwicklerinnen und -Entwickler.

Der deklarative Ansatz von NixOS erlaubt es, standardisierte Maschinen bereitzustellen per Konfigurationsdatei.
Der deklarative Ansatz von NixOS erlaubt es, standardisierte Maschinen bereitzustellen per Konfigurationsdatei.
(Bild: Rentrop / NixOS.org)

Im Feld der Immutable-Linux-Distributionen hat sich NixOS (https://nixos.org/) einen erstaunlichen Ruf erarbeitet: Das System wird nicht selten in einem Atemzug mit den großen klassischen Distros genannt und ist das Vorbild, an dem sich andere unveränderliche Distributionen messen lassen müssen.

<p>Über die <u><a href=https://search.nixos.org/packages>Paketsuche von NixOS</a></u> finden sich über 80.000 Anwendungen.</p>

Über die Paketsuche von NixOS finden sich über 80.000 Anwendungen.

(Bild: Rentrop / NixOS.org)

Ein Grund für die hohe Popularität ist einerseits die Tatsache, dass es sich, anders als bei den meisten anderen Immutable-Systemen, um eine gänzlich eigenständige Distribution ohne klassisches Vorbild handelt. Andererseits wäre da der namensgebende Nix-Paketmanager, der über 80.000 Pakete in das System holen kann.

Nix ist das Gegenteil von Nichts

Die größte Stärke von NixOS ist natürlich, dass das System und der Nix-Paketmanager von einer großen Entwickler-Community und namhaften Unternehmen unterstützt oder verwendet wird. Dadurch ist es das wohl größte Immutable-Linux-Projekt überhaupt – ein großer Vorteil, wenn es um die Dokumentation, den Support, die Geschwindigkeit der Weiterentwicklung und Pflege von Features geht.

Der zweite große Vorteil ist technisch begründet: NixOS besitzt eine deklarative Konfiguration, Atomare Updates und Rollbacks, besitzt eine zuverlässige Paketisolierung und bietet wie gesagt Support für eine enorme Anzahl von Software-Paketen. Das bedeutet, dass NixOS sich nicht auf Flatpaks oder ähnliche Drittlösungen verlassen muss. Stattdessen kann Software bequem über Nix installiert und gelöscht werden.

All diese Eigenschaften allein machen NixOS zu einer hervorragenden Wahl für technisch versierte Nutzer, seien es Administratoren oder Entwickler. Richtig interessant wird es aber erst, wenn man sich dem deklarativen Ansatz von NixOS widmet.

Beliebige Reproduktion

Über die Konfigurationsdatei configuration.nix in /etc/nixos/ kann ein System schnell zum Beispiel mit einer neuen Desktop-Umgebung oder proprietären Treibern (sofern diese von der Nix-Community gepflegt werden) ausgestattet werden, einfach indem eine Zeile in der Konfiguration geändert wird. Anschließend wird das System mit dem Befehl sudo nixos-rebuild switch neu gebaut.

Software-Installationen sind auf diese Weise über die configuration.nix möglich: Wird hier ein Programm hinzugefügt, kümmert sich NixOS via Nix-Paketmanager automatisch um die Installation. Wird es aus der Datei entfernt, wird es automatisch von NixOS deinstalliert. NixOS erlaubt auch Testläufe, um eine Konfiguration risikofrei zu testen.

In der Praxis ist das ausgesprochen nützlich, da sich das System über diese Konfigurationsdatei beliebig reproduzieren lässt. Das erleichtert die Installation auf größeren Rechner-Umgebungen oder auch als Entwickler-VM deutlich. Umgekehrt ist ein Backup des Systems – nicht jedoch der Daten – nur über diese Datei möglich, da es sich jederzeit mit der configuration.nix wiederherstellen lässt. Gleichzeitig lässt sich durch einfaches Kopieren oder Umbenennen einer Backup-Datei jederzeit ein bestimmter Status des Betriebssystems wiederherstellen.

Leistungsstarke Paketisolierung

Besonders die Paketisolierung des Nix-Paketmanagers macht Nix so interessant für Entwickler: Die Pakete sind in sich geschlossen, als einzelne Dateien mit den nötigen Abhängigkeiten. NixOS überschreibt nichts. Wird ein Paket kompiliert, ist es „geschlossen“, wird es aktualisiert, legt NixOS ein neues Paket an und archiviert den Vorgänger.

Verschiedene Abhängigkeiten oder Bibliotheken werden mittels Hash-Werten unterschieden und bei Bedarf entsprechend der Anforderungen der Software verwendet. Das kann angesichts der teils kryptischen Bezeichnungen etwas verwirren und kostet mitunter viel Speicherplatz, bietet aber Vorteile: Zum Beispiel lassen sich verschiedene Versionen ein und derselben Software aufsetzen.

Dank dieser Eigenart sind Softwarepakete auch beliebig auf andere NixOS-Installationen übertragbar, wodurch sich ein großer Vorteil bei der Software-Entwicklung und dem Deployment ergibt. Wenn nötig, darf natürlich mittels Garbage Collector „ausgemistet“ werden, um Speicher zu sparen.

Flakes: Pakete fest verzurren

Für Entwickler besonders interessant sind in diesem Zusammenhang die sogenannten Flakes: Nix kommt mit einer hauseigenen Nix-Programmiersprache, einer sehr einfach gehaltenen funktionalen Umgebung, um Pakete zusammenzustellen.

Flakes sind im Prinzip Sourcetrees, ähnlich einem Git-Repository, die eine Datei namens „flake.nix“ enhalten. In dieser werden standarisiert Nix-Artefakte wie Pakete oder Module festgehalten. Hier werden Abhängigkeiten explizit benannt und per nix.lock festgehalten, wodurch Pakete einheitlich sind. Software kann auf diese Weise „fest verzurrt“ weitergegeben werden.

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu Softwareentwicklung und DevOps

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung.

Aufklappen für Details zu Ihrer Einwilligung

NixOS-Updates: Jederzeit zurück

Auch bei Updates ist NixOS als Immutable-System sehr robust. Zunächst gibt es keine automatische Update-Funktion, wobei diese mittels Eintrag in der Konfigurationsdatei nachgerüstet werden kann. Das bedeutet allerdings, dass NixOS den Anwender standardmäßig auch nicht mit Updates belästigt, die bei anderen Linuxen unvorsichtig eingesetzt möglicherweise die Paketabhängigkeiten zerschießen. Dadurch ist das System extrem zuverlässig.

Beim Update hat NixOS noch eine interessante Eigenschaft: Das System wird über sogenannte Channels aktuell gehalten. Diese sind für die jeweilige NixOS-Version eingestellt, etwa 23.11. Kommt eine neuere Version heraus, können Nutzer entweder bei ihrem Versionschannel bleiben – oder den „Kanal wechseln“ und das Upgrade auf die neueste Version einspielen. Der Kanalwechsel ist dabei nur einen Handgriff in der Kommandozeile entfernt. Wie üblich bei Immutable-Systemen bleibt die Ursprungskonfiguration dabei erhalten – und kann beim Start ausgewählt werden.

Fazit: An NixOS kommen Entwickler kaum vorbei

Eine große Community, breite Unterstützung durch Entwickler und Industrie, zahlreiche intelligente Features für die Software-Entwicklung: NixOS ist ein Linux, das für sich steht und Entwicklern das Leben leichter machen kann. Die Dokumentation wiederum hilft nicht in jedem Fall weiter.

Dank der deklarativen Struktur und der Möglichkeit, Nix-Packages fest zu verzurren, ist NixOS nicht nur sehr stabil, sondern gleichzeitig auch flexibel einsetzbar. Übrigens: Nix geht auch ohne Linux, der Paketmanager ist auch für Windows, MacOS und als Docker-Image erhältlich.

###Bilder: NixOS, NixOS-Packages

(ID:49979254)