Subject: bug#39655: closed (Re: [bug#39655] [PATCH core-updates] doc: Add 'Scheme-only Bootstrap' node.)

From: [email-masked] (GNU bug Tracking System)
Date: Fri, 22 May 2020 14:21:01 +0000

Your bug report

#39655: [PATCH core-updates] doc: Add 'Scheme-only Bootstrap' node.

which was filed against the guix-patches package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
39655: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=39655
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: [bug#39655] [PATCH core-updates] doc: Add 'Scheme-only Bootstrap' node.
From: Jan Nieuwenhuizen <[email-masked]>
To: Timothy Sample <[email-masked]>
Cc: [email-masked], Ludovic Courtès <[email-masked]>
Date: Fri, 22 May 2020 16:20:11 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

Hello!

Timothy Sample writes:

>> +The only significant binary bootstrap seeds that remain@footnote{
>> +Ignoring the 68KB @code{mescc-tools}; that will be removed later,
>> +together with @code{mes}.} are a Scheme intepreter and a Scheme
>> +compiler: GNU Mes and GNU Guile.
>
> Is it too confusing to mention the Bash, Tar, and XZ binaries used to
> get Guile up and running?  IIRC, there are a few packages whose sources
> are still patched via “bootstrap-origin”, too.  I understand that those
> binaries are really insignificant, but maybe someone new to this whole
> thing would be surprised to discover “secret” bootstrap binaries.
> Perhaps their role in unpacking Guile could be put in the footnote with
> messcc-tools.  WDYT?

Good question -- I've added this

compiler: GNU Mes and GNU Guile@footnote{Not shown in this graph are the
static binaries for @file{bash}, @code{tar}, and @code{xz} that are used
to get Guile running.}.

Efraim Flashner writes:

> > GNU Sed will also ship as gzipped tarballs again, as alternative to the
> > hard to bootstrap @code{xz}-compression), this set of added packages can
> > hopefully be reduced again.

> I have to ask since we're talking about bootstrapability; is it actually
> not bootstrappable or is it just harder/more complex? (The question is
> more about the wording than about the logistics of it.)

Good question, changed it to "hard to bootstrap", like so

GNU Sed will also ship as gzipped tarballs again, as alternative to the
hard to bootstrap @code{xz}-compression), this set of added packages can
hopefully be reduced again.

Thanks for your input, pushed to master!

janneke

-- 
Jan Nieuwenhuizen <[email-masked]> | GNU LilyPond http://lilypond.org
Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com

Subject: [PATCH core-updates] doc: Add 'Scheme-only Bootstrap' node.
From: Jan Nieuwenhuizen <[email-masked]>
To: [email-masked]
Date: Tue, 18 Feb 2020 13:44:11 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

* doc/guix.texi (@detailmenu): Add Bootstrapping menu.
(Scheme-only Bootstrap): New node.
* doc/images/gcc-core-mesboot0-scheme-only-graph.dot: New image.
* doc/local.mk (DOT_FILES): Add it.
---
 doc/guix.texi                                 |  94 +++++++++++++--
 .../gcc-core-mesboot0-scheme-only-graph.dot   | 114 ++++++++++++++++++
 doc/local.mk                                  |   1 +
 3 files changed, 198 insertions(+), 11 deletions(-)
 create mode 100644 doc/images/gcc-core-mesboot0-scheme-only-graph.dot

diff --git a/doc/guix.texi b/doc/guix.texi
index 282f9578bf..491fe8b9af 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -35,7 +35,7 @@ Copyright @copyright{} 2016, 2017, 2018 Chris Marusich@*
 Copyright @copyright{} 2016, 2017, 2018, 2019 Efraim Flashner@*
 Copyright @copyright{} 2016 John Darrington@*
 Copyright @copyright{} 2016, 2017 ng0@*
-Copyright @copyright{} 2016, 2017, 2018, 2019 Jan Nieuwenhuizen@*
+Copyright @copyright{} 2016, 2017, 2018, 2019, 2020 Jan Nieuwenhuizen@*
 Copyright @copyright{} 2016 Julien Lepiller@*
 Copyright @copyright{} 2016 Alex ter Weele@*
 Copyright @copyright{} 2016, 2017, 2018, 2019 Christopher Baines@*
@@ -321,6 +321,12 @@ Defining Services
 * Service Reference::           API reference.
 * Shepherd Services::           A particular type of service.
 
+Bootstrapping
+
+* Reduced Binary Seed Bootstrap::            A Bootstrap worthy of GNU.
+* Scheme-only Bootstrap::                    Scheme is all you need.
+* Preparing to Use the Bootstrap Binaries::  Building that what matters most.
+
 @end detailmenu
 @end menu
 
@@ -27973,12 +27979,15 @@ Binutils, libc, and the other packages mentioned above---the
 These bootstrap binaries are ``taken for granted'', though we can also
 re-create them if needed (more on that later).
 
-For @code{i686-linux} and @code{x86_64-linux} the Guix bootstrap process is
-more elaborate, @pxref{Reduced Binary Seed Bootstrap}.
+For @code{i686-linux} and @code{x86_64-linux} the Guix bootstrap process
+is more elaborate.  In Guix v1.1 the @pxref{Reduced Binary Seed
+Bootstrap} was introduced; a future Guix release will be featuring the
+@pxref{Scheme-only Bootstrap}.
 
 @menu
 * Reduced Binary Seed Bootstrap::  A Bootstrap worthy of GNU.
-* Preparing to Use the Bootstrap Binaries:: Building that what matters most.
+* Scheme-only Bootstrap::       Scheme is all you need.
+* Preparing to Use the Bootstrap Binaries::  Building that what matters most.
 @end menu
 
 @node Reduced Binary Seed Bootstrap
@@ -28033,17 +28042,80 @@ gcc-mesboot-wrapper.
 @c
 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 @code{#bootstrappable}
-on the Freenode IRC network.
+has reduced the bootstrap binaries in size to about 145MB in Guix v1.1.
 
 @c ./pre-inst-env guix graph --type=bag -e '(begin (use-modules (guix packages)) (%current-system "i686-linux") (@@ (gnu packages commencement) gcc-mesboot))' > doc/images/gcc-mesboot-bag-graph.dot
-@c dot -T png doc/images/gcc-mesboot-bag-graph.dot > doc/images/gcc-mesboot-bag-graph.png
 
 Below is the generated dependency graph for @code{gcc-mesboot}, the bootstrap
-compiler used to build the rest of GuixSD.
+compiler used to build the rest of the Guix System.
+
+@image{images/gcc-mesboot-bag-graph,6in,,Dependency graph of gcc-mesboot}
+
+@node Scheme-only Bootstrap
+@section Scheme-only Bootstrap
+
+The next step that Guix has taken towards a Full Source Bootstrap is to
+replace the shell and all its utilities with implementations in Guile
+Scheme.  Gash (@pxref{Gash,,, gash, The Gash manual}) is a
+POSIX-compatible shell that replaces Bash, and it comes with Gash Utils
+which has minimalist replacements for Awk, the GNU Core Utilities, Grep,
+Gzip, Sed, and Tar.  The rest of the bootstrap binary seeds that were
+removed are now built from source by adding a new set of
+@c
+packages@footnote{@c
+gash-boot,
+gash-utils-boot,
+%bootstrap-mes-rewired,
+gzip-mesboot,
+bzip2-mesboot,
+bash-mesboot0,
+patch-mesboot,
+sed-mesboot0,
+gawk-mesboot0,
+tar-mesboot,
+grep-mesboot,
+binutils-mesboot1,
+coreutils-mesboot0,
+make-mesboot,
+gawk-mesboot,
+sed-mesboot,
+gcc-core-mesboot1,
+bash-mesboot,
+xz-mesboot,
+coreutils-mesboot,
+gawk-boot0,
+sed-boot0,
+patch-boot0,
+bzip2-boot0,
+tar-boot0,
+and
+coreutils-boot0.
+}
+@c
+As Gash and Gash Utils mature, and GNU packages become more
+bootstrappable (e.g., new releases of GNU Sed will also ship in
+@code{tar.gz} format), this set of added packages can hopefully be
+reduced again.
+
+@c ./pre-inst-env guix graph -e '(@@ (gnu packages commencement) gcc-core-mesboot0)' | sed -re 's,((bootstrap-mescc-tools|bootstrap-mes|guile-bootstrap).*shape =) box,\1 ellipse,' > doc/images/gcc-core-mesboot0-scheme-only-graph.dot
+@image{images/gcc-core-mesboot0-scheme-only-graph,6in,,Dependency graph of gcc-core-mesboot0}
+
+The binary bootstrap seeds that remain@footnote{Ignoring MesCC-Tools
+because it is only 68KB on a total of 57MB, Full Source Bootstrap
+versions and a Scheme implementation are in progress} are a Scheme
+intepreter and a Scheme compiler: Mes and Guile.
+
+This approach has reduced the bootstrap binaries in size to about 57MB
+for @code{i686-linux} and @code{x86_64-linux} on the @code{core-updates}
+branch.
+
+Work is ongoing to remove all binary blobs from our free software
+bootstrap stack, working towards a Full Source Bootstrap.  We are also
+working to bring these bootstraps to the @code{arm-linux} and
+@code{aarch64-linux} architectures and to the Hurd.
 
-@image{images/gcc-mesboot-bag-graph,6in,,Dependency graph of the gcc-mesboot}
+If you are interested, join us on @code{#bootstrappable} on the Freenode
+IRC network.
 
 @node Preparing to Use the Bootstrap Binaries
 @section Preparing to Use the Bootstrap Binaries
@@ -28063,7 +28135,7 @@ guix graph -t derivation \
   | dot -Tps > gcc.ps
 @end example
 
-or, for the Reduced Binary Seed bootstrap
+or, for the Scheme-only bootstrap
 
 @example
 guix graph -t derivation \
diff --git a/doc/images/gcc-core-mesboot0-scheme-only-graph.dot b/doc/images/gcc-core-mesboot0-scheme-only-graph.dot
new file mode 100644
index 0000000000..191582ed4c
--- /dev/null
+++ b/doc/images/gcc-core-mesboot0-scheme-only-graph.dot
@@ -0,0 +1,114 @@
+digraph "Guix package" {
+  "139781154519456" [label = "[email-masked]", shape = box, fontname = Helvetica];
+  "139781154519456" -> "139781154519632" [color = darkgoldenrod];
+  "139781154519456" -> "139781154520688" [color = darkgoldenrod];
+  "139781154519456" -> "139781034971312" [color = darkgoldenrod];
+  "139781154519456" -> "139781154520160" [color = darkgoldenrod];
+  "139781154519456" -> "139781034971664" [color = darkgoldenrod];
+  "139781154519456" -> "139781154519984" [color = darkgoldenrod];
+  "139781154519456" -> "139781154519808" [color = darkgoldenrod];
+  "139781154519456" -> "139781154520512" [color = darkgoldenrod];
+  "139781154519456" -> "139781034971488" [color = darkgoldenrod];
+  "139781154519456" -> "139781034972896" [color = darkgoldenrod];
+  "139781154519456" -> "139781034972368" [color = darkgoldenrod];
+  "139781154519456" -> "139781034973072" [color = darkgoldenrod];
+  "139781154519456" -> "139781131267872" [color = darkgoldenrod];
+  "139781154519632" [label = "[email-masked]", shape = box, fontname = Helvetica];
+  "139781154519632" -> "139781154520688" [color = peachpuff4];
+  "139781154519632" -> "139781034971312" [color = peachpuff4];
+  "139781154519632" -> "139781154520160" [color = peachpuff4];
+  "139781154519632" -> "139781034971664" [color = peachpuff4];
+  "139781154519632" -> "139781154519984" [color = peachpuff4];
+  "139781154519632" -> "139781154519808" [color = peachpuff4];
+  "139781154519632" -> "139781154520512" [color = peachpuff4];
+  "139781154519632" -> "139781034971488" [color = peachpuff4];
+  "139781154519632" -> "139781034972896" [color = peachpuff4];
+  "139781154519632" -> "139781034972368" [color = peachpuff4];
+  "139781154519632" -> "139781034973072" [color = peachpuff4];
+  "139781154519632" -> "139781131267872" [color = peachpuff4];
+  "139781154520688" [label = "[email-masked]", shape = box, fontname = Helvetica];
+  "139781154520688" -> "139781034971488" [color = magenta];
+  "139781154520688" -> "139781034971840" [color = magenta];
+  "139781154520688" -> "139781034972896" [color = magenta];
+  "139781154520688" -> "139781034972368" [color = magenta];
+  "139781154520688" -> "139781034973072" [color = magenta];
+  "139781154520688" -> "139781131267872" [color = magenta];
+  "139781034971488" [label = "[email-masked]", shape = box, fontname = Helvetica];
+  "139781034971488" -> "139781034971840" [color = dimgrey];
+  "139781034971488" -> "139781034972896" [color = dimgrey];
+  "139781034971488" -> "139781034972368" [color = dimgrey];
+  "139781034971488" -> "139781034973072" [color = dimgrey];
+  "139781034971488" -> "139781131267872" [color = dimgrey];
+  "139781034971840" [label = "[email-masked]", shape = box, fontname = Helvetica];
+  "139781034971840" -> "139781034972016" [color = magenta];
+  "139781034971840" -> "139781131266816" [color = magenta];
+  "139781034971840" -> "139781034972896" [color = magenta];
+  "139781034971840" -> "139781034972368" [color = magenta];
+  "139781034971840" -> "139781034973072" [color = magenta];
+  "139781034971840" -> "139781131267872" [color = magenta];
+  "139781034972016" [label = "[email-masked]", shape = box, fontname = Helvetica];
+  "139781034972016" -> "139781034972192" [color = cyan3];
+  "139781034972016" -> "139781131266816" [color = cyan3];
+  "139781034972016" -> "139781034972896" [color = cyan3];
+  "139781034972016" -> "139781034972368" [color = cyan3];
+  "139781034972016" -> "139781034973072" [color = cyan3];
+  "139781034972016" -> "139781131267872" [color = cyan3];
+  "139781034972192" [label = "[email-masked]", shape = ellipse, fontname = Helvetica];
+  "139781034972192" -> "139781131266640" [color = darkseagreen];
+  "139781034972192" -> "139781034972896" [color = darkseagreen];
+  "139781131266640" [label = "bootstrap-mes@0", shape = ellipse, fontname = Helvetica];
+  "139781034972896" [label = "[email-masked]", shape = box, fontname = Helvetica];
+  "139781034972896" -> "139781034973072" [color = darkviolet];
+  "139781034972896" -> "139781131267872" [color = darkviolet];
+  "139781034973072" [label = "bootar@1", shape = box, fontname = Helvetica];
+  "139781034973072" -> "139781131267872" [color = darkviolet];
+  "139781131267872" [label = "[email-masked]", shape = ellipse, fontname = Helvetica];
+  "139781131266816" [label = "[email-masked]", shape = ellipse, fontname = Helvetica];
+  "139781034972368" [label = "[email-masked]", shape = box, fontname = Helvetica];
+  "139781034972368" -> "139781034973072" [color = darkseagreen];
+  "139781034972368" -> "139781034972896" [color = darkseagreen];
+  "139781034972368" -> "139781131267872" [color = darkseagreen];
+  "139781034971312" [label = "[email-masked]", shape = box, fontname = Helvetica];
+  "139781034971312" -> "139781034971488" [color = cyan3];
+  "139781034971312" -> "139781034971840" [color = cyan3];
+  "139781034971312" -> "139781034972896" [color = cyan3];
+  "139781034971312" -> "139781034972368" [color = cyan3];
+  "139781034971312" -> "139781034973072" [color = cyan3];
+  "139781034971312" -> "139781131267872" [color = cyan3];
+  "139781154520160" [label = "[email-masked]", shape = box, fontname = Helvetica];
+  "139781154520160" -> "139781034971488" [color = red];
+  "139781154520160" -> "139781034971840" [color = red];
+  "139781154520160" -> "139781034972896" [color = red];
+  "139781154520160" -> "139781034972368" [color = red];
+  "139781154520160" -> "139781034973072" [color = red];
+  "139781154520160" -> "139781131267872" [color = red];
+  "139781034971664" [label = "[email-masked]", shape = box, fontname = Helvetica];
+  "139781034971664" -> "139781034971840" [color = red];
+  "139781034971664" -> "139781034972896" [color = red];
+  "139781034971664" -> "139781034972368" [color = red];
+  "139781034971664" -> "139781034973072" [color = red];
+  "139781034971664" -> "139781131267872" [color = red];
+  "139781154519984" [label = "[email-masked]", shape = box, fontname = Helvetica];
+  "139781154519984" -> "139781034971488" [color = blue];
+  "139781154519984" -> "139781034971840" [color = blue];
+  "139781154519984" -> "139781034972896" [color = blue];
+  "139781154519984" -> "139781034972368" [color = blue];
+  "139781154519984" -> "139781034973072" [color = blue];
+  "139781154519984" -> "139781131267872" [color = blue];
+  "139781154519808" [label = "[email-masked]", shape = box, fontname = Helvetica];
+  "139781154519808" -> "139781034971488" [color = red];
+  "139781154519808" -> "139781034971840" [color = red];
+  "139781154519808" -> "139781034972896" [color = red];
+  "139781154519808" -> "139781034972368" [color = red];
+  "139781154519808" -> "139781034973072" [color = red];
+  "139781154519808" -> "139781131267872" [color = red];
+  "139781154520512" [label = "[email-masked]", shape = box, fontname = Helvetica];
+  "139781154520512" -> "139781034971312" [color = darkviolet];
+  "139781154520512" -> "139781034971488" [color = darkviolet];
+  "139781154520512" -> "139781034971840" [color = darkviolet];
+  "139781154520512" -> "139781034972896" [color = darkviolet];
+  "139781154520512" -> "139781034972368" [color = darkviolet];
+  "139781154520512" -> "139781034973072" [color = darkviolet];
+  "139781154520512" -> "139781131267872" [color = darkviolet];
+
+}
diff --git a/doc/local.mk b/doc/local.mk
index a361f2388e..cf0be7eeff 100644
--- a/doc/local.mk
+++ b/doc/local.mk
@@ -39,6 +39,7 @@ DOT_FILES =					\
   %D%/images/coreutils-graph.dot		\
   %D%/images/coreutils-bag-graph.dot		\
   %D%/images/gcc-mesboot-bag-graph.dot		\
+  %D%/images/gcc-core-mesboot0-scheme-only-graph.dot \
   %D%/images/service-graph.dot			\
   %D%/images/shepherd-graph.dot
 
-- 
2.24.0