Suivant: , Monter: Bootstrapping   [Table des matières][Index]


20.1 Le bootstrap avec les sources binaires réduites

Guix — comme les autres distributions GNU/Linux — est traditionnellement bootstrappé à partir d’un ensemble de binaires de boostrap : Bourne shell, des outils en ligne de commande fournis par GNU Coreutils, Awk, Findutils, « sed » et « grep » et Guile, GCC, Binutils et la bibliothèque C de NU (voir Bootstrapping). Habituellement, ces binaires de bootstrap sont « pris pour acquis ».

Prendre les binaires de bootstrap pour acquis signifie que nous les considérons comme des « sources » corrects et de confiance pour la construction d’un système complet. Là se trouve le problème : la taille de ces binaires de bootstrap est d’environ 250 Mo (voir Bootstrappable Builds dans GNU Mes). Auditer ou même inspecter ces binaires est presque impossible.

Pour i686-linux et x86_64-linux, Guix propose maintenant un bootstrap avec « source binaire réduite » 38.

Le bootstrap avec les sources binaires réduites supprime les outils les plus critiques — du point de vue de la confiance — des binaires de bootstrap : GCC, Binutils et la bibliothèque C de GNU sont remplacées par : bootstrap-mescc-tools (un petit assembleur et éditeur des liens) et bootstrap-mes (un petit interpréteur Scheme et un compilateur C écrit en Scheme et la bibliothèque C de Mes, construite pour TinyCC et pour GCC).

À partir de ces nouvelles sources binaires, les Binutils, GCC et la bibliothèque C de GNU sont construits à partir des sources. À partir de là, les processus de bootstrap plus traditionnel continue. Cette approche a réduit la taille des binaires de bootstrap à environ 145 Mo dans Guix v1.1.

La prochaine étape qui Guix prépare est de remplacer le shell et tous ses utilitaires avec des implémentations en Guile Scheme, le bootstrap Scheme-seulement. Gash (voir Gash dans The Gash manual) est un shell compatible avec POSIX qui remplace Bash, et il propose Gash Utils qui a des remplaçants minimalistes pour Awk, les utilitaires GNu Core Utilities, Grep, Gzip, Sed et Tar. Le reste des binaires de bootstrap que nous avons enlevés sont maintenant construits à partir des sources.

Construire le Système GNU à partir des sources est actuellement seulement possible en ajoutant certains paquets GNU historiques en tant qu’étapes intermédiaires39. Tandis que Gash et Gash Utils avancent, et que les paquets GNU deviennent de nouveau plus bootstrappables (p. ex. les nouvelles versions de GNU Sed proposeront de nouveau des archives gzip, en alternative à la compression xz difficile à boostrapper), on espère pouvoir réduire de nouveau cet ensemble de paquets supplémentaires.

Le graphe ci-dessous montre le graphe de dépendance résultant pour gcc-core-mesboot, le compilateur de bootstrap utilisé pour le bootstrap traditionnel du reste du système Guix.

Graphe de dépendance de
gcc-core-mesboot0

La seule source binaire restant40 sont un interpréteur Scheme et un compilateur Scheme : GNU Mes et GNU Guile41.

Cette réduction supplémentaire a réduit la taille du bootstrap à environ 60 Mo pour i686-linux et x86_64-linux.

Le travail continue pour supprimer tous les blobs binaires de notre pile de bootstrap libre, en essayant d’atteindre un bootstrap complet par les sources. Le travail continue aussi pour apporter ces bootstraps aux architectures arm-linux et aarch64-linux et au Hurd.

Si vous êtes intéressé·e, rejoignez-nous sur ‘#bootstrappable’ sur le réseau IRC Freenode our discutez-en sur bug-mes@gnu.org ou gash-devel@nongnu.org.


Notes de bas de page

(38)

On aimerait pouvoir dire « Bootstrap Source Complet » et même si on travail vers ce but, utiliser ce terme serait une hyperbole pour ce qu’on fait actuellement.

(39)

Les paquets comme gcc-2.95.3, binutils-2.14, glicb-2.2.5, gzip-1.2.4, tar-1.22 et certains autres. Pour les détails, voir gnu/packages/commencement.scm.

(40)

En ignorant mescc-tools qui fait 68 Ko ; qui sera supprimée plus tard, avec mes.

(41)

Ce graphe ne montre pas les binaires statiques pour bash, tar et xz utilisés pour pouvoir lancer Guile.


Suivant: Se préparer à utiliser les binaires de bootstrap, Monter: Bootstrapping   [Table des matières][Index]