Nächste: , Nach oben: Bootstrapping   [Inhalt][Index]


20.1 Das Bootstrapping mit kleinerem Seed

Guix wird – wie andere GNU/Linux-Distributionen auch – traditionell aus einer Menge von Bootstrap-Binärdateien heraus erstellt: der Bourne-Shell, den Befehlszeilenwerkzeugen der GNU Coreutils, Awk, Findutils, „sed“ und „grep“ sowie Guile, GCC, Binutils und der GNU-C-Bibliothek (siehe Bootstrapping). Normalerweise werden diese Bootstrap-Binärdateien „stillschweigend vorausgesetzt“.

Die Bootstrap-Binärdateien stillschweigend vorauszusetzen bedeutet, dass wir sie als korrekte und vertrauenswürdige Grundlage ansehen, als „Seed“, aus dem heraus das komplette System erstellt wird. Darin liegt ein Problem: Die Gesamtgröße all dieser Bootstrapping-Binärdateien beträgt um die 250MB (siehe Bootstrappable Builds in GNU Mes). Ein Audit oder auch nur eine Inspektion davon ist praktisch unmöglich.

Für i686-linux und x86_64-linux unterstützt Guix jetzt ein Bootstrapping „mit kleinerem Seed“ 35.

Beim Bootstrapping mit kleinerem Seed gehören die kritischsten Werkzeuge – was Vertrauenswürdigkeit angeht – nicht mehr zu den Bootstrapping-Binärdateien: Anstelle von GCC, Binutils und der GNU-C-Bibliothek bleiben nur bootstrap-mescc-tools (ein winziger Assembler und Binder) und bootstrap-mes (ein kleiner Scheme-Interpretierer sowie ein C-Compiler, der in Scheme geschrieben wurde, und die Mes-C-Bibliothek, mit der TinyCC und GCC erstellt werden können).

Mit Hilfe dieser neuen Seed-Binärdateien werden die „fehlenden“ Binutils, GCC und die GNU-C-Bibliothek aus dem Quellcode heraus erstellt. Von hier an kann der traditionellere Bootstrapping-Vorgang wie gewohnt weiterlaufen. Durch diesen Ansatz machen die kleineren Bootstrapping-Binärdateien in Guix-Version 1.1 nur noch ungefähr 145MB aus.

Der nächste Schritt war es, die Shell und all ihre Werkzeuge durch in Guile Scheme verfasste Implementierungen zu ersetzen. Nun haben wir ein Bootstrapping nur in Scheme. Gash (siehe Gash in The Gash manual) ist eine POSIX-kompatible Shell, die Bash ersetzt, und mit ihr kommen die Gash Utils als minimalistischer Ersatz für Awk, die GNU Core Utilities, Grep, Gzip, Sed und Tar. Die übrigen Binärdateien unter den Bootstrapping-Seeds wurden entfernt und werden jetzt aus ihrem Quellcode heraus erstellt.

Das Erstellen des GNU-Systems aus seinem Quellcode heraus ist derzeit nur möglich, wenn wir ein paar historische GNU-Pakete als Zwischenschritte hinzufügen36. Mit dem Heranreifen von Gash und Gash Utils und der Entwicklung von GNU-Paketen hin zu mehr Bootstrapbarkeit (z.B. wird es neue Veröffentlichungen von GNU Sed auch wieder als Gzip-komprimierte Tarballs geben, einer Alternative zur schwer zu bootstrappenden xz-Kompression), wird dieser Satz zusätzlicher Pakete hoffentlich noch einmal reduziert werden können.

Im folgenden Graphen sehen Sie den sich ergebenden Abhängigkeitsgraphen für gcc-core-mesboot0, den Bootstrapping-Compiler, mit dem das traditionelle Bootstrapping für den Rest von Guix System vollzogen wird.

Abhängigkeitsgraph des
gcc-core-mesboot0

Die einzig bedeutsamen verbleibenden Binärdateien unter den Bootstrapping-Seeds37 sind ein Scheme-Intepretierer und ein Scheme-Compiler: GNU Mes und GNU Guile38.

Nach dieser weiteren Reduktion macht der binäre Seed nur noch ungefähr 60MB aus für i686-linux und x86_64-linux.

Wir arbeiten daran, alle binären „Blobs“ aus unserem Freie-Software-Bootstrapping zu entfernen, um nur aus Quellcode heraus bootstrappen zu können („Full Source Bootstrap“). Auch ist Arbeit im Gange, ein solches Bootstrapping für die arm-linux- und aarch64-linux-Architekturen und GNU Hurd anzubieten.

Wenn Sie daran Interesse haben, dann machen Sie bei uns mit auf #bootstrappable auf dem Freenode-IRC-Netzwerk oder diskutieren Sie mit auf bug-mes@gnu.org oder gash-devel@nongnu.org.


Fußnoten

(35)

Gerne würden wir „Bootstrapping aus dem Quellcode allein“ sagen und wir arbeiten auch daran, aber das schon jetzt zu sagen, wäre eine Übertreibung.

(36)

Dazu gehören Pakete wie gcc-2.95.3, binutils-2.14, glibc-2.2.5, gzip-1.2.4, tar-1.22 und noch ein paar andere. Details finden Sie in gnu/packages/commencement.scm.

(37)

Wenn wir die 68KB-großen mescc-tools ignorieren, die wir später noch zusammen mit mes entfernen werden.

(38)

In diesem Graphen werden die statischen Binärdateien für bash, tar und xz nicht gezeigt, die wir benutzen, um Guile zum Laufen zu bringen.


Nächste: Vorbereitung zur Verwendung der Bootstrap-Binärdateien, Nach oben: Bootstrapping   [Inhalt][Index]