NixOS

NixOS
Logo

Famille Gnu/Linux
Type de noyau Monolithique modulaire (Linux kernel)
État du projet En développement
Dépôt github.com/NixOS/nixpkgsVoir et modifier les données sur Wikidata
Plates-formes i686, x86-64, ARMv7, AArch64
Entreprise /
Fondateur
Eelco Dolstra
Entreprise /
Développeur
Eelco Dolstra (d), Peter Simons (d) et Thomas Tuegel (d)Voir et modifier les données sur Wikidata
Licence Licence MITVoir et modifier les données sur Wikidata
Écrit en nix, c++[1]
Première version le 31 octobre 2003, il y a 21 ans
Dernière version stable 24.05 (Uakari) (le 31 mai 2024, il y a 5 mois[2])
Dernière version avancée 24.11-pre (Vicuna, )[3]Voir et modifier les données sur Wikidata
Méthode de mise à jour nixos-rebuild
Environnement de bureau Plasma, GNOME, Xfce et d'autres
Gestionnaire de paquets Nix
Site web nixos.org

NixOS est une distribution Linux basée sur le gestionnaire de paquet Nix. Elle utilise une configuration déclarative et permet des mises à jour fiables du système[4]. Deux branches principales sont proposées : une version stable et une version instable comprenant les derniers ajouts.

Bien que NixOS ait commencé comme un projet de recherche[5], il est reconnu comme un système d'exploitation suffisamment fonctionnel et utilisable[réf. nécessaire].

NixOS dispose d'outils dédiés aux Devops et aux tâches de déploiement[6],[7].

NixOS a commencé comme un projet de recherche par Eelco Dolstra en 2003[5].

La fondation NixOS a été fondée en 2015 et vise à soutenir des projets comme NixOS qui mettent en œuvre le modèle de déploiement purement fonctionnel[8].

NixOS suit une cadence de publication de deux versions par an. Ces versions sont habituellement publiées vers mars et septembre, mais à partir de la version 21.05, NixOS vise désormais mai et novembre[9]. Chaque numéro de versions a le format « YY.MM ». Par exemple, la version 20.03 de NixOS correspond à la version publiée en mars 2020. De plus, chaque version est identifiée par un nom de code comme « Markhor » pour la version 20.03.

Listes des versions de NixOS[10]
Date de publication Version Nom Version du kernel
2013-10-31 13.10 Aardvark ???
2014-04-30 14.04 Baboon 3.12
2014-12-30 14.12 Caterpillar 3.14
2015-09-30 15.09 Dingo 3.18
2016-03-31 16.03 Emu 4.4
2016-09-30 16.09 Flounder 4.4
2017-03-31 17.03 Gorilla 4.9
2017-09-29 17.09 Hummingbird 4.9
2018-04-04 18.03 Impala 4.14
2018-10-05 18.09 Jellyfish 4.14
2019-04-11 19.03 Koi 4.19
2019-10-09 19.09 Loris 4.19
2020-04-20 20.03 Markhor 5.4
2020-10-27 20.09 Nightingale 5.4
2021-05-31 21.05 Okapi 5.10
2021-11-30 21.11 Porcupine 5.10
2022-05-30 22.05 Quokka 5.15
2022-11-30 22.11 Raccoon 5.15
2023-05-31 23.05 Stoat 6.1
2023-11-29 23.11 Tapir 6.1
2024-05-31 24.05 Uakari 6.6

Fonctionnalité

[modifier | modifier le code]

Modèle de configuration déclarative du système

[modifier | modifier le code]

Dans NixOS, l'ensemble du système d'exploitation — le noyau, les applications, les composants système, les fichiers de configurationetc. — est construit par le gestionnaire de paquets Nix à partir d'une description dans un langage de construction fonctionnel. La création d'une nouvelle configuration ne peut pas remplacer les configurations précédentes[11].

Un système NixOS est configuré en écrivant une spécification des fonctionnalités, que l'utilisateur souhaite sur sa machine, dans un fichier de configuration globale. Par exemple, voici une configuration minimale d'une machine exécutant un démon SSH[12][source insuffisante] :

{
 boot.loader.grub.device = "/dev/sda";
 fileSystems."/".device = "/dev/sda1";
 services.sshd.enable = true;
}

Après avoir modifié le fichier de configuration, le système peut être mis à jour à l'aide de la commande nixos-rebuild switch. Cette commande fait tout ce qui est nécessaire pour appliquer la nouvelle configuration, y compris le téléchargement et la compilation des paquets et la génération des fichiers de configuration.

Mises à jour fiables

[modifier | modifier le code]

Étant donné que les fichiers Nix sont purs et déclaratifs, leur évaluation produira toujours le même résultat, quels que soient les paquets ou fichiers de configuration présents sur le système. Ainsi, la mise à jour d'un système est aussi fiable que sa réinstallation.

Mises à jours atomiques

[modifier | modifier le code]

NixOS a une approche transactionnelle de la gestion des configurations, permettant de faire des mises à jours atomiques. Par exemple, en cas d'échec de mise à jour due à une coupure de l'alimentation ou du réseau, le système sera toujours dans un état cohérent : il démarrera dans l'ancienne ou la nouvelle configuration. Dans d'autres systèmes, une machine peut se retrouver dans un état incohérent et peut même ne plus démarrer[13].

Si après une mise à jour du système, la nouvelle configuration n'est pas souhaitée, elle peut être annulée à l'aide d'une commande spéciale (nixos-rebuild switch --rollback). Toutes les configurations du système s'affichent automatiquement dans le menu de démarrage. Si la nouvelle configuration plante ou ne démarre pas correctement, une ancienne version peut être sélectionnée. Les restaurations sont des opérations légères qui n'impliquent pas la restauration de fichiers à partir de copies.

Configurations système reproductibles

[modifier | modifier le code]

Le modèle de configuration déclarative de NixOS facilite la reproduction d'une configuration système sur une autre machine. La copie du fichier de configuration sur la machine cible et l'exécution de la commande de mise à jour du système génèrent la même configuration système (noyau, applications, services système, etc.), sauf pour les parties du système non gérées par le gestionnaire de packages telles que les données utilisateur.

Modèle basé sur la source, avec des binaires

[modifier | modifier le code]

Le langage Nix utilisé par NixOS spécifie comment construire des paquets à partir des sources. Cela facilite l'adaptation du système aux besoins des utilisateurs. Cependant, la construction à partir de la source étant un processus lent, le gestionnaire de paquets télécharge automatiquement les fichiers binaires pré-compilés à partir d'un serveur de cache lorsqu'ils sont disponibles. Cela donne la flexibilité d'un modèle de gestion de paquets basé sur la source avec l'efficacité d'un modèle binaire[14].

Le gestionnaire de packages Nix garantit que le système en cours d'exécution est cohérent avec les spécifications logiques du système, ce qui signifie qu'il va reconstruire tous les paquets qui ont besoin d'être reconstruits. Par exemple, si le noyau est modifié, le gestionnaire de paquets s'assurera que les modules externes du noyau seront reconstruits. De même, lorsqu'une bibliothèque est mise à jour, elle garantit que tous les paquets système utilisent la nouvelle version, même les paquets qui y sont liés statiquement.

Gestion de paquets multi-utilisateurs

[modifier | modifier le code]

Il n'est pas nécessaire de disposer de privilèges spéciaux pour installer des logiciels dans NixOS. En plus du profil à l'échelle du système, chaque utilisateur dispose d'un profil dédié dans lequel il peut installer des paquets. Nix permet également à plusieurs versions d'un paquet de coexister, de sorte que différents utilisateurs peuvent avoir différentes versions du même paquet installées dans leurs profils respectifs. Si deux utilisateurs installent la même version d'un paquet, une seule copie sera créée ou téléchargée, et le modèle de sécurité de Nix garantit que cela est sécurisé.

Mise en œuvre

[modifier | modifier le code]

NixOS est basé sur le gestionnaire de packages Nix qui stocke tous les paquets de manière isolée, dans le magasin de paquets.

Les paquets installés sont identifiés par un hachage cryptographique de toutes les entrées utilisées pour leur construction. La modification des instructions de construction d'un package modifie son hachage et cela entraînera l'installation d'un paquet différent dans le magasin de paquets. Ce système est également utilisé pour gérer les fichiers de configuration en veillant à ce que les configurations plus récentes n'écrasent pas les anciennes.

Cela implique que NixOS ne respecte pas la norme de hiérarchie du système de fichiers. Les seules exceptions sont un lien symbolique /bin/sh vers une version de bash dans le magasin Nix (par exemple : /nix/store/5rnfzla9kcx4mj5zdc7nlnv8na1najvg-bash-4.3.43/bin/bash) ; et bien que NixOS ait un répertoire /etc pour conserver les fichiers de configuration à l'échelle du système, la plupart des fichiers de ce répertoire sont des liens symboliques vers des fichiers stockées dans /nix/store tels que /nix/store/s2sjbl85xnrc18rl4fhn56irkxqxyk4p-sshd_config. Ne pas utiliser de répertoires globaux tels que /bin fait partie de ce qui permet à plusieurs versions d'un paquet de coexister.

Références

[modifier | modifier le code]
  1. « NixOS/nix », sur GitHub (consulté le ).
  2. « Release 24.05 ("Uakari", 2024-05-31) », (consulté le )
  3. GitHub (service Internet), consulté le .Voir et modifier les données sur Wikidata
  4. « DistroWatch.com: NixOS », Distrowatch.com (consulté le ).
  5. a et b (en) Eelco Dolstra, « Integrating Software Construction and Software Deployment », Lecture Notes in Computer Science, vol. 2649,‎ , p. 102–117 (lire en ligne [PDF]).
  6. « NixOps - The NixOS Cloud Deployment Tool », Nixos.org (consulté le )
  7. « Disnix », Nixos.org (consulté le ).
  8. « Stichting NixOS Foundation », Nixos.org (consulté le )
  9. Nix RFCs (Request For Comments), Nix/Nixpkgs/NixOS, (lire en ligne)
  10. (en) « NixOS - Release-Notes », sur nixos.org (consulté le )
  11. (en) Eelco Dolstra et Armijn Hemel, « Purely Functional System Configuration Management », HOTOS'07: Proceedings of the 11th USENIX workshop on Hot topics in operating systems,‎ , p. 1-6 (lire en ligne [PDF]).
  12. « About NixOS », Nixos.org (consulté le )
  13. (en) Sander van der Burg, Eelco Dolstra et Merijn de Jonge, « Atomic Upgrading of Distributed Systems », Conference: Proceedings of the 1st ACM Workshop on Hot Topics in Software Upgrades, HotSWUp 2008,‎ (DOI 10.1145/1490283.1490294, lire en ligne).
  14. (en) Eelco Dolstra, « Secure Sharing Between Untrusted Users in a Transparent Source/Binary Deployment Model », Conference: 20th IEEE/ACM International Conference on Automated Software Engineering (ASE 2005),‎ (DOI 10.1145/1101908.1101933, lire en ligne)


Articles connexes

[modifier | modifier le code]
  • Nix - Le gestionnaire de packages sur lequel NixOS est basé
  • Guix System - Distribution GNU/Linux basé sur Guix, un autre gestionnaire de packages fonctionnel

Liens externes

[modifier | modifier le code]