commit: ec2c5473d3120c4f02406740cf6857e5a217f48a
parent 44b76667f320be04b5ce106818f5850feee5d197
Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Date: Wed, 24 Sep 2025 23:16:49 +0200
notes/bootstrapping: Add disclaimer, order problem sections from best to worst
Diffstat:
1 file changed, 48 insertions(+), 25 deletions(-)
diff --git a/notes/bootstrapping.shtml b/notes/bootstrapping.shtml
@@ -40,6 +40,54 @@
<dd>Lists what isn't present in a list of source code formats, good for manual audits. Python+<code>magic(5)</code> means it is quite slow.</dd>
</dl>
+ <h2>Disclaimers</h2>
+ <p>
+ Unless you plan to make a system language, bootstrapping doesn't
+ have to be done from C or a low-level language.
+ It's fine to use any language as long at it's also bootstrappable
+ and wouldn't introduce circular dependencies.
+ </p>
+ <p>
+ For example: Go and Lua are fine.
+ Perl and Python are a bit involved but live-bootstrap got both.
+ Any language supported by GCC is also okay, although a simpler backend such as
+ <a href="https://c9x.me/compile/">QBE</a>
+ could be more interesting.
+ </p>
+
+ <h2>Non-Problematic / Praise</h2>
+ <h3 id="go">Go</h3>
+ <p>
+ <a href="https://golang.org/doc/install/source">Installing Go from source</a>
+ in the official Go documentation details it, both GCCGO and a branching
+ out of Go 1.4 are supported.
+ </p>
+ <p>
+ More recent versions do require a bootstrap chain but as Go's own
+ toolchain is standalone it's fine.
+ </p>
+
+ <h2>Historically problematic</h2>
+
+ <h3 id="firefox_python2">Firefox >=68 <=78</h3>
+ <p>Firefox would bundle python2 and refuse to build if removed. See <a href="https://salsa.debian.org/mozilla-team/firefox/-/commits/esr78/master/obj-x86_64-pc-linux-gnu/_virtualenvs/init/bin">Debian firefox-esr source history</a></p>
+
+ <h2>Potentially problematic</h2>
+
+ <h3>OCaml</h3>
+ <p>Has binary seeds in <code>./boot</code>, there is <a href="https://github.com/Ekdohibs/camlboot">camlboot</a> but it seems to be pretty inefficient (takes hours to compile when regular ocaml takes minutes to compile)</p>
+
+ <h3 id="zig">Zig</h3>
+ <p>
+ <a href="https://ziglang.org/news/goodbye-cpp/">Threw out the C++ implementation in favor of a <strong>large</strong> WASM binary seed</a>, for now it's chained-bootstrapping.
+ Hopefully an alternative compiler written in a bootstrapped language will appear, because keeping versions of LLVM all the way to 15 working properly just doesn't seems reasonable.
+ </p>
+ <p>
+ <a href="https://jakstys.lt/2024/zig-reproduced-without-binaries/">Zig Reproduced Without Binaries</a>
+ (<a href="https://debbugs.gnu.org/cgi/bugreport.cgi?bug=74217">related debbugs.gnu.org entry</a>):
+ Successfully reproducing Zig binaries within Guix, sadly inpractical as it uses 53+ intermediate versions between 0.10 and 0.13.
+ </p>
+
<h2>Problematic software</h2>
<h3 id="erlang">Erlang</h3>
@@ -140,31 +188,6 @@
I guess web development can also mean creating cyclic graphs of dependencies.<br />
Note: acorn doesn't lists it's dependencies on npmjs because it publishes a pre-compiled version…
</p>
-
- <h2>Potentially problematic</h2>
-
- <h3>OCaml</h3>
- <p>Has binary seeds in <code>./boot</code>, there is <a href="https://github.com/Ekdohibs/camlboot">camlboot</a> but it seems to be pretty inefficient (takes hours to compile when regular ocaml takes minutes to compile)</p>
-
- <h3 id="zig">Zig</h3>
- <p>
- <a href="https://ziglang.org/news/goodbye-cpp/">Threw out the C++ implementation in favor of a <strong>large</strong> WASM binary seed</a>, for now it's chained-bootstrapping.
- Hopefully an alternative compiler written in a bootstrapped language will appear, because keeping versions of LLVM all the way to 15 working properly just doesn't seems sane.
- </p>
- <p>
- <a href="https://jakstys.lt/2024/zig-reproduced-without-binaries/">Zig Reproduced Without Binaries</a>
- (<a href="https://debbugs.gnu.org/cgi/bugreport.cgi?bug=74217">related debbugs.gnu.org entry</a>):
- Successfully reproducing Zig binaries within Guix, sadly inpractical as it uses 53+ intermediate versions between 0.10 and 0.13.
- </p>
-
- <h2>Historically problematic</h2>
-
- <h3 id="firefox_python2">Firefox >=68 <=78</h3>
- <p>Firefox would bundle python2 and refuse to build if removed. See <a href="https://salsa.debian.org/mozilla-team/firefox/-/commits/esr78/master/obj-x86_64-pc-linux-gnu/_virtualenvs/init/bin">Debian firefox-esr source history</a></p>
-
- <h2>Non-Problematic / Praise</h2>
- <h3 id="go">Go</h3>
- <p><a href="https://golang.org/doc/install/source">Installing Go from source</a> in the official Go documentation details it, both GCCGO and a branching out of Go 1.4 are supported.</p>
</main>
<!--#include file="/templates/en/footer.shtml" -->
</body>