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


20.1 Bootstrapping aus dem Quellcode allein

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.

Bei i686-linux und x86_64-linux ist Guix so weit, dass ein Bootstrapping aus dem Quellcode allein möglich ist. Das Bootstrapping wurzelt in hex0-seed aus dem Paket Stage0. Das Programm hex0 ist ein kleinster Assembler: Es liest leerzeichengetrennte Hexadezimalziffern (Nibbles) aus einer Datei ein, die Kommentare enthalten darf, und gibt auf der Standardausgabe die zu den Hexadezimalzahlen gehörenden Bytes aus. Der Quellcode dieses den Anfang bildenden hex0-Programms ist eine Datei namens hex0_x86.hex0 und die Sprache, in der es geschrieben ist, ist hex0.

Hex0 kann sich selbst erstellen („self-hosting“):

./hex0-seed hex0_x86.hex0 hex0

Hex0 ist das ASCII-Gegenstück des binären Programms und lässt sich erzeugen, indem man das Gleiche tut wie hier:

sed 's/[;#].*$//g' hex0_x86.hex0 | xxd -r -p > hex0
chmod +x hex0

Durch die Gleichwertigkeit von ASCII und Binärcode können wir diese erste 357-Byte-Binärdatei als Quellcode anerkennen. Daher haben wir ein „Bootstrapping aus dem Quellcode allein“ erreicht.

Das Bootstrapping geht Schritt für Schritt weiter: hex0 erstellt hex1 und dann weiter bis M0, hex2, M1, mescc-tools und schließlich M2-Planet. Von dort können wir mit M2-Planet und den Programmen aus mescc-tools dann Mes erstellen (siehe Referenzhandbuch zu GNU Mes in GNU Mes, einen Scheme-Interpretierer und C-Compiler, der in Scheme geschrieben ist). Ab hier beginnt das traditionellere C-basierte Bootstrapping des GNU-Systems.

Ein nächster 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.

Das Erstellen des GNU-Systems aus seinem Quellcode heraus ist derzeit nur möglich, wenn wir ein paar historische GNU-Pakete als Zwischenschritte hinzufügen41. 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

Wir arbeiten daran, 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 Libera.Chat-IRC-Netzwerk oder diskutieren Sie mit auf bug-mes@gnu.org oder gash-devel@nongnu.org.


Fußnoten

(41)

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.


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