doc: Update Preparing to Use the Bootstrap Binaries.
* doc/guix.texi (Preparing to Use the Bootstrap Binaries): Mention bootstrap-mes alongside bootstrap-gcc. (Reducing the Set of Bootstrap Binaries): Mention the Reduced Binary Seed bootstrap, MesCC-Tools and Mes.
This commit is contained in:
parent
1a99a9c45c
commit
d0bb7ed61e
1 changed files with 39 additions and 17 deletions
|
@ -23920,8 +23920,8 @@ GNU C Library (@pxref{Bootstrapping}). Usually, these bootstrap binaries are
|
||||||
Taking these binaries for granted means that we consider them to be a correct
|
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
|
and trustworthy `seed' for building the complete system. Therein lies a
|
||||||
problem: the current combined size of these bootstrap binaries is about 250MB
|
problem: the current combined size of these bootstrap binaries is about 250MB
|
||||||
(@pxref{Bootstrappable Builds,,, mes, Mes Reference Manual}). Auditing or
|
(@pxref{Bootstrappable Builds,,, mes, GNU Mes}). Auditing or even inspecting
|
||||||
even inspecting these is next to impossible.
|
these is next to impossible.
|
||||||
|
|
||||||
For @code{i686-linux} and @code{x86_64-linux}, Guix now features a ``Reduced
|
For @code{i686-linux} and @code{x86_64-linux}, Guix now features a ``Reduced
|
||||||
Binary Seed'' bootstrap @footnote{We would like to say: ``Full Source
|
Binary Seed'' bootstrap @footnote{We would like to say: ``Full Source
|
||||||
|
@ -23931,8 +23931,8 @@ to use that term for what we do now.}.
|
||||||
The Reduced Binary Seed bootstrap removes the most critical tools---from a
|
The Reduced Binary Seed bootstrap removes the most critical tools---from a
|
||||||
trust perspective---from the bootstrap binaries: GCC, Binutils and the GNU C
|
trust perspective---from the bootstrap binaries: GCC, Binutils and the GNU C
|
||||||
Library are replaced by: @code{mescc-tools-seed} (a tiny assembler and linker)
|
Library are replaced by: @code{mescc-tools-seed} (a tiny assembler and linker)
|
||||||
@code{mes-seed} (a small Scheme Interpreter and a C compiler writen in Scheme)
|
@code{bootstrap-mes} (a small Scheme Interpreter and a C compiler writen in
|
||||||
and @code{tinycc-seed} (the Mes C Library, built for TinyCC). Using these new
|
Scheme and the Mes C Library, built for TinyCC and for GCC). Using these new
|
||||||
binary seeds and a new set of
|
binary seeds and a new set of
|
||||||
@c
|
@c
|
||||||
packages@footnote{@c
|
packages@footnote{@c
|
||||||
|
@ -23988,7 +23988,15 @@ packages bootstrap)} module. A similar figure can be generated with
|
||||||
@example
|
@example
|
||||||
guix graph -t derivation \
|
guix graph -t derivation \
|
||||||
-e '(@@@@ (gnu packages bootstrap) %bootstrap-gcc)' \
|
-e '(@@@@ (gnu packages bootstrap) %bootstrap-gcc)' \
|
||||||
| dot -Tps > t.ps
|
| dot -Tps > gcc.ps
|
||||||
|
@end example
|
||||||
|
|
||||||
|
or, for the Reduced Binary Seed bootstrap
|
||||||
|
|
||||||
|
@example
|
||||||
|
guix graph -t derivation \
|
||||||
|
-e '(@@@@ (gnu packages bootstrap) %bootstrap-mes)' \
|
||||||
|
| dot -Tps > mes.ps
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
At this level of detail, things are
|
At this level of detail, things are
|
||||||
|
@ -24020,10 +24028,10 @@ write them in an output directory with the right layout. This
|
||||||
corresponds to the @code{#:modules} argument of
|
corresponds to the @code{#:modules} argument of
|
||||||
@code{build-expression->derivation} (@pxref{Derivations}).
|
@code{build-expression->derivation} (@pxref{Derivations}).
|
||||||
|
|
||||||
Finally, the various tarballs are unpacked by the
|
Finally, the various tarballs are unpacked by the derivations
|
||||||
derivations @code{gcc-bootstrap-0.drv}, @code{glibc-bootstrap-0.drv},
|
@code{gcc-bootstrap-0.drv}, @code{glibc-bootstrap-0.drv}, or
|
||||||
etc., at which point we have a working C tool chain.
|
@code{bootstrap-mes-0.drv} and @code{mescc-tools-boot-0.drv}, at which point
|
||||||
|
we have a working C tool chain.
|
||||||
|
|
||||||
@unnumberedsubsec Building the Build Tools
|
@unnumberedsubsec Building the Build Tools
|
||||||
|
|
||||||
|
@ -24089,7 +24097,9 @@ automated way to produce them, should an update occur, and this is what
|
||||||
the @code{(gnu packages make-bootstrap)} module provides.
|
the @code{(gnu packages make-bootstrap)} module provides.
|
||||||
|
|
||||||
The following command builds the tarballs containing the bootstrap
|
The following command builds the tarballs containing the bootstrap
|
||||||
binaries (Guile, Binutils, GCC, libc, and a tarball containing a mixture
|
binaries (Binutils, GCC, glibc, for the traditional bootstrap and
|
||||||
|
linux-libre-headers, mescc-tools-seed, bootstrap-mes for the Reduced
|
||||||
|
Binary Seed bootstrap, and Guile, and a tarball containing a mixture
|
||||||
of Coreutils and other basic command-line tools):
|
of Coreutils and other basic command-line tools):
|
||||||
|
|
||||||
@example
|
@example
|
||||||
|
@ -24108,12 +24118,12 @@ know.
|
||||||
|
|
||||||
@unnumberedsubsec Reducing the Set of Bootstrap Binaries
|
@unnumberedsubsec Reducing the Set of Bootstrap Binaries
|
||||||
|
|
||||||
Our bootstrap binaries currently include GCC, Guile, etc. That's a lot
|
Our traditional bootstrap includes GCC, GNU Libc, Guile, etc. That's a lot of
|
||||||
of binary code! Why is that a problem? It's a problem because these
|
binary code! Why is that a problem? It's a problem because these big chunks
|
||||||
big chunks of binary code are practically non-auditable, which makes it
|
of binary code are practically non-auditable, which makes it hard to establish
|
||||||
hard to establish what source code produced them. Every unauditable
|
what source code produced them. Every unauditable binary also leaves us
|
||||||
binary also leaves us vulnerable to compiler backdoors as described by
|
vulnerable to compiler backdoors as described by Ken Thompson in the 1984
|
||||||
Ken Thompson in the 1984 paper @emph{Reflections on Trusting Trust}.
|
paper @emph{Reflections on Trusting Trust}.
|
||||||
|
|
||||||
This is mitigated by the fact that our bootstrap binaries were generated
|
This is mitigated by the fact that our bootstrap binaries were generated
|
||||||
from an earlier Guix revision. Nevertheless it lacks the level of
|
from an earlier Guix revision. Nevertheless it lacks the level of
|
||||||
|
@ -24125,7 +24135,19 @@ The @uref{http://bootstrappable.org, Bootstrappable.org web site} lists
|
||||||
on-going projects to do that. One of these is about replacing the
|
on-going projects to do that. One of these is about replacing the
|
||||||
bootstrap GCC with a sequence of assemblers, interpreters, and compilers
|
bootstrap GCC with a sequence of assemblers, interpreters, and compilers
|
||||||
of increasing complexity, which could be built from source starting from
|
of increasing complexity, which could be built from source starting from
|
||||||
a simple and auditable assembler. Your help is welcome!
|
a simple and auditable assembler.
|
||||||
|
|
||||||
|
Our first major achievement is the replacement of of GCC, the GNU C Library
|
||||||
|
and Binutils by MesCC-Tools (a simple hex linker and macro assembler) and Mes
|
||||||
|
(@pxref{Top, GNU Mes Reference Manual,, mes, GNU Mes}, a Scheme interpreter
|
||||||
|
and C compiler in Scheme). Neither MesCC-Tools nor Mes can be fully
|
||||||
|
bootstrapped yet and thus we inject them as binary seeds. We call this the
|
||||||
|
Reduced Binary Seed bootstrap, as it has halved the size of our bootstrap
|
||||||
|
binaries! Also, it has eliminated the C compiler binary; i686-linux and
|
||||||
|
x86_64-linux Guix packages are now bootstrapped without any binary C compiler.
|
||||||
|
|
||||||
|
Work is ongoing to make MesCC-Tools and Mes fully bootstrappable and we are
|
||||||
|
also looking at any other bootstrap binaries. Your help is welcome!
|
||||||
|
|
||||||
@node Porting
|
@node Porting
|
||||||
@section Porting to a New Platform
|
@section Porting to a New Platform
|
||||||
|
|
Reference in a new issue