# Nix (Paketmanager)

Nix ist ein Paketmanager für unixoide Systeme und mit RPM, APT und vielen anderen Paketmanagern vergleichbar. Er ist in der Lage, die Installation von Paketen (benannte und mit Versionen versehene Gruppen von Dateien, z. B. Software oder deren Konfigurationsdaten) zu kontrollieren. Im Gegensatz zu fast allen anderen Paketmanagern ist Nix für den Einsatz in verschiedenen Distributionen und Betriebssystemen (zur Zeit Linux und OS X) vorgesehen. Nix verwaltet ausschließlich deterministische Kompilate. Die Entwicklung von Nix wird von der NixOS Foundation, einer Stiftung niederländischen Rechts, vorangetrieben. Diese richtet auch die NixCon, eine Konferenz zu Nix aus.

## Nix

Nix-Pakete werden unter Nutzung einer „verzögert ausgewerteten“, rein funktionalen Sprache konfiguriert, die extra für diesen Zweck entworfen wurde. Shell-Skripte und andere externe Programme (z. B. make) können genutzt werden, um Pakete zu kompilieren. Dabei erlaubt diese Sprache präzise Abhängigkeitsüberwachungen. Kryptografische Hash-Werte geben die exakten Build- und Laufzeitabhängigkeiten für jedes Paket an und jedes Quellcode- oder Binärpaket wird über einen solchen Hash repräsentiert, wodurch Repositorys ein Cache von Paketen, indiziert von einem kryptografischen Hash, darstellen.
Abhängigkeiten werden von einer Systemfunktionalität aufgelöst, die dem Hardlinken ähnelt. Die Version einer Software wird solange nicht entfernt, bis kein Paket mehr auf sie verweist. Dies kann zwar zu größerem Speicherverbrauch führen, aber macht alle Upgrades sicher (eine Garantie, dass keine bestehende Applikation die Funktionstüchtigkeit aufgibt) und atomar. Es erlaubt außerdem, mehrere Versionen beliebiger Pakete, auch wenn sie sich nur um Parameter unterscheiden, ohne Interferenzen nebeneinander zu betreiben.
Nix basiert auf einer eigenen Ordnerstruktur zum Installieren von Paketen. Jedes Paket wird in ein Unterverzeichnis des Nix-Verzeichnisses installiert. Bei der Benennung der Ordner werden verschiedenen Versionen eines Pakets Hash-Werte dem Paketnamen vorangestellt, um sie identifizieren zu können.
Nix kann mit einigen Vorbehalten als Paketmanager auf einem bestehenden Betriebssystem genutzt werden, wie beispielsweise einer Linux-Distribution. Außerdem lässt sich Nix nutzen, um jedwede Art von Dateikonfigurationen zu warten, so z. B. Serverkonfigurationen zusätzlich zum Paketmanagement im engen Sinne.
Im Gegensatz zu herkömmlichen Paketmanagern unterstützt Nix so genannte Profile. Ein Profil ist eine Umgebung in der bestimmte Pakete installiert sind. Profile ermöglichen es schnell zwischen unterschiedlichen Versionen installierter Software zu wechseln. Jeder Benutzer (auch Nicht-Administratoren) kann Profile anlegen und in diesen Software installieren.
Nix kann auch mit Paketen von anderen Paketmanagern, wie z. B. Bower oder Cabal, umgehen.

## Software im Umfeld von Nix

NixOS ist eine Linux-Distribution, die Nix für die Verwaltung der Software nutzt. Dies zieht sich konsequent durch die Distribution. NixOS verwendet im Gegensatz zu „Guix System“ systemd.
GNU Guix Das GNU-Projekt kündigte im November 2012 die erste Veröffentlichung von GNU Guix (genauso ausgesprochen wie „geeks“), einem funktionalen Paketmanager, der auf Nix’ Prinzipien aufbaut und unter anderem Guile Scheme APIs bereitstellt, an. Dieses Projekt wurde im Juni 2012 von Ludovic Courtès, einem der „GNU Guile hackers“ gestartet. GNU Guix wird hauptsächlich in der Linuxdistribution „Guix System“ eingesetzt.
Hydra Ist eine Continuous-Integration-Software, welche automatisiert Nixpakete bauen und testen kann.
NixOps Ist ein DevOps-Tool welches es erlaubt durch Nix-Expressions beschriebene Systeme z. B. auf Amazon EC2 zu deployen.