[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
branch master updated: website: Add edits and suggestions from Ludovic.
From: |
Jan Nieuwenhuizen |
Subject: |
branch master updated: website: Add edits and suggestions from Ludovic. |
Date: |
Wed, 26 Apr 2023 09:11:03 -0400 |
This is an automated email from the git hooks/post-receive script.
janneke pushed a commit to branch master
in repository guix-artwork.
The following commit(s) were added to refs/heads/master by this push:
new e8a8131 website: Add edits and suggestions from Ludovic.
e8a8131 is described below
commit e8a8131bb484a4e4c441e397bdc29410b1acdc5a
Author: Janneke Nieuwenhuizen <janneke@gnu.org>
AuthorDate: Wed Apr 26 15:06:38 2023 +0200
website: Add edits and suggestions from Ludovic.
* website/drafts/full-source-bootstrap.md: Catchier start, gently
introduce new terms, fixes and edits throughout. Change target
publishing date to today.
Co-authored-by: Ludovic Courtès <ludo@gnu.org>
---
website/drafts/full-source-bootstrap.md | 130 +++++++++++++++++---------------
1 file changed, 71 insertions(+), 59 deletions(-)
diff --git a/website/drafts/full-source-bootstrap.md
b/website/drafts/full-source-bootstrap.md
index c6c5afb..c56b4ce 100644
--- a/website/drafts/full-source-bootstrap.md
+++ b/website/drafts/full-source-bootstrap.md
@@ -1,28 +1,23 @@
-title: Guix Full-Source Bootstrap
-date: 2023-04-30 12:00
+title: The Full-Source Bootstrap: Building from source all the way down
+date: 2023-04-26 18:00
author: Janneke Nieuwenhuizen, Ludovic Courtès
tags: Bootstrapping, Reproducible builds, Security
---
We are delighted and somewhat relieved to announce that the third
-reduction by about 50% of the Guix _bootstrap binaries_ has now been
-officially released! Also known as: The Full-Source Bootstrap.
+reduction of the Guix _bootstrap binaries_ has now been merged in the
+main branch of Guix! If you run `guix pull` today, you get a package
+graph of more than 22,000 nodes _rooted in a 357-byte program_—something
+that had never been achieved, to our knowledge, since the birth of Unix.
-The initial set of binaries from which packages are built now weighs
-in at 25~MiB, about a tenth of what it used to be. If that doesn't
-sound exciting enough, then consider that the only traditional
-bootstrap binary that now remains is `guile-bootstrap`: the driver
-that Guix uses to build packages.
+We refer to this as the _Full-Source Bootstrap_. In this post, we
+explain what this means concretely. This a major milestone—if not _the_
+major milestone—in our quest for building _everything_ from source, all
+the way down.
-### FIXME: how is guile-bootstrap unpacked, don't we also have tar,
-### xz, bash as bootstrap binaries or are bootar/gash used here too?
-
-To put it differently: With this release, the Guix package graph (for
-x86_64-linux) is now rooted in a 357-byte binary!
-
-In [two previous
+How did we get there, and why? In [two previous
](https://guix.gnu.org/blog/2020/guix-further-reduces-bootstrap-seed-to-25/)
[blog
-post](https://guix.gnu.org/blog/2019/guix-reduces-bootstrap-seed-by-50/)
+post](https://guix.gnu.org/blog/2019/guix-reduces-bootstrap-seed-by-50/),
we elaborated on why this reduction and bootstrappability in general
is so important.
@@ -32,22 +27,20 @@ well enough to put the idea into practice. At the
[Breaking Bitcoin
conference 2020](https://breaking-bitcoin.com), Carl Dong gave a [fun
and remarkably gentle
introduction](http://diyhpl.us/wiki/transcripts/breaking-bitcoin/2019/bitcoin-build-system).
-At the end of his talk, he states
+At the end of the talk, Carl states:
-```
-The holy grail for bootstrappability will be connecting `hex0` to `mes`. --
Carl Dong
-```
+> The holy grail for bootstrappability will be connecting `hex0` to `mes`.
-Two years ago at [FOSDEM2021](https://fosdem.org/2021) I gave [a short
-talk ](https://fosdem.org/2021/schedule/event/gnumes/) about how we
+Two years ago, at [FOSDEM 2021](https://fosdem.org/2021), I (Janneke)
+gave [a short talk](https://fosdem.org/2021/schedule/event/gnumes/) about how
we
were planning to continue this quest.
-If you choose to believe that building from source is the proper way
-to do computing, then it follows that the [“trusting
+If you think one should always be able to build software from source,
+then it follows that the [“trusting
trust”](https://www.archive.ece.cmu.edu/~ganger/712.fall02/papers/p761-thompson.pdf)
attack is only a symptom of an incomplete or missing bootstrap story.
-#### Full-Source Bootstrap
+### The Road to Full-Source Bootstrap
Three years ago, the _bootstrap binaries_ were reduced to just [GNU
Mes](https://www.gnu.org/software/mes) and
@@ -56,7 +49,7 @@ the driver to build Guix packages: a [static
build](https://alpha.gnu.org/pub/gnu/guix/bootstrap/x86_64-linux/20131110/guile-2.0.9.tar.xz)
of [GNU Guile](https://www.gnu.org/software/guile) 2.0.9).
-The new _Full-Source Bootstrap_, merged in Guix `master` this month,
+The new _Full-Source Bootstrap_, merged in Guix `master` yesterday,
removes the binaries for Mes and MesCC-Tools and replaces them by
[bootstrap-seeds](https://github.com/oriansj/bootstrap-seeds). For x86-linux
(which is also used by the x86_64-linux build), this means this program
[hex0-seed](https://github.com/oriansj/bootstrap-seeds/blob/master/POSIX/x86/hex0-seed),
with ASCII-equivalent
[hex0_x86.hex0](https://github.com/oriansj/bootstrap-seeds/blob/master/POSIX/x86/hex0_x86.hex0).
Hex0 is self-hosting and its source looks like this:
@@ -145,57 +138,76 @@ was forgotten.
Most bootstrap problems or loops are not so easy to solve and
sometimes there are no obvious answers, for example:
-* In 2013, the year that [Reproducible
+- In 2013, the year that [Reproducible
Builds](https://reproducible-builds.org) started to gain some
traction, the GNU Compiler Collection [released
gcc-4.8.0](http://gcc.gnu.org/gcc-4.8/changes.html),
making C++ a build requirement, and
-* Even more recently (2018), the GNU C Library [glibc-2.28 adds Python
+- Even more recently (2018), the GNU C Library [glibc-2.28 adds Python
as a build
requirement](https://sourceware.org/git/?p=glibc.git;a=commit;h=c6982f7efc1c70fe2d6160a87ee44d871ac85ab0),
-and while these examples make for a delightful puzzle from a
+While these examples make for a delightful puzzle from a
bootstrappability perspective, we would love to see the maintainers of
-GNU softwares to consider bootstrappability and start taking more
+GNU packages consider bootstrappability and start taking more
responsibility for the bootstrap story of their packages.
-#### Towards a Universal, Full-Source Bootstrap
+### Next Steps
+
+Despite this major achievement, there is still work ahead.
+
+First, while the package graph is rooted in a 357-byte program, the set
+of binaries from which packages are built includes a 25 MiB
+statically-linked Guile, `guile-bootstrap`, that Guix uses as its driver
+to build the initial packages. 25 MiB is a tenth of what the initial
+bootstrap binaries use to weigh, but it is a lot compared to those 357
+bytes. Can we get rid of this driver, and how?
+
+A development effort with Timothy Sample addresses the dependency on
+`guile-bootstrap` of [Gash and
+Gash-Utils](https://savannah.nongnu.org/projects/gash), the
+pure-Scheme POSIX shell implementation central to our [second
+milestone](https://guix.gnu.org/en/blog/2020/guix-further-reduces-bootstrap-seed-to-25/).
+On the one hand, Mes is gaining a higher level of Guile compatibility:
+hash table interface, record interface, variables and variable-lookup,
+and Guile (source) module loading support. On the other hand, Gash
+and Gash-Utils are getting Mes compatibility for features that Mes is
+lacking (notably `syntax-case` macros). If we pull this off,
+`guile-bootstrap` will only be used as a dependency of bootar and as
+the driver for Guix.
-We are most grateful and excited that the [Nlnet
+Second, the full-source bootstrap that just landed in Guix `master` is
+limited to x86_64-linux and i686-linux, but ARM and RISC-V will be
+joining soon. We are most grateful and excited that the [NLnet
Foundation](https://nlnet.nl) has [decided to continue sponsoring this
work](https://nlnet.nl/project/GNUMes-ARM_RISC-V)!
-While the reduced bootstrap currently only applies to the i686-linux
-and x86_64-linux architectures, we are thrilled that ARM and RISC-V
-will be joining soon.
-
Some time ago, Wladimir van der Laan contributed initial RISC-V
support for Mes but a major obstacle for the RISC-V bootstrap is that
the “vintage” GCC-2.95.3 that was such a helpful stepping stone does
not support RISC-V. Worse, the RISC-V port of GCC was introduced only
-in GCC 7.5.0; a version that requires c++ to build and cannot be
-bootstrapped! To this end, we have been working to make Mes support
-building GCC 4.6.5, while Ekaitz Zarraga has been working on
-[backporting RISC-V support to GCC
-4.6.5](https://nlnet.nl/project/GNUMes-RISCV/) and backporting RISC-V
-support from latest tcc to our bootstrappable-tcc.
-
-Another interesting joint development effort with Timothy Samplet
-addresses the dependency on guile-bootstrap of Gash and Gash-Utils.
-On the one hand, Mes is gaining a higher level of Guile-compatibility:
-hash table interface, record interface, variables and variable-lookup,
-and Guile (source) module loading support. On the other hand, Gash
-and Gash-Utils are getting Mes compatibility for features that Mes is
-lacking (notably syntax-case macros). If we pull this off, the
-guile-bootstrap dependency will be reduced to bootar and as the driver
-for Guix.
-
-Where a full-source bootstrap was once deemed (almost) impossible,
-there are still some dauting tasks ahead. What about the Linux
-kernel? The good news is that the bootstrappable community has grown
-a lot, from two people six years ago there are now around 100 people
-in the `#bootstrappable` IRC-channel. Interesting times ahead!
+in GCC 7.5.0—a version that requires C++ and cannot be
+bootstrapped! To this end, we have been improving MesCC, the C
+compiler that comes with Mes, so it is able to
+build GCC 4.6.5; meanwhile, Ekaitz Zarraga
+[backported RISC-V support to GCC
+4.6.5](https://nlnet.nl/project/GNUMes-RISCV/), and backported RISC-V
+support from the latest [tcc](https://www.tinycc.org) to our
+[bootstrappable-tcc](https://gitlab.com/janneke/tinycc).
+
+## Outlook
+
+The full-source bootstrap was once deemed impossible. Yet, here we are,
+building the foundations of a GNU/Linux distro entirely from source, a
+long way towards the ideal that the Guix project has been aiming for
+[from the
+start](https://guix.gnu.org/manual/en/html_node/Bootstrapping.html).
+
+There are still some daunting tasks ahead. For example, what about the
+Linux kernel? The good news is that the bootstrappable community has
+grown a lot, from two people six years ago there are now around 100
+people in the `#bootstrappable` IRC channel. Interesting times ahead!
#### About Bootstrappable Builds and GNU Mes
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- branch master updated: website: Add edits and suggestions from Ludovic.,
Jan Nieuwenhuizen <=