diff mbox series

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

Message ID 20200218124411.20400-1-janneke@gnu.org
State Accepted
Headers show
Series [bug#39655,core-updates] doc: Add 'Scheme-only Bootstrap' node. | expand

Checks

Context Check Description
cbaines/comparison success View comparision
cbaines/git branch success View Git branch
cbaines/applying patch success View Laminar job

Commit Message

Janneke Nieuwenhuizen Feb. 18, 2020, 12:44 p.m. UTC
* 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

Comments

Ludovic Courtès Feb. 19, 2020, 3:58 p.m. UTC | #1
Hi!

Jan Nieuwenhuizen <janneke@gnu.org> skribis:

> * 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.

Great!  I wonder if we need a new section though.  Do you think we could
just keep it all in a single bootstrapping section that would describe
the current state of affairs, possibly with a “Bootstrapping History”
section or similar that would describe the milestones that got us there?

In fact, part of what you write here could very much go straight to such
a “History” section.  I think the terms “Full Source Bootstrap”,
“Scheme-Only Bootstrap”, etc. should only appear there, for clarity.

That way, the main bootstrapping section would simply describe the
current status in a standalone fashion.

Does that make sense?

> +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,

I wouldn’t list them all here because (1) it’s hard to understand what
these names refer to, unless reading commencement.scm is your favorite
hobby ;-), and (2) it’s bound to become outdated.

WDYT?

> +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}

It would be nice to have a couple of lines commenting the graph, like:

  The graph below shows the resulting dependency graph.  At its root
  there’s X and at the top there’s Y, etc.

Thank you, and apologies for suggesting more work!  :-)

Ludo’.
diff mbox series

Patch

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 = "gcc-core-mesboot0@2.95.3", 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 = "binutils-mesboot0@2.14", 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 = "bash-mesboot0@2.05b", 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 = "make-mesboot0@3.80", 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 = "tcc-boot0@0.9.26-1103-g6e62e0e", 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 = "mes-boot@0.22", 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 = "bootstrap-mes-rewired@0.19", shape = ellipse, fontname = Helvetica];
+  "139781034972192" -> "139781131266640" [color = darkseagreen];
+  "139781034972192" -> "139781034972896" [color = darkseagreen];
+  "139781131266640" [label = "bootstrap-mes@0", shape = ellipse, fontname = Helvetica];
+  "139781034972896" [label = "gash-boot@0.2.0", 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 = "guile-bootstrap@2.0", shape = ellipse, fontname = Helvetica];
+  "139781131266816" [label = "bootstrap-mescc-tools@0.5.2", shape = ellipse, fontname = Helvetica];
+  "139781034972368" [label = "gash-utils-boot@0.1.0", shape = box, fontname = Helvetica];
+  "139781034972368" -> "139781034973072" [color = darkseagreen];
+  "139781034972368" -> "139781034972896" [color = darkseagreen];
+  "139781034972368" -> "139781131267872" [color = darkseagreen];
+  "139781034971312" [label = "bzip2-mesboot@1.0.8", 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 = "diffutils-mesboot@2.7", 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 = "gzip-mesboot@1.2.4", 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 = "patch-mesboot@2.5.9", 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 = "sed-mesboot0@1.18", 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 = "tcc-boot@0.9.27", 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