Retour d'expérience : un an sous NixOS

  1. Approuvé sur ma machine de jeu
  2. Approuvé sur mon serveur
  3. Non approuvé sur (ma) tablette domotique
  4. Conclusion

Voilà déjà un an que je me suis mis à NixOS. Après deux semaines, j'étais déjà conquis. L'heure est venue de faire un "vrai" bilan, un peu plus éclairé.

Approuvé sur ma machine de jeu

Petit rappel de ma configuration que je vous présente en détails ici : Alienware Aurora R10 Ryzen Edition, Ryzen 9 5900X, 32Go de DDR4, RTX 3080 10Go. Je vous dis ça pour tempérer un peu mon enthousiasme : je viens d'un Core i7 7700k couplé à une GTX 1070, un gros gain de performance était donc prévu, même en partant du principe que j'utilisais déjà NixOS sur cette machine.

Cette machine "se contente" de faire tourner Steam (je n'ai pas de jeux en dehors de la plateforme) et un navigateur web. Après quelques temps sous i3, et lassé de son minimalisme qui, parfois, me posait des soucis autres qu'esthétiques, j'ai fini par installer xfce. En plus des applications déjà mentionnées, j'ai aussi installé quelques outils comme le plugin d'archive pour Thunar, un thème GTK et un pack d'icônes, histoire d'avoir quelque chose d'un peu joli et fonctionnel.

Tout fonctionne à merveille. Aucune surprise d'un boot à l'autre. Sous Windows, de tout temps, à chaque démarrage de mes machines, je me demandais quelle tuile allait encore me tomber dessus. Une mise à jour qui se serait mal déroulée, un logiciel qui refuse de se lancer pour une obscure raison... Avec NixOS, ce sentiment n'existe pas. Si la machine démarre une fois, elle démarrera à chaque fois, systématiquement de la même façon. Le sentiment de stabilité est exceptionnel. Même debian ne m'a jamais donné pleinement satisfaction à ce niveau, bien que cela constituait déjà une énorme amélioration par rapport à Windows.

Côté performances, sachez que je ne joue pas à des jeux particulièrement exigeants. Néanmoins, je joue sur un Huawei MateView GT, un moniteur de 34" d'une définition de 3440x1440 (3K) à 165Hz. Je ne vous fournirai pas de benchmarks à la Tom's Hardware, je ne suis pas là pour ça. Mais je peux vous dire que mes jeux tournent aussi bien - dans certains cas, mieux - que sous Windows. La plupart du temps, les chargements sont plus rapides, même pour des jeux qui ne sont pas nativement prévus pour tourner sous Linux. Comme je le dis souvent, Steam, Proton et Wine font des merveilles, mais ce n'est pas spécifique à NixOS.

J'ai des périodes pour jouer. Je vais jouer pendant six mois, après quoi j'aurai d'autres activités (le développement ou l'écriture, par exemple). Donc pendant quelques mois, ma machine de jeu ne sera jamais allumée.

Avant NixOS, je ne pouvais pas allumer la machine après plusieurs mois sans faire de mises à jour, lesquelles vont peut-être générer des problèmes que je vais devoir corriger, peut-être en entraîner d'autres. Il se peut qu'il se passe ainsi plusieurs jours entre le moment où je décide de me remettre à jouer, et le moment où je peux effectivement le faire.

Avec NixOS, on a cette sensation satisfaisante d'avoir un système toujours au top. Je peux allumer ma machine après plusieurs mois d'inactivité, sans culpabiliser de zapper les mises à jour du système, simplement lancer mon jeu et profiter de ma soirée. Et ce, sans message intrusif du système pour m'engueuler que je fais pas mon boulot d'admin. En fait, j'ai la sensation d'avoir un système sur lequel je peux toujours compter, surtout quand je n'ai pas envie de me prendre la tête.

J'ai parfois l'impression d'avoir trouvé un compromis idéal entre le PC et la console - encore que je n'ai pas de point de comparaison moderne (j'ai arrêté la console avec la PS2) - dans la mesure où je dispose de la réactivité et de la stabilité de la console, mais aussi de l'évolutivité et de la versatilité du PC. Et c'est à NixOS que je le dois.

Approuvé sur mon serveur

J'ai réduit mon parc à un seul serveur, évidemment installé sous NixOS. Il s'agit d'un Minisforum U820, basé sur un Core i5 8259U et 16Go de DDR3. Si je continue de passer mon temps à installer et désinstaller des trucs, je perds beaucoup moins de temps à le faire que sous debian, et surtout, je n'encombre pas mon système quand je le fais.

Cela est dû à la compartimentation des logiciels opérée par NixOS (ou plus exactement, par nix, le gestionnaire de paquets sur lequel repose le système). Il me suffit d'activer ou désactiver une ligne de configuration pour utiliser ou non un logiciel donné. Et comme il est évidemment possible d'éclater la configuration dans plusieurs fichiers, je peux paramétrer de façon très exhaustive un service, puis passer à une alternative sans pour autant devoir perdre tout ce que j'avais configuré pour ce service.

Par exemple, si vous aviez réalisé toute une configuration de nginx sous NixOS, et que vous vouliez passer à Caddy, il suffirait de passer la variable services.nginx.enable à false et services.caddy.enable à true pour pouvoir basculer de nginx à Caddy. C'est à peu près aussi simple que ça.

Donc, vu que je fais ce genre de choses assez souvent sur mon serveur, NixOS est une vraie bouée de sauvetage. Si je fais une connerie, je peux toujours désactiver le service problématique et réactiver celui qui fonctionnait comme je le voulais. Et si par mégarde je ne peux pas le faire, il me suffit de redémarrer la machine et choisir la dernière version fonctionnelle de mon système.

On m'objectera que tout cela prend de la place sur disque. En vérité, pas forcément puisqu'une fois qu'un ensemble de configuration est satisfaisant, il suffit de nettoyer le système avec la commande nix-collect-garbage -d, et/ou nix-store --optimise. NixOS peut même le faire tout seul à intervalles réguliers :

nix.gc.automatic = true;
nix.settings.auto-optimise-store = true;

Et si tout est foutu et que rien ne va plus, à partir du moment où l'on dispose de ses fichiers de configuration, un plan de relance prend une grosse demi-heure, probablement beaucoup moins avec une connexion fibre, en partant d'une clé USB.

Pour les logiciels qui ne sont pas packagés pour NixOS, il y a toujours une solution : containers docker/podman, évidemment, mais aussi la possibilité de construire les paquets automatiquement à partir des sources. C'est là toute la puissance de nix : on décrit simplement comment le paquet doit être construit (avec ses paramètres et ses dépendances), ce qui peut se faire depuis un dépôt git, voire depuis un commit ou un tag spécifique (ce qui est fortement recommandé), ou même d'une simple archive.

Rien ne tourne qui ne soit absolument nécessaire. Le système est toujours clean, toujours le plus performant et minimaliste possible, en fonction de la description de l'état de la machine fournie par l'admin. Il en résulte une consommation d'énergie minimale. Sans aller jusqu'à faire du greenwashing, j'ai pratiquement divisé par deux la consommation électrique de la machine en passant à NixOS, simplement parce qu'il y a tout un tas de choses qui ne sont pas lancées par défaut.

Vous m'objecterez à raison qu'une bonne debian, bien paramétrée, peut être tout aussi minimaliste. C'est vrai, mais NixOS prend le parti inverse : au lieu d'avoir un système de base très permissif (qui, par exemple, active par défaut le bluetooth et le wifi), on a un système de base totalement nu. On doit vraiment activer ce qu'on veut de façon déclarative. En conséquence, on sait exactement ce qui tourne - contrairement à un système plus "grand public" qui active plein de choses par défaut pour satisfaire tout le monde - puisque ne tourne que ce qu'on a déclaré. Pour moi, c'est beaucoup plus intuitif et efficient.

Non approuvé sur (ma) tablette domotique

J'ai acheté une Lenovo M10 pour piloter HomeAssistant et avoir un tableau de bord toujours à disposition. La machine tourne de base sous Android, et il n'y a que l'application HomeAssistant qui soit installée dessus. C'est littéralement la première et seule machine sous Android que je possède.

J'ai un peu cherché à voir comment démarrer autre chose qu'Android, mais systématiquement on me parle d'installer Linux dans un genre de chroot, ce qui ne m'intéresse pas du tout. Je veux remplacer l'ensemble du système. Malheureusement, je n'ai pas l'impression que cela soit possible, en tout cas pour installer n'importe quel système, et notamment NixOS.

Apparemment, je pourrais peut-être installer Ubuntu Touch, mais encore une fois, ça ne m'intéresse pas. Je veux NixOS et seulement NixOS. Du coup, au lieu de me dire que je n'ai pas acheté la bonne tablette pour ça, je préfère laisser Android pour l'instant. Peut-être qu'un jour, quand j'aurai le temps et la motivation, je me pencherai sur les questions de bootloader et compagnie, mais pour le moment, ce n'est pas le cas.

Conclusion

J'ai été fidèle à debian pendant à peu près vingt ans. J'ai bien testé pas mal de distros avec le temps, y compris LFS, mais aucune ne m'a jamais donné aussi rapidement la satisfaction ressentie avec NixOS. Je m'y sens chez moi.

Je dis souvent, pour justifier ma conversion à Apple, que pendant un tiers de ma vie de geek, j'ai bidouillé Windows ; pendant le deuxième tiers, j'ai bidouillé Linux ; maintenant, je veux et peux utiliser mon informatique (sous-entendu, via l'éco-système Apple). Ne plus devoir bidouiller pour que ça marche. Ne plus chercher des hacks dégueulasses pour faire tourner un logiciel dont j'ai besoin.

debian a fait son temps, en ce qui me concerne. Avoir un système propre, stable et pérenne ne m'a jamais paru aussi facile qu'avec NixOS. Et c'est d'autant plus vrai maintenant que j'ai l'expérience de trois mises à jour majeures du système : NixOS prévient clairement des changements à réaliser spécifiquement dans ma configuration pour pouvoir monter de version sans problèmes.

Ça m'est arrivé avec Grafana ou Gitea : leurs mises à jour respectives ont engendré des modifications dans la déclaration de leurs options. Ainsi, au moment où j'ai demandé à NixOS de passer à la version 22.11, le système m'a informé des options de configuration actuelles et leur nouveau nom. Il m'a suffit de suivre ces instructions de renommage pour pouvoir faire la mise à jour.

C'est tellement codifié que je ne serai pas étonné si, à l'avenir, le système faisait ces changements par lui-même. Un tel dirigisme est libérateur, aussi contre-intuitif que cela puisse paraître. Je suis libéré du poids psychologique de la maintenance de mes systèmes d'exploitation. Je ne suis plus inquiété que quelque chose tombe en panne, ou qu'une mise à jour se passe mal.

NixOS va me permettre d'utiliser mon informatique non-Apple pendant le dernier tiers de ma vie de geek.

J'espère vous avoir donné envie de vous y mettre.

P.S. : Je l'ai déjà dit l'an dernier et je le maintiens, la courbe d'apprentissage est importante, et je ne suis pas encore capable de tirer pleinement profit de NixOS (par exemple, les flakes). Il faut prendre son temps, et être patient. On n'a rien sans rien.