Bootstrappable Builds: Von Null auf modernes Linux ohne vorgefertigte Artefakte
Bootstrappable Builds: How and Why
Auf der FOSSY 2026 erklärte Timothy Sample das Konzept der bootstrappablen Builds, die ein Linux-System aus einem winzigen Seed-Programm aufbauen, ohne auf vorgefertigte Binärdateien zu vertrauen. Im Gegensatz zu reproduzierbaren Builds, die nur die Übereinstimmung mit dem Quellcode prüfen, verhindern bootstrappable Builds Angriffe wie den „Trusting-Trust“-Angriff von Ken Thompson. Sample zeigte, wie GNU Guix mit einem 256-Byte-Programm (hex0) beginnt und durch viele Schichten zu modernen Compilern gelangt, und diskutierte Techniken wie „archäologische Ausgrabungen“ und speziell gebaute Werkzeuge wie mrustc für Rust.
„Wir bauen im Grunde C-Compiler mit Dennis Ritchies Sauerteig, der von Bell Labs herübergebracht wurde.“
- 0xDEAFBEAD
[verzögert]
- robalni
Ich arbeite an einem Projekt, das wie eine ganze Umgebung sein wird, die vom kleinstmöglichen Anfang an gebootstrappt wird.
Ich dachte, ein Hex-zu-Binär-Konverter wie hex0 wäre zu sehr wie Maschinencode, und ich wollte, dass alles Quellcode ist, also habe ich stattdessen beschlossen, mit einer super einfachen interpretierten Sprache zu beginnen, die auf Englisch beschrieben ist und der Benutzer soll selbst einen Interpreter dafür schreiben, wie auch immer er will. Auf diese Weise verbinde ich den Menschen mit dem Computer über die Sprache des Menschen, was ich für besser und leichter verständlich hielt.
Diese super einfache interpretierte Sprache baut dann einen super einfachen RISC-V-Assembler. Hier habe ich eine nette Technik entwickelt, bei der die Funktionen im Assembler über Zeiger aufgerufen werden, was sie austauschbar macht, während der Assembler läuft. Sobald der Assembler also eine bessere Version einer seiner eigenen Funktionen kompiliert hat, wird diese Funktion durch die bessere Version ersetzt, während der Assembler läuft, und er kompiliert den Rest des Codes weiter, der dann die neuen Funktionen nutzen kann. So entwickelt er sich weiter, ohne neu starten zu müssen.
- moring
> Das hex0-Programm bietet eine Möglichkeit, eine Zeichenkette aus hexadezimalem Text in eine Binärdatei mit diesen Bytes umzuwandeln.
Ich nutze das, um nach einer Erklärung der grundlegenden Idee zu fragen: Warum ist Hex-Text besser als ein Binärblob? Beide erfordern detailliertes Wissen, um verstanden zu werden; beide benötigen ein Werkzeug zur Anzeige (Lesen von ASCII oder Binär), von denen jedes im Sinne von "trusting trust" kompromittiert sein könnte.
Mir scheint, dass die eigentlich wichtigen Aspekte des anfänglichen "Seeds" seine Größe sind (größer ist schwerer zu verifizieren) und dass die verwendete Sprache (ob Lisp, binärer Maschinencode oder was auch immer) streng definierte Semantik hat.
(Unabhängig davon würde man alles, Seed und den Rest, auf einem Medium speichern wollen, das einem nichts verbergen kann, und das als Quelle verwenden. Aber das gilt für alle Ansätze.)
- lrvick
Wir haben unsere zu 100% deterministische, quorum-signierte, LLVM/musl-native und container-native Distribution von Tag 1 an auf diese Weise vollständig aus dem Quellcode gebootstrappt, dank der unglaublichen Arbeit dieses Teams. Bootstrappable Builds haben Stagex freigeschaltet, das remote attestierbare Boots ermöglicht, die die Vertrauenskette von einem Live-Server-Boot bis zurück zu hex0 verfolgen können.
- andrewchambers
Ich würde gerne sehen, dass jemand versucht, die Bootstrap-Kette von einem funktionierenden C89-Compiler zu Rust zu automatisieren.
Ich denke, dass aktuelle LLMs in der Lage sind, bei diesen unglaublichen Bootstrap-Leistungen zu helfen, da sie die unmöglich langen Bauzeiten über mehrere Tage/Wochen durcharbeiten können.
Ich bin sehr optimistisch, was deterministische Builds im Allgemeinen betrifft.