logo

blog

My website can't be that messy, right? git clone https://hacktivis.me/git/blog.git
commit: 1e4be11aff238863cd796913c055e744173b9ef1
parent 134bf38defc212728db153fba5fd3ed82a082745
Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Date:   Sat, 25 Mar 2023 10:30:20 +0100

notes/bootstrapping: Add id on each heading

Diffstat:

Mnotes/bootstrapping.shtml28++++++++++++++--------------
1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/notes/bootstrapping.shtml b/notes/bootstrapping.shtml @@ -28,14 +28,14 @@ <dd>One of <a href="https://reproducible-builds.org/">reproducibility</a>'s effect is allowing to audit source code instead of binaries, but said source code needs to be actually used.</dd> </dl> - <h2>Tools</h2> + <h2 id="tools">Tools</h2> <ul> <li><a href="https://hacktivis.me/projects/deblob">deblob</a>: Remove binary executable files (including bytecode)</li> </ul> <h2>Problematic software</h2> - <h3>Erlang</h3> + <h3 id="erlang">Erlang</h3> <p>Documented as originally implemented in prolog, now version <i class="math">n</i> requires binaries version <i class="math">n-1</i> or <i class="math">n</i> to build. No alternative compiler known so far.</p> <h3 id="rust">Rust</h3> @@ -58,28 +58,28 @@ This isn't a system that scales, this is just creating a gigantic blob of software that cannot be reasonably audited, right in the toolchain. </p> - <h3>Java</h3> + <h3 id="java">Java</h3> <p>Requires compilers abandonned ~10 years ago, currently doesn't builds to OpenJDK for me.</p> <h3>Free-Pascal Compiler / Object Pascal</h3> <p><a href="https://bootstrapping.miraheze.org/wiki/Aesop">Aesop</a> seems to still be at the vaporware stage, no code is available.</p> - <h3>Nim</h3> + <h3 id="nim">Nim</h3> <p> The transpiled C non-source code used for bootstrapping contained in <code>./c_code/</code> is pretty much what you would get with C++ mangled symbols auto-decompiled to C.<br /> <a href="https://bootstrapping.miraheze.org/wiki/Bootstrapping_Nim">Real Bootstrapping</a> would need a bootstrap path for Object Pascal, which doesn't exists. </p> - <h3>QEMU</h3> + <h3 id="qemu">QEMU</h3> <p> QEMU 7.0 <a href="https://github.com/gentoo/gentoo/commit/11c7bca43160b3d893dc8d846d8da2838332123c">needs a quick fix on the <code>pc-bios/meson.build</code> file</a> so you can choose to not use the binaries it ships, fixed in QEMU 7.1.<br /> They are still required so it means identifying the source of all of them and having proper from-source packaging, it's already done in gentoo for Seabios and EDK2-OVMF (UEFI) which is enough to boot machines but not for full-x86 support, non-x86 being even more problematic (ie. which upstream is used for OpenBIOS/OpenFirmware as used for sparc32, sparc64 and ppc32). </p> - <h3>app-emulation/wine-mono</h3> + <h3 id="wine-mono">wine-mono</h3> <p>In gentoo it's a collection of binaries. Upstream repository is at <a href="https://github.com/madewokherd/wine-mono">https://github.com/madewokherd/wine-mono</a> but still includes binaries…</p> - <h3>mono / .NET</h3> + <h3 id="mono">mono / .NET</h3> <p> Source-only building is unsupported and nearly impossible (massive chain + intermediary unstable versions).<br /> Should also be noted that Mono started itself with the Microsoft C# compiler (<a href="https://www.mono-project.com/docs/about-mono/history/">History | Mono</a>) instead of <a href="https://www.gnu.org/software/dotgnu/">dotGNU</a> (which is dead since 2012). @@ -90,19 +90,19 @@ <li><a href="https://github.com/dotnet/source-build/issues/1930">Full source bootstrap · Issue #1930 · dotnet/source-build</a></li> </ul> - <h3>Chez Scheme</h3> + <h3 id="chez">Chez Scheme</h3> <p>Requires bootstrap files, <a href="https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/chez.scm">GNU GuixSD packaging</a> doesn't seems to have it figured out yet.</p> - <h3>NekoVM</h3> + <h3 id="neko">NekoVM</h3> <p>Doesn't seems possible to build without <code>boot/*.n</code> files being present, which are NekoVM bytecode files.</p> - <h3>GNU gnulib</h3> + <h3 id="gnulib">GNU gnulib</h3> <p><code>lib/javaversion.class</code>. Made <a href="https://hacktivis.me/tmp/0001-lib-javaversion.class-Remove-build-from-source.patch">[PATCH] lib/javaversion.class: Remove, build from source</a> to have it built from source.</p> - <h3>GNU gettext</h3> + <h3 id="gettext">GNU gettext</h3> <p>gnulib java blob; 3 Java class files in <code>gettext-tools/examples</code>; <code>gettext-tools/m4/csharpexec-test.exe</code> which doesn't have source code (C# is effectively proprietary anyway). Did <a href="https://github.com/gentoo/gentoo/commit/54b36e80f7c3910ae1557c2faafda3d6d62daf49">sys-devel/gettext: deblob</a> to fix it.</p> - <h3>TypeScript</h3> + <h3 id="typescript">TypeScript</h3> <p>Compiler itself is written in TypeScript, no bootstrap path possible as the <a href="https://github.com/microsoft/TypeScript/commit/214df64e287804577afa1fea0184c18c40f7d1ca">commit introducing the compiler</a> is TypeScript code. Want TypeScript compiler? Get a blob from <code>npmjs.org</code>, like the <a href="https://github.com/microsoft/TypeScript/commit/99ec3a96880649eeaa08c3df30e3ae802048f4fe">Initial commit</a> tells you.</p> <p> Alternative might be <a href="https://github.com/swc-project/swc">swc</a> (<a href="#rust">Rust</a>). Note that <a href="https://deno.land/">Deno</a> (also <a href="#rust">Rust</a>) just <a href="https://github.com/denoland/deno/blob/main/tools/update_typescript.md">grabs pre-transpiled JS from Microsoft</a> and <a href="https://babeljs.io/">Babel</a> simply seems to depend on the <code>typescript</code> package.<br /> @@ -111,11 +111,11 @@ <h2>Historically problematic</h2> - <h3>Firefox &gt;=68 &lt;=78</h3> + <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>Go</h3> + <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" -->