guix-commits
[Top][All Lists]
Advanced

[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
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]