logo

blog

My website can't be that messy, right? git clone https://anongit.hacktivis.me/git/blog.git/
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:

Mnotes/bootstrapping.shtml73++++++++++++++++++++++++++++++++++++++++++++++++-------------------------
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 &gt;=68 &lt;=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 &gt;=68 &lt;=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>