Posté par Andréas Livet le 19/01/20. Édité par palm123, Benoît Sibaud et Davy Defaud. Modéré par Ysabeau. Licence CC by-sa.
« GNU Guix est un gestionnaire de paquets pour GNU. Il est inspiré par le gestionnaire de paquets Nix, son principal apport est l’Interface de programmation GNU Guile et sa spécialisation dans la fourniture de logiciels libres. Au mardi 31 décembre 2019, GNU Guix permet d’installer 11 174 logiciels. » (Wikipédia)
Dans le journal dont est tirée cette dépêche, Andréas Livet nous raconte sa découverte de Guix.
Sommaire
- Introduction
- Pourquoi Guix est si génial ?
- Domaines d’application
- Compléments tirés des commentaires du journal
Introduction
Je (Andréas Livet auteur du journal à l’origine de cette dépêche) suis tombé très récemment sur une dépêche LinuxFr.org « GNU Guix version Un‑Point‑Zéro » annonçant la sortie de la version 1.0 du gestionnaire de paquets GNU Guix et dans la foulée de la distribution GuixSD et j’ai littéralement pris une claque !
Comme me l’a fait remarquer quelqu’un dans les commentaires, le projet n’est pas tout jeune (sept ans, de mémoire), mais c’est passé à travers les mailles de mon filet de veille technologique tout ce temps.
Je compte bien rattraper le retard car cet outil est tout bonnement hallucinant, et je vous invite vraiment à creuser les différentes sources que vous trouverez car, que vous soyez administrateurs système, devops , développeurs ou simples amateurs de distributions libres, Guix est fait pour vous !
Cette suite d’articles est une tentative, sans doute très imparfaite, de montrer l’ensemble des cas où Guix remplace avantageusement d’autres outils. Vous allez voir, les champs d’applications sont vastes ! Dans l’histoire de l’informatique, des outils ou des approches sont venus totalement bouleverser nos manières de voir les choses et de travailler, Guix en fait partie.
Pourquoi Guix est si génial ?
Qu’est‑ce qui me permet d’avancer que Guix est si important ?
Parce que Guix résout un certain nombre de problèmes pour lesquels un nombre impressionnant de solutions de contournement ont été mises au point. Et comment les résout‑il ? En traitant le problème à la racine et en proposant une solution radicale , rendant les solutions trouvées jusqu’ici obsolètes ou du moins inutiles.
Ce long article en anglais nous en donne une explication détaillée, mais je vais tâcher de vous résumer ça en quelques paragraphes.
Note : il faut tout de même rappeler que Guix a repris les concepts fondamentaux de Nix (et NixOS) tout en utilisant un langage de programmation généraliste (voir plus bas). On pourrait même considérer que Guix est une sorte de divergence de Nix tellement ils sont proches.
Un gestionnaire de paquets révolutionnaire
Guix est avant tout un super gestionnaire de paquets qui règle les principaux problèmes des gestionnaires de paquets classiques.
Eh oui, tous les linuxiens savent qu’il est difficile de mettre à jour un logiciel qui dépend d’une bibliothèque dans une version différente de celle de sa distribution. (Cette dépêche LinuxFr.org résume pas mal la situation actuelle).
En effet, il est alors nécessaire de mettre à jour la dépendance pour tous les logiciels installés sur votre distribution, et vous risquez ainsi de casser certains logiciels.
Regardez aussi la difficulté que les distributions ont à gérer plusieurs versions de certains logiciels en même temps. Les exemples de ce genre ne manquent pas…
Les solutions proposées jusque‑là étaient soit :
- le conservatisme : je reste avec mes paquets peu à jour pendant un certain laps de temps entre deux versions de ma distribution (disons entre 6 mois et 3 ans selon les distributions et le degré de stabilité). C’est le choix de la plupart des distributions Linux.
- la « rolling release » : je mets à jour continuellement les logiciels et les dépendances de mon système tout en courant un risque de casser quelque chose et d’avoir à le réparer ; c’est le choix de distributions comme Gentoo ou encore Arch Linux ;
- un entre deux : c’est le choix par exemple d’Ubuntu avec les PPA ( Personal Package Archives ) ; il s’agit donc de rajouter des dépôts spécifiques à un paquet (compatible avec sa distribution actuelle) afin de mettre celui‑ci à jour ; dans la pratique, cela marche plutôt bien, mais cela oblige les mainteneurs de PPA à créer des paquets pour chaque version d’Ubuntu et donc a une certaine limite ;
- avoir un système de « virtualisation de paquets » de type Flatpak ou Snap qui permet de s’abstraire des dépendances du système en embarquant ses propres dépendances soit directement dans l’application qu’on souhaite mettre à jour, soit dans des dépendances communes (pour faire court) ;
- distribuer les nouvelles versions des logiciels contenant l’ensemble des dépendances ; le meilleur exemple est AppImage, ça fonctionne bien mais augmente la taille des logiciels et ne permet pas de partager des dépendances, donc offre une moins bonne sécurité.
Guix résout élégamment l’ensemble de ces problématiques en permettant d’avoir à la fois des logiciels à jour et le partage optimum des dépendances communes. Tout cela en te garantissant que si quelque chose ne fonctionne plus, on pourra faire un retour en arrière sans une goutte de sueur !
Je vais tâcher de vous expliquer rapidement comment :
- tous les paquets sont installés dans un dossier
gnu
et sont préfixés d’un hash ; de cette manière, il ne peut pas y avoir de collision entre deux versions d’un même paquet ; - si la version d’une dépendance pour un paquet n’est pas précisée, la version la plus récente installée sur le système est utilisée et il est ainsi possible de partager des dépendances entre paquets ;
- si jamais un paquet a besoin d’une version spécifique d’une dépendance, il est possible de la préciser ; Guix la téléchargera au moment de l’installation et le paquet pourra fonctionner sans nuire au fonctionnement du reste du système ;
- comme Guix est un gestionnaire de paquets transactionnel, le système ne peut pas être corrompu lorsqu’une mise à jour n’arrive pas au bout.
On a ainsi le meilleur des deux mondes :
- la possibilité de mettre à jour un paquet de manière indépendante si celui‑ci a besoin de dépendances différentes de celles installées sur le système ;
- le partage d’un maximum de dépendances afin de garantir un niveau de sécurité élevé.
En d’autres mots : il est possible d’être constamment à jour (mode rolling release ) tout en ayant la stabilité d’une distribution « conservative ». Le tout sans avoir à gérer des dépôts spécifiques comme les PPA.
Une distribution hackable
En plus d’être ce génialissime gestionnaire de paquets, Guix est aussi une distribution GNU/Linux (le « GNU » prend ici tout son sens car c’est une distribution soutenue par le projet GNU) hautement modifiable.
La particularité de cette distribution est qu’elle utilise pour ses fichiers de configuration un langage de programmation fonctionnelle nommé Guile qui est une implémentation libre de Scheme, un dérivé de Lisp.
C’est donc très orienté culture GNU/Emacs. J’avoue ne pas être un fan d’Emacs (ni de Vim) et n’y connaître à peu près rien en programmation fonctionnelle. Mais nous verrons dans les articles suivants que ce n’est pas un frein pour utiliser Guix et le bidouiller.
Cela peut paraître un choix anodin d’utiliser un langage de programmation à la place de fichiers de configuration « statiques » pour une distribution (et même un gestionnaire de paquets), mais en réalité ça change tout.
Eh oui, là où avec des langages dédiés à un domaine (DSL en anglais), on est toujours limité dans nos possibilités de configuration et par l’apprentissage nécessaire d’une nouvelle syntaxe. Guile devient une sorte de langage universel, extrêmement flexible et permettant des niveaux d’abstraction infinis propres à la programmation.
De plus, grâce à des liaisons ( bindings ) avec les différents logiciels, il est possible de configurer sa machine entièrement en Guile, sans passer directement par les fichiers de configuration de tel ou tel service.
En cela, Guix se rapproche d’outils comme Ansible qui permettent de configurer un système d’exploitation avec une API de haut niveau, tout en étant théoriquement plus puissants et flexibles du fait de l’utilisation d’un langage de programmation généraliste.
Domaines d’application
Quand je dis que Guix peut remplacer tous les outils, ce n’est pas une métaphore ; et nous verrons dans les prochains articles des cas pratiques où Guix remplace avantageusement :
- le gestionnaire de paquets de votre distribution ; Guix s’installe très facilement sur les principales distributions et cohabite merveilleusement bien avec les autres gestionnaires de paquets ;
- le gestionnaire de paquets et de versions de votre langage de programmation ; plus besoin des environnements virtuels pour Python, rvm ou bundler pour Ruby, npm pour Node.js, etc., Guix résout de manière élégante les problématiques à l’origine de la création de tels outils !
- les technologies de conteneurisation telles que Docker ; nous verrons qu’il est en effet possible de créer des équivalents de conteneurs avec des commandes Guix ;
- les gestionnaires de paquets tel que Snap ou Flatpak, car Guix permet l’installation de plusieurs versions d’un même logiciel et peut aussi limiter les droits d’utilisation d’une application à l’instar de Snap ou Flatpak ;
- les outils d’automatisation de configuration de machine tels qu’Ansible ;
- les outils de création de distributions tels que Yocto ;
- et, bien entendu, GuixSD peut remplacer votre distribution GNU/Linux actuelle !
Bien évidemment, tous ces projets ont encore de beaux jours devant eux et sont tous plus avancés et spécifiques que Guix, ce qui leur donne une légitimité incontestable. Néanmoins, Guix pourrait théoriquement être utilisé à la place de chacun d’eux, ce que je tâcherai de démontrer dans les articles qui suivront.
Compléments tirés des commentaires du journal
Andréas Livet : Guix regroupe des outils en ligne de commande et la configuration du système se fait avec un éditeur de texte. Il y a tout de même un installateur « graphique » (en ligne de commande) pour la distribution, mais je ne l’ai pas encore utilisé. Il s’agit donc encore d’outils réservés à des utilisateurs avancés, voire très avancés pour certains. Pour ce qui est du simple gestionnaire de paquets, si vous savez faire un apt install
, vous saurez faire un guix install
:).
Guillawme rajoute qu’un autre point important est « qu’il autorise l’installation de paquets par tous les utilisateurs et pas seulement root (ou les comptes autorisés à utiliser sudo
). Pour un système partagé, c’est un avantage énorme qui simplifie grandement la vie de l’administrateur du système. Au lieu de constamment installer des logiciels à la requête des utilisateurs (avec des conflits de versions potentiels si deux utilisateurs veulent le même paquet mais dans des versions différentes), il suffit de leur enseigner une ou deux commandes et ils peuvent se débrouiller tout seuls. Guix garantit que chaque paquet n’est installé qu’une seule fois (si un utilisateur installe un paquet déjà présent, Guix ajoute simplement le chemin du paquet déjà installé au profil de cet utilisateur) et que chaque utilisateur peut avoir les versions qu’il veut. L’administrateur n’a plus qu’à faire le ménage régulièrement en demandant à Guix (il y a une commande pour ça) de supprimer les paquets qui sont présents sur le système mais qu’aucun profil utilisateur n’utilise. »
nokomprendo ajoute : « Guix et Nix ont une approche assez similaire et c’est surtout cette approche qui est intéressante, à mon avis. Donc, oui, ce serait bien de comparer régulièrement, pour voir quelles fonctionnalités sont disponibles ou non, et comment on peut utiliser une fonctionnalité donnée avec l’un et autre de ces deux outils. »
La comparaison porte aussi sur les communautés respectives de chaque solution et leurs choix techniques.
nokomprendo précise : « Perso, je trouve bien qu’il y ait deux projets sur cette approche de la gestion de paquets. Ce n’est pas une grosse fragmentation et ça permet d’apporter un peu de dynamique et d’idées différentes. Historiquement, la motivation de Guix était d’utiliser un langage plus classique (Scheme au lieu du langage Nix) et d’avoir un système de base 100 % libre (Nix propose des blobs binaires si l’on active l’option allowUnfree
). Aujourd’hui, Guix semble attacher une grande importance à la reproductibilité, notamment avec Guix HPC et software heritage. De plus, Guix System utilise le système d’initialisation GNU Shepherd et non systemd. Donc, apparemment, il y a quand même de quoi occuper deux projets distincts. »
nokomprendo annonce des présentations sur Guix et Nix au FOSDEM 2020 : voir Meet Guix at FOSDEM et FOSDEM 2020 in Bruxelles .