From patchwork Tue Feb 18 12:44:11 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janneke Nieuwenhuizen X-Patchwork-Id: 20310 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id C631027BBEA; Tue, 18 Feb 2020 13:12:11 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-2.9 required=5.0 tests=BAYES_00,MAILING_LIST_MULTI, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.2 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTP id B345527BBE4 for ; Tue, 18 Feb 2020 13:12:10 +0000 (GMT) Received: from localhost ([::1]:34568 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j42fa-0002I2-5W for patchwork@mira.cbaines.net; Tue, 18 Feb 2020 08:12:10 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:39817) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j42FM-00005d-Ut for guix-patches@gnu.org; Tue, 18 Feb 2020 07:45:08 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j42FK-0002Oz-JL for guix-patches@gnu.org; Tue, 18 Feb 2020 07:45:04 -0500 Received: from debbugs.gnu.org ([209.51.188.43]:33654) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1j42FK-0002OY-FC for guix-patches@gnu.org; Tue, 18 Feb 2020 07:45:02 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1j42FK-0006jI-DC for guix-patches@gnu.org; Tue, 18 Feb 2020 07:45:02 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#39655] [PATCH core-updates] doc: Add 'Scheme-only Bootstrap' node. Resent-From: Jan Nieuwenhuizen Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Tue, 18 Feb 2020 12:45:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 39655 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 39655@debbugs.gnu.org X-Debbugs-Original-To: guix-patches@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.158202986225791 (code B ref -1); Tue, 18 Feb 2020 12:45:02 +0000 Received: (at submit) by debbugs.gnu.org; 18 Feb 2020 12:44:22 +0000 Received: from localhost ([127.0.0.1]:39627 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1j42Eg-0006hv-2p for submit@debbugs.gnu.org; Tue, 18 Feb 2020 07:44:22 -0500 Received: from lists.gnu.org ([209.51.188.17]:50830) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1j42Ec-0006hm-JI for submit@debbugs.gnu.org; Tue, 18 Feb 2020 07:44:20 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:39506) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j42EY-0006dV-Li for guix-patches@gnu.org; Tue, 18 Feb 2020 07:44:18 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]:45352) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1j42EY-0001lW-Fj; Tue, 18 Feb 2020 07:44:14 -0500 Received: from ip-213-127-117-42.ip.prioritytelecom.net ([213.127.117.42]:34096 helo=dundal.verum.pub) by fencepost.gnu.org with esmtpa (Exim 4.82) (envelope-from ) id 1j42EX-0001rP-Vi; Tue, 18 Feb 2020 07:44:14 -0500 From: Jan Nieuwenhuizen Date: Tue, 18 Feb 2020 13:44:11 +0100 Message-Id: <20200218124411.20400-1-janneke@gnu.org> X-Mailer: git-send-email 2.24.0 MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.51.188.43 X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches * 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 = "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