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.
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.
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.
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.
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.
Wenn wir die 68KB-großen mescc-tools
ignorieren, die wir später noch zusammen mit mes
entfernen werden.
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]