Nächste: Vorbereitung zur Verwendung der Bootstrap-Binärdateien, Nach oben: Bootstrapping [Inhalt][Index]
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.
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.
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]