Guix permet de résoudre une partie des problèmes posés par Docker
déclaration des packages
Un code source conçu avec le système d’exploitation ou le gestionnaire de paquets Guix ¹ n’a nul besoin d’une image de base pour recréer un environnement. Ce code source sera livré avec deux fichiers de configuration. Le premier (manifest.scm) comprend toutes les dépendances nécessaires au projet, le second (channels.scm) enregistre l’état des répertoires git qui contiennent les librairies packagées pour guix et qu’on appelle des canaux (channels) à un moment donné ².
Ces deux fichiers de configuration permettent de recréer dans un environnement isolé du reste du système d’exploitation les artefacts d’origine en utilisant les mêmes versions des packages que celles auxquelles ont eu recours les concepteurs et conceptrices du code source.
## transparence des opérations de compilation
Guix est un gestionnaire de paquets déclaratif. Par déclaratif, on entend le fait que toutes les transformations opérées sur le code source sont précisées dans des fichiers de configuration, notamment a minima ceux mentionnés ci-dessus.
A declarative configuration is, put simply, when you write out your settings and packages instead of running a command. This allows for reproducibility, and easier management of installed packages. Think of it as declaring what you are going to do before doing it, as opposed to doing it without writing it down or alerting people.
📓1
Dockerfile est un format de fichier déclaratif, mais manifest.scm et channels.scm sont des fichiers qui déclarent précisément les versions des packages utilisées.
conteneurisation des opérations
Guix permet de gérer les dépendances dans un espace isolé, un environnement virtuel ou un conteneur qui lui est propre. Cela se fait en utilisant le terminal de Guix.
L’utilisateur ou l’utilisatrice de Guix peut ainsi constituer plusieurs profils qui lui permettront de sauvegarder de façon complètement séparée (et sans conflits) différentes versions d’une même librairie pour les utiliser selon les besoins de ses différents projets.
accessibilité sur le long terme des dépendances
Chaque version d’une dépendance peut être séparée des précédentes au moyen d’un hash. Ces hashs peuvent être mis en relation avec les SWHID, les identifiants uniques et pérennes qui permettent d’accéder aux différentes versions des packages archivées par Software Heritage. Plus de 70% des paquets disponibles dans le channel principal de Guix se trouvent en effet sauvegardés pour le très long terme dans l’archive de Software Heritage. Ce dispositif permet un accès constant aux différentes versions des dépendances utilisées par le code source. Docker ne permettait pas de faire le lien entre les dépendances déclarées dans le Dockerfile (même avec leur numéro de version) et leur dépôt dans Software Heritage.