NixOS
NixOS est une distribution Linux basée sur le . Elle utilise une configuration déclarative et permet des mises à jour fiables du système. Deux branches principales sont proposées : une version stable et une version instable, avec les derniers ajouts. Bien que NixOS ait commencé comme un projet de recherche il s'agit d'un système d'exploitation entièrement fonctionnel et utilisable. NixOS dispose d'outils dédiés aux DevOps et aux tâches de déploiement.

Histoire 
NixOS a commencé comme un projet de recherche par Eelco Dolstra en 2003.

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.

Versions 
NixOS suit une cadence de publication de 2 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. Chaque numéro de versions a le format suivant "YY.MM", par exemple la version "20.03" correspond à la version de NixOS publiée en mars 2020. De plus chaque version est identifiée par un nom de code comme "Markhor" pour la version 20.03.

Fonctionnalité

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

Dans NixOS, l'ensemble du système d'exploitation  est construit par le gestionnaire de paquets Nix à partir d'une description dans un langage de construction fonctionnel. Cela signifie que la création d'une nouvelle configuration ne peut pas remplacer les configurations précédentes.

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 : {
 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 
É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 
NixOS a une approche transactionnelle de la gestion des configurations, permettant de faire des mises à jours atomiques. Cela signifie que si la mise à jour vers une nouvelle configuration est interrompue - par exemple si l'alimentation est coupée - le système sera toujours dans un état cohérent: il démarrera soit dans l'ancienne soit dans 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.

Rollbacks 
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 
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 
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 paquet télécharge automatiquement les fichiers binaires pré-compilé à 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.

Cohérence 
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 
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 
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

Articles connexes

Annexes 
  - 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 
  
 Dépôt de paquets Nix 
 Wiki NixOS non officiel 
Note de versions de NixOS 

Sécurité du système d'exploitation
Pages avec des traductions non relues
Distribution Linux proposant KDE