Nix (gestionnaire de paquets)
Nix est un gestionnaire de paquets multiplateforme ainsi qu'un language de programmation qui vise à permettre la reproducibilité, la robustesse, la portabilité et la stabilité des systèmes d'information[3].
Développé par | Eelco Dolstra (d) |
---|---|
Première version | [1] |
Dernière version | 2.22.1 ()[2] |
Dépôt | github.com/NixOS/nix |
Écrit en | C++, Perl, script shell, Nix (d), Make, Autoconf, Rust, C et Extensible Markup Language |
Système d'exploitation | Linux, Darwin, FreeBSD et OpenBSD |
Type |
Gestionnaire de paquets purement fonctionnel (d) Implémentation d'un langage de programmation (en) Implémentation de référence Interprète |
Licence | Licence publique générale limitée GNU version 2.1 |
Documentation | nix.dev |
Site web | nixos.org |
Les systèmes Nix utilisent leur propre language de programmation du même nom spécifique à la gestion de paquets, déclaratif, paresseux et purement fonctionnel[4] (voir section dédiée).
Nix utilise un modèle de déploiement dans lequel le logiciel est installé dans des répertoires uniques générés via des fonctions de hachages cryptographiques. Le hachage d'un paquet prend en compte les dépendances, ce qui facilite la gestion des dépendances[5].
Les dépendances sont suivies directement via un format intermédiaire appelé « dérivations ». Ce système a certains avantages :
- Les environnements Nix peuvent garder une trace des références et permettre une restauration atomique efficace, tout en optimisant le stockage.
- Toutes les mises à niveau de Nix sont garanties à la fois atomiques et les paquets inutilisés peuvent être récupérés lorsqu'aucun autre n'en dépend.
- Plusieurs utilisateurs peuvent installer des logiciels en toute sécurité sur le même système sans privilèges d'administrateur.
Ces avantages font tout l'interêt de Nix, en fournissant des environements reproducibles, robustes et portables.
Nix prend entièrement en charge Linux et macOS et peut être installé en toute sécurité côte à côte avec un gestionnaire de paquets existant. NixOS peut également être un bon choix, car il s'agit d'une distribution Linux taillée sur-mesure pour Nix (voir section dédiée). Nix peut également être installé sur Windows, par des moyens détournés tel que WSL[6].
Nix est utilisé pour l'empaquetage et la distribution de logiciels dans l'expérience LHCb du CERN[7].
Langage de programmation
modifierNix utilise son propre langage de programmation purement fonctionnel, du même nom. Ce langage est à la fois déclaratif, paresseux, spécifique à la gestion de paquets, et purement fonctionnel[4]. Ce fonctionnement reflète la philosophie de NixOS, à savoir la reproductibilité et la robustesse.
Le langage Nix inclut les types de données génériques, tels que string
(texte), number
(nombres), boolean
(bit : vrai ou faux), null
; mais aussi d'autres types qui sont spécifiques à la gestion de paquets, tel que path
, qui désigne un chemin d'accès. Ces exemples ne sont pas les seuls types[8].
Le code Nix est écrit dans des fichiers en .nix
, et peut être évalués grâce à la commande nix eval
.
Exemples de code Nix
modifierOpération arithmétique : 1+2
Liste de nombres : [ 2 3 8 0 ]
Chemin d'accès absolut : /bin/sl
Fonction qui accepte trois paramètres (x
, y
, z
) ou plus, et retourne la somme des trois premiers : { x, y, z, ... }: z + y + x
NixOS
modifierNixOS [9] est une distribution Linux utilisant Nix pour gérer les logiciels du système, y compris le noyau Linux[10].
Nixpkgs
modifierNixpkgs est le référentiel de paquets construit sur le gestionnaire de paquets Nix. Selon Repology, en mars 2023, il contient plus de 80 000 paquets [11] et en possède un nombre à jour plus élevé que tout autre référentiel de paquets[12]. Les architectures prises en charge par Nixpkgs sont x86_64-linux, aarch64-linux, x86_64-darwin et aarch64-darwin. Les paquets pour ces architectures sont régulièrement construits, à l'aide d'un service d'intégration continue appelé Hydra[13], et les résultats de ces builds sont téléchargés dans un cache binaire public[14]. Lorsque Nix installe un paquet, il vérifie son cache et télécharge le paquet à partir de là au lieu de le construire localement.
Nixpkgs est développé dans un seul référentiel git sur GitHub[15]. Outre les paquets, il contient également le code source de NixOS.
Références
modifier- « https://github.com/NixOS/nix/releases/tag/0.1 »
- « Release 2.22.1 », (consulté le )
- « Nix & NixOS | Declarative builds and deployments », sur nixos.org (consulté le )
- « Nix Language - Nix Reference Manual », sur nix.dev (consulté le )
- Prins, Suresh et Dolstra, « Nix fixes dependency hell on all Linux distributions », Linux.com, (consulté le )
- (en) nix-community, « NixOS-WSL » [code source], sur GitHub
- Burr, Clemencic et Couturier, « Software packaging and distribution for LHCb using Nix »,
- « Data Types - Nix Reference Manual », sur nix.dev (consulté le )
- « Nix & NixOS | Reproducible builds and deployments », nixos.org
- Eelco Dolstra et Andres Löh « NixOS: A Purely Functional Linux Distribution » () (lire en ligne)
—ICFP 2008: 13th ACM SIGPLAN International Conference on Functional Programming - « Nixpkgs unstable repository information - Repology »
- « Repository statistics - Repology »
- « RFC 0046 - Platform Support Tiers », GitHub
- « NixOS official binary cache »
- « Nixpkgs github repository », GitHub
Voir également
modifierArticles connexes
modifier- GNU Guix : un autre gestionnaire de paquets déclaratif, utilisant GNU Guile pour la configuration et la personnalisation.
- Maak : un utilitaire d'automatisation de build similaire à make, conçu pour construire des systèmes logiciels complexes.
- Automatisation des runbooks
Liens externes
modifier
- (en) Site officiel
- Nixpkgs GitHub repository
- Debian developer criticism (2008)
- Purely Functional Configuration Management with Nix and NixOS, InfoQ, 2014
- My NixOS Desktop Flow, Xe Iaso, 2020