URL: https://linuxfr.org/users/dedesite/journaux/guix-un-outil-pour-les-remplacer-tous Title: Guix : un outil pour les remplacer tous Authors: Andréas Livet Date: 2020年01月18日T13:05:22+01:00 License: CC By-SA Tags: guix, distribution, gestionnaire_de_dépendances, gestion_de_paquets, flatpak, appimage et snap Score: 43 ## Introduction Je suis tombé très récemment sur [une dépêche LinuxFR](https://linuxfr.org/news/gnu-guix-version-un-point-zero) annonçant la sortie de la version 1.0 du gestionnaire de paquet [Gnu Guix](https://www.gnu.org/software/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](https://linuxfr.org/news/gnu-guix-version-un-point-zero#comment-1773244), le projet n'est pas tout jeune (7 ans de mémoire), mais c'est passé à travers les mailles de mon filet de veille techno 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 admin sys., devops, développeurs ou simple 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/approches, sont venues 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 certains nombres de problèmes pour lesquels un nombre impressionnant de solutions de contournement ont été mise 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](https://ambrevar.xyz/guix-advance/) 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](https://nixos.org/) (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 fork de Nix tellement qu'ils sont proches._ ### Un gestionnaire de paquet révolutionnaire Guix est avant tout un super gestionnaire de paquet qui règle les principaux problèmes des gestionnaires de paquets classiques. Et oui, tous les linuxiens savent qu'il est difficile de mettre à jour un logiciel qui dépend d'une librairie dans une version différente de celle de sa distribution. ([Cette dépêche LinuxFR](https://linuxfr.org/users/emeric_/journaux/mais-pourquoi-flatpak) résume pas mal la situation actuelle). En effet, vous serez alors obligé de mettre à jour la dépendance pour tous les logiciels installés sur votre distribution et 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 en même temps. Les exemples de ce genre ne manquent pas... Les solutions proposées jusque-là était 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 ArchLinux * Un entre deux : c'est le choix par exemple d'Ubuntu avec les ppa. 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 ça oblige les mainteneurs de ppa de créer des paquets pour chaque version d'Ubuntu et donc a une certaine limite. * Avoir un système de "virtualisation de paquet" 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 à jours et le partage _optimum_ des dépendances communes. Tout ça en te garantissant que si quelque chose ne fonctionne plus, tu pourras 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, cela prendra la version la plus récente installée sur le système 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 paquet 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 à 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 une stabilité à celle 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 fonctionnel nommé [Guile](https://www.gnu.org/software/guile/) qui est une [implémentation libre de Scheme](https://www.gnu.org/software/guile/manual/html_node/Guile-and-Scheme.html), un dérivé de [Lisp](https://fr.wikipedia.org/wiki/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 et bidouiller avec Guix. Cela peut paraître un choix anodin d'utiliser un langage de programmation à la place de fichiers de configurations "statiques" pour une distribution (et même un gestionnaire de paquet), mais en réalité ça change tout. Et oui, là ou avec des [langages dédiés](https://fr.wikipedia.org/wiki/Langage_d%C3%A9di%C3%A9) à 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'abstractions infinis propre à la programmation. De plus, grâce à des _bindings_ pour 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](https://www.ansible.com/) qui permettent de configurer un système d'exploitation avec une api haut niveau, tout en étant théoriquement plus puissant et flexible 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ésolve de manière élégante les problématiques à l'origine de la création de tels outils ! * Les technologies de _conteneurisation_ tel 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 tel que Ansible. * Les outils de création de distribution tel que [Yocto](https://www.yoctoproject.org/) * Et bien entendu, GuixSD peut remplacer votre distribution Linux actuelle ! Bien évidement, 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.