Next: , Up: Bootstrapping   [Contents][Index]


12.1 The Reduced Binary Seed Bootstrap

Guix—like other GNU/Linux distributions—is traditionally bootstrapped from a set of bootstrap binaries: Bourne shell, command-line tools provided by GNU Coreutils, Awk, Findutils, ‘sed’, and ‘grep’ and Guile, GCC, Binutils, and the GNU C Library (see Bootstrapping). Usually, these bootstrap binaries are “taken for granted.”

Taking these binaries for granted means that we consider them to be a correct and trustworthy ‘seed’ for building the complete system. Therein lies a problem: the current combined size of these bootstrap binaries is about 250MB (see Bootstrappable Builds in GNU Mes). Auditing or even inspecting these is next to impossible.

For i686-linux and x86_64-linux, Guix now features a “Reduced Binary Seed” bootstrap 29.

The Reduced Binary Seed bootstrap removes the most critical tools—from a trust perspective—from the bootstrap binaries: GCC, Binutils and the GNU C Library are replaced by: bootstrap-mescc-tools (a tiny assembler and linker) and bootstrap-mes (a small Scheme Interpreter and a C compiler written in Scheme and the Mes C Library, built for TinyCC and for GCC). Using these new binary seeds and a new set of packages30 the “missing” Binutils, GCC, and the GNU C Library are built from source. From here on the more traditional bootstrap process resumes. This approach has reduced the bootstrap binaries in size to about 130MB. Work is ongoing to reduce this further. If you are interested, join us on #bootstrappable on the Freenode IRC network.

Below is the generated dependency graph for gcc-mesboot, the bootstrap compiler used to build the rest of GuixSD.

Dependency graph of the gcc-mesboot

Footnotes

(29)

We would like to say: “Full Source Bootstrap” and while we are working towards that goal it would be hyperbole to use that term for what we do now.

(30)

nyacc-boot, mes-boot, tcc-boot0, tcc-boot, make-mesboot0, diffutils-mesboot, binutils-mesboot0, gcc-core-mesboot, mesboot-headers, glibc-mesboot0, gcc-mesboot0, binutils-mesboot, make-mesboot, gcc-mesboot1, gcc-mesboot1-wrapper, glibc-headers-mesboot, glibc-mesboot, gcc-mesboot, and gcc-mesboot-wrapper.


Next: , Up: Bootstrapping   [Contents][Index]