Updates von Linux-Distributionen sind immer mit einer gewissen Gefahr verbunden. Werden alle konfigurierten Dienste nach der Aktualisierung noch genauso funktionieren wie vorher? Oder hat wieder einmal ein Daemon das Format seiner Konfigurationsdateien so geändert, dass das Programm überhaupt nicht mehr startet? Zumindest sind die meisten Linux-Distributionen so intelligent, die vom Anwender geänderten Config-Dateien nicht einfach zu überschreiben. Aber einen definierten Upgrade-Pfad, der die Funktion des aktualisierten Systems sicherstellt, gibt es meistens nicht.
Einen alternativen Weg dazu beschreitet das Nix-Projekt, das einen speziellen Paketmanager, eine Paketsammlung, eine Linux-Distribution und noch zwei weitere Tools umfasst, die hier keine Rolle spielen. Ein Nix-System unterscheidet sich in einigen Punkten fundamental von gewohnten Linux-Distributionen. So wird der Zustand des Systems deklarativ festgelegt, statt imperativ, also durch die Eingabe von Anweisungen wie "installiere jetzt Software-Paket X" den Systemzustand zu ändern. Gleichzeitig gehorchen die Anweisungen des Nix-Paketmanagers funktionalen Prinzipien: Es gibt einen Eingabezustand, der in die Funktion (den Paketmanager) eingegeben wird, und als Ausgabe einen neuen Systemzustand. Sogenannte Seiteneffekte sind dabei nicht erlaubt.
Konfigurationsänderungen in NixOS sind atomar und transaktional, werden also entweder korrekt ausgeführt oder gar nicht. Auch Rollbacks zu einem früheren Systemzustand sind möglich. Eine neue Konfiguration lässt sich sogar im aktuellen System testen, ohne sie gleichzeitig zur Standardkonfiguration beim nächsten Booten zu machen. Beim erfolgreichen Ablauf einer Transaktion aktualisiert Nix im letzten Schritt eine ganze Reihe von Referenzen, konkret symbolische Links, mit denen sich der Anwender in einer komplett neuen Umgebung wiederfindet. Der alte Systemzustand ist weiterhin auf dem Rechner vorhanden, nur die Referenzen wurden aktualisiert.
Grundsätzlich übersetzt Nix Pakete aus dem Quellcode, um sie an das System anpassen zu können. Da dies viel Zeit kostet, lädt der Nix-Paketmanager aber automatisch Binärpakete von der NixOS-Website, wenn es sie gibt. Als kleinen Bonus bietet NixOS zum Ausgleich die Möglichkeit, Pakete auch als Nicht-Root-Benutzer in einem eigenen Bereich zu installieren. Außerdem können mehrere Versionen einer Software oder Bibliothek gleichzeitig auf dem System existieren.
Der Nix-Paketmanager lässt sich grundsätzlich auch auf anderen Linux-Distributionen wie auch FreeBSD und OS X verwenden. Allerdings bilden die mit Nix installierten Pakete dann auf diesen Systemen eine Art Paralleluniversum, das seine Pakete unterhalb von »/nix/store
«
pflegt. Binär-Downloads der aktuellen Nix-Version 1.6.1 gab es zu Redaktionsschluss beispielsweise für Debian 7.2, Ubuntu 13.10, Fedora 19, FreeBSD und OS X, um nur die aktuellen Versionen zu nennen. Generische Binärpakete für Linux sowie der Source-Code sind auf der Website ebenfalls zu finden.