[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

Nix (gestionnaire de paquets)

gestionnaire de paquet

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].

Nix

Informations
Développé par Eelco Dolstra (d)Voir et modifier les données sur Wikidata
Première version [1]Voir et modifier les données sur Wikidata
Dernière version 2.22.1 ()[2]Voir et modifier les données sur Wikidata
Dépôt github.com/NixOS/nixVoir et modifier les données sur Wikidata
Écrit en C++, Perl, script shell, Nix (d), Make, Autoconf, Rust, C et Extensible Markup LanguageVoir et modifier les données sur Wikidata
Système d'exploitation Linux, Darwin, FreeBSD et OpenBSDVoir et modifier les données sur Wikidata
Type Gestionnaire de paquets purement fonctionnel (d)
Implémentation d'un langage de programmation (en)
Implémentation de référence
InterprèteVoir et modifier les données sur Wikidata
Licence Licence publique générale limitée GNU version 2.1Voir et modifier les données sur Wikidata
Documentation nix.devVoir et modifier les données sur Wikidata
Site web nixos.orgVoir et modifier les données sur Wikidata

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

modifier

Nix 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

modifier

Opé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 [9] est une distribution Linux utilisant Nix pour gérer les logiciels du système, y compris le noyau Linux[10].

Nixpkgs

modifier

Nixpkgs 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
  1. « https://github.com/NixOS/nix/releases/tag/0.1 »
  2. « Release 2.22.1 », (consulté le )
  3. « Nix & NixOS | Declarative builds and deployments », sur nixos.org (consulté le )
  4. a et b « Nix Language - Nix Reference Manual », sur nix.dev (consulté le )
  5. Prins, Suresh et Dolstra, « Nix fixes dependency hell on all Linux distributions », Linux.com, (consulté le )
  6. (en) nix-community, « NixOS-WSL » Accès libre  [code source], sur GitHub
  7. Burr, Clemencic et Couturier, « Software packaging and distribution for LHCb using Nix »,
  8. « Data Types - Nix Reference Manual », sur nix.dev (consulté le )
  9. « Nix & NixOS | Reproducible builds and deployments », nixos.org
  10. 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
  11. « Nixpkgs unstable repository information - Repology »
  12. « Repository statistics - Repology »
  13. « RFC 0046 - Platform Support Tiers », GitHub
  14. « NixOS official binary cache »
  15. « Nixpkgs github repository », GitHub

Voir également

modifier

Articles 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