From bb6d786736a1d80d1d44ed266ed0b19857945cb5 Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Wed, 5 Sep 2018 07:05:08 +0200 Subject: [PATCH] doc: Release update. * BOOTSTRAP: Update. * HACKING: Update. * NEWS: Update. * README: Update. * doc/mes.texi (Submitting Patches): Fix misquoting, misattribution. --- BOOTSTRAP | 9 +- HACKING | 40 +++--- INSTALL | 4 +- NEWS | 17 ++- README | 24 ++-- configure | 2 +- doc/images/gcc-mesboot-graph.dot | 208 ++++++++++++++++++------------- doc/mes.texi | 208 ++++++++++++++++++++++++------- 8 files changed, 339 insertions(+), 173 deletions(-) diff --git a/BOOTSTRAP b/BOOTSTRAP index 1d564ed1..82e3c422 100644 --- a/BOOTSTRAP +++ b/BOOTSTRAP @@ -99,16 +99,15 @@ be source. https://gitlab.com/janneke/tinycc * TODO -** upstream mes-boot to GuixSD. -** replace GuixSD bootstrap for x86. ** remove or upstream patches from tcc-boot ** prepare src/mes.c for M2-Planet transpiler. +** arm, the Hurd ** fix bootstrap-loops: (Nyacc?, mes.M2, psyntax.pp?) ** make GNU gcc (8.0?) bootstrappable again, remove [need for] tcc stage -** integrate with GuixSD -** x86_64, arm, the Hurd - * DONE +** upstream mes-boot to GuixSD. +** replace GuixSD bootstrap for x86_64. +** replace GuixSD bootstrap for x86. ** add full source gcc-4.7 package build. ** bootstrap gcc+glibc-built binutils-20.1, gcc-4.1.0. ** have tcc-boot compile gnutools triplet: binutils-2.14, gcc-2.95.3, glibc-2.2.5. diff --git a/HACKING b/HACKING index 533c8953..a6b18d9f 100644 --- a/HACKING +++ b/HACKING @@ -28,6 +28,7 @@ To help development we assume ./configure sets these variables for make CC -- gcc CC32 -- i686-unknown-linux-gnu-gcc (or on x86, also gcc) + CC64 -- gcc for use with Mes C Library: -nostdinc, -nostdlib GUILE -- guile HEX2 -- hex2 MES -- unset @@ -41,8 +42,12 @@ during development. Gcc is used to verify the sanity of our C sources. i686-unknown-linux-gnu-gcc is used to compare hex/assembly, to test -the gcc variant of Mes-libc: lib/libc-gcc.c and steal ideas. Target -prefix: mlibc-gcc. +the gcc variant of Mes C Libirary. +Target prefix: mes-gcc. + +gcc (CC64) -nostdinc,-nostdlib is used to compare hex/assembly, to test +the 64bit variant of Mes C Library. +Target prefix: x86_64-mes-gcc. Guile is used to develop MesCC, the C compiler in Scheme that during bootstrapping will be executed by Mes. @@ -66,40 +71,31 @@ mes.c. * ROADMAP ** TODO *** release 0.x, unsorted - - upstream mes-boot to GuixSD. - - replace bootstrap utils (with gash?): flex, bash, bzip2, - coreutils, gawk, grep, gzip, sed, tar. + - replace bootstrap utils with Gash: bash, coreutils, grep, gzip, + sed, tar. - tcc: remove or upstream patches from tcc-boot. - - tcc: build 0.9.27 directly instead of via 0.9.26, - see tinycc wip-bootstrappable@0.9.27 branch + - tcc: build 0.9.27 directly instead of via 0.9.26, see tinycc + wip-bootstrappable@0.9.27 branch + - mes: performance! - mes: prepare src/mes.c for M2-Planet transpiler, Jeremiah branched-out from mes; see https://github.com/oriansj/mes-m2. - mes: real module support, bonus for supporting Guile's define-module/define-public syntax. - - mes: we're a full Scheme now, drop .MES suffix, use .SCM. - + find a way to fix foo.mes/foo.scm trickery (full Guile-like module support?) - + how about setting `guile' or even `guile-2' cond-expand features - for external libraries (Nyacc) we look like Guile/Guile-2 - internally, we could make sure to start every cond-expand with (mes) - - mes: use more efficient scheme continuation stack (wip-array?) - - mes: drop SCM stack in C / implement call/cc a la guile-1.8 setjmp? - - mes/mescc: bootstrap a minimal-Guile + - mes/mescc: bootstrap a minimal-Guile? + libguile/{eval,init,list,strings,values,..}.c + ice-9/eval.scm - mescc: have mes-tcc pass all scaffold/tests, scaffold/tinycc tests. - - mescc: support long long. + - mescc: support long long? - mescc: full support for floats? - - mescc: some success with 8cc,pcc,guile/libguile/eval.c. + - mescc: some success with 8cc,pcc,guile/libguile/eval.c? - build: guile/guix/make.scm: add file-types, intermediate, hash all dependencies - - build: make.scm: imperative->declaritive - get full source syntax-case up (Andre van Tonder?) OR drop it. https://srfi.schemers.org/srfi-72/srfi-72.html psyntax/syntax-case and rewrite Nyacc without syntax-case+R7RS Ellipsis. - mescc: split-off MesCC as as standalone Guile C compiler project. *** release 1.0 - - replace GuixSD's bootstrap binaries for x86. - - add x86_64, replace GuixSD's bootstrap binaries for x86_64. - more architectures (does GuixSD require this, i.e. before 1.0?). ** DONE +*** 0.18 GNU mes now supports GuixSD bootstrap (x86,x86_64) and has native x86_64 support. *** 0.17.1 GNU Mes now allows removing glibc, binutils and gcc from the GuixSD bootstrap. *** 0.17 GNU Mes is now an official GNU project and bootstraps gcc-4.7.4. *** 0.16.1 Mes now has info docs and installs ootb on Debian buster/testing. @@ -261,3 +257,7 @@ https://miyuki.github.io/2017/10/04/gcc-archaeology-1.html ** rain1's Bootstrapping Wiki: https://bootstrapping.miraheze.org/wiki/Main_Page ** rain1's hex86 https://notabug.org/rain1/hex86/src/master/tests/hex0b3.hex86 +** janneke, have you ever tried testing mescc with csmith? [10:55] +** e.g. as described here + https://jamey.thesharps.us/2016/07/15/testing-strategies-for-corrode/ + ("Randomized testing with Csmith and C-Reduce") [10:58] diff --git a/INSTALL b/INSTALL index 493525a2..45c28381 100644 --- a/INSTALL +++ b/INSTALL @@ -24,7 +24,7 @@ similar way. *** Other GNU/Linux - [[https://github.com/oriansj/mescc-tools][mescc-tools]], 0.5 is known to work. - - [[https://savannah.gnu.org/projects/nyacc][Nyacc]], [[https://gitlab.com/janneke/nyacc][patched Nyacc]] 0.80.42 is known to work. + - [[https://savannah.gnu.org/projects/nyacc][Nyacc]], 0.86.0 is known to work. - GNU Gcc, 4.9.3 is known to work. - GNU Guile, version 2.0.12 or is know to work. - SH, /bin/sh, GNU Bash 4.3 is known to work. @@ -53,7 +53,7 @@ http://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/mes.scm?h=wip-bootst ** Prerequisites - [[https://github.com/oriansj/mescc-tools][mescc-tools]], 0.5 is known to work. - - [[https://savannah.gnu.org/projects/nyacc][Nyacc]], [[https://gitlab.com/janneke/nyacc][patched Nyacc]] 0.80.42 is known to work. + - [[https://savannah.gnu.org/projects/nyacc][Nyacc]], 0.86.0 is known to work. - [[https://gitlab.com/janneke/mes-seed][mes-seed]], 0.17.1 is known to work. ** Build it diff --git a/NEWS b/NEWS index 6c514e7e..8735c97e 100644 --- a/NEWS +++ b/NEWS @@ -10,10 +10,23 @@ Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen Please send Mes bug reports to bug-mes@gnu.org. -* Changes in 0.17.1 since 0.17 +* Changes in 0.18 since 0.17.1 ** Core +*** Mes/MesCC now supports x86_64. +*** Mes/MesCC now brings a Reduced Binary Seed bootstrap to GuixSD. +** Language +*** fold-right now supports 3 lists. ** MesCC -*** Mes C Library has now been exploded into a separate C f per function. +*** MesCC now supports x86_64 (also as cross build), using -m 64. +*** Mes C Library now has better support for bootstrapping gcc-3.0. +*** Mes C test suite now has 178 tests; 74 tests were added. +*** MesCC has been refactored to support use an abstracted assembly language. +*** MesCC now uses Nyacc 0.86.0. +** Noteworthy bug fixes +*** scaffold/tests/7s-struct-short.c has been fixed. +* Changes in 0.17.1 since 0.17 +** MesCC +*** Mes C Library has now been exploded into a separate C file per function. *** Mes C Library now bootstraps glibc-2.16.0, binutils-2.20.1, gcc-4.7.4. *** Mes C Library now supports compiling make-3.82. *** Mes C Library now supports compiling diffutils-2.7. diff --git a/README b/README index f5780f69..97733deb 100644 --- a/README +++ b/README @@ -1,11 +1,11 @@ -#+COMMENT: -*- org -*- +g#+COMMENT: -*- org -*- #+TITLE: About GNU Mes #+SUBTITLE: Maxwell Equations of Software -[[https://www.gnu.org/software/mes][GNU Mes]] aims to help create full -source bootstrapping for GNU/Linux distributions such as -[[https://www.gnu.org/software/guix][GuixSD]] as part of the +[[https://www.gnu.org/software/mes][GNU Mes]] brings a [[http://joyofsource.com/reduced-binary-seed-bootstrap.html][Reduced Binary Seed bootstrap]] to [[https://www.gnu.org/software/guix][GuixSD]] and +potentially to any other interested GNU/Linux distribution, and aims +to help create a full source bootstrap as part of the [[http://bootstrappable.org][bootstrappable builds]] effort. It consists of a mutual self-hosting Scheme interpreter written in @@ -20,9 +20,9 @@ C-compiler: MesCC. Mes+MesCC can compile an only [[http://gitlab.com/janneke/tinycc][lightly patched TinyCC]] that is self-hosting. Using this tcc and the Mes C library we now have a -reduced-binary-seed bootstrap for the gnutools triplet: glibc-2.16.0, -binutils-2.20.1, gcc-4.7.4. This is enough to replace the GuixSD -boostrap for i686-linux. +Reduced Binary Seed bootstrap for the gnutools triplet: glibc-2.2.5, +binutils-2.20.1, gcc-2.95.3. This is enough to bootstrap GuixSD for +i686-linux and x86_64-linux. Mes is inspired by The Maxwell Equations of Software: [[http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf][LISP-1.5]] -- John McCarthy page 13, GNU Guix's source/binary packaging transparency and @@ -48,15 +48,17 @@ General Public Licence version 3 or later. See the file [[file:COPYING][COPYING * REPL it #+BEGIN_SRC bash - src/mes.gcc # default (64 bit) gcc-compiled - src/mes.mlibc-gcc # 32 bit, gcc -nostdlib - src/mes # 32 bit, bootstrapped, mes.M1+MesCC-compiled + src/mes.gcc-out # default (64 bit) gcc-compiled + src/mes.mes-gcc-out # 32 bit, gcc -nostdlib, Mes C Lib + src/mes.mes-out # 32 bit, bootstrapped, mes.M1+MesCC-compiled + src/mes.x86_64-mes-gcc-out # 64 bit, gcc -nostdlib, Mes C Lib + src/mes.x86_64-mes-out # 64 bit, bootstrapped, mes.M1+MesCC-compiled #+END_SRC * MesCC compiler #+BEGIN_SRC bash - scripts/mescc -c scaffold/main.c + ./pre-inst env mescc -c scaffold/main.c #+END_SRC * Bugs diff --git a/configure b/configure index 13d6eb3a..506d8f8d 100755 --- a/configure +++ b/configure @@ -378,7 +378,7 @@ Some influential environment variables: (make-dep "help2man" '(1 47) #:optional? #t) (make-dep "perl" '(5) #:optional? #t) (make-dep "git" '(2) #:optional? #t)))) - (deps (cons (check-program-version (make-dep "nyacc" '(0 80 41) #:commands (list (string-append (file-name "guile" deps) " -c '(use-modules (nyacc lalr)) (display *nyacc-version*)'")) #:file-name #t)) + (deps (cons (check-program-version (make-dep "nyacc" '(0 86 0) #:commands (list (string-append (file-name "guile" deps) " -c '(use-modules (nyacc lalr)) (display *nyacc-version*)'")) #:file-name #t)) deps)) (deps (if (file-name "cc" deps) (cons* (check-header-c (make-dep "stdio.h")) diff --git a/doc/images/gcc-mesboot-graph.dot b/doc/images/gcc-mesboot-graph.dot index 4083c8b2..bc4333fb 100644 --- a/doc/images/gcc-mesboot-graph.dot +++ b/doc/images/gcc-mesboot-graph.dot @@ -1,90 +1,124 @@ digraph "Guix bag" { - "/gnu/store/7301q9aw9b444rw60r7sipm3iyfqzwnh-gcc-mesboot-4.7.4.drv" [label = "gcc-mesboot@4.7.4", shape = box, fontname = Helvetica]; - "/gnu/store/7301q9aw9b444rw60r7sipm3iyfqzwnh-gcc-mesboot-4.7.4.drv" -> "/gnu/store/bcgn4pbq8ypwr64lqwpj6i5wmqasgisc-binutils-mesboot-2.20.1a.drv" [color = peachpuff4]; - "/gnu/store/7301q9aw9b444rw60r7sipm3iyfqzwnh-gcc-mesboot-4.7.4.drv" -> "/gnu/store/8075vsabf755bgm8i3f4x1b1pfp8liqc-gcc-mesboot0-2.95.3.drv" [color = peachpuff4]; - "/gnu/store/7301q9aw9b444rw60r7sipm3iyfqzwnh-gcc-mesboot-4.7.4.drv" -> "/gnu/store/jiv0ii6rybn7f3vmny68yfzlw21zndm1-glibc-mesboot0-2.2.5.drv" [color = peachpuff4]; - "/gnu/store/7301q9aw9b444rw60r7sipm3iyfqzwnh-gcc-mesboot-4.7.4.drv" -> "/gnu/store/jjv0nyliqz0sl6hpqn5nv88z1g20a29a-bootstrap-binaries-0.drv" [color = peachpuff4]; - "/gnu/store/7301q9aw9b444rw60r7sipm3iyfqzwnh-gcc-mesboot-4.7.4.drv" -> "/gnu/store/jjv0nyliqz0sl6hpqn5nv88z1g20a29a-bootstrap-binaries-0.drv" [color = peachpuff4]; - "/gnu/store/7301q9aw9b444rw60r7sipm3iyfqzwnh-gcc-mesboot-4.7.4.drv" -> "/gnu/store/f6im9aa6dih27mzbcn0nzhpimx1x3fbz-diffutils-mesboot-2.7.drv" [color = peachpuff4]; - "/gnu/store/7301q9aw9b444rw60r7sipm3iyfqzwnh-gcc-mesboot-4.7.4.drv" -> "/gnu/store/drs84w7k2bjl91virvqgd2vll0c321wp-linux-libre-headers-bootstrap-0.drv" [color = peachpuff4]; - "/gnu/store/7301q9aw9b444rw60r7sipm3iyfqzwnh-gcc-mesboot-4.7.4.drv" -> "/gnu/store/s6g5nfjabl97s0kk4alvgxfs6n8f1k9c-make-mesboot-3.82.drv" [color = peachpuff4]; - "/gnu/store/bcgn4pbq8ypwr64lqwpj6i5wmqasgisc-binutils-mesboot-2.20.1a.drv" [label = "binutils-mesboot@2.20.1a", shape = box, fontname = Helvetica]; - "/gnu/store/bcgn4pbq8ypwr64lqwpj6i5wmqasgisc-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/56ykhaizzgaf05854bdmd9dll0s81zvr-binutils-mesboot0-2.20.1a.drv" [color = peachpuff4]; - "/gnu/store/bcgn4pbq8ypwr64lqwpj6i5wmqasgisc-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/jiv0ii6rybn7f3vmny68yfzlw21zndm1-glibc-mesboot0-2.2.5.drv" [color = peachpuff4]; - "/gnu/store/bcgn4pbq8ypwr64lqwpj6i5wmqasgisc-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/8075vsabf755bgm8i3f4x1b1pfp8liqc-gcc-mesboot0-2.95.3.drv" [color = peachpuff4]; - "/gnu/store/bcgn4pbq8ypwr64lqwpj6i5wmqasgisc-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/jjv0nyliqz0sl6hpqn5nv88z1g20a29a-bootstrap-binaries-0.drv" [color = peachpuff4]; - "/gnu/store/bcgn4pbq8ypwr64lqwpj6i5wmqasgisc-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/jjv0nyliqz0sl6hpqn5nv88z1g20a29a-bootstrap-binaries-0.drv" [color = peachpuff4]; - "/gnu/store/bcgn4pbq8ypwr64lqwpj6i5wmqasgisc-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/f6im9aa6dih27mzbcn0nzhpimx1x3fbz-diffutils-mesboot-2.7.drv" [color = peachpuff4]; - "/gnu/store/bcgn4pbq8ypwr64lqwpj6i5wmqasgisc-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/drs84w7k2bjl91virvqgd2vll0c321wp-linux-libre-headers-bootstrap-0.drv" [color = peachpuff4]; - "/gnu/store/bcgn4pbq8ypwr64lqwpj6i5wmqasgisc-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/jk9r6i5y06jx00pbs36djkl07qvaq37b-make-mesboot0-3.80.drv" [color = peachpuff4]; - "/gnu/store/56ykhaizzgaf05854bdmd9dll0s81zvr-binutils-mesboot0-2.20.1a.drv" [label = "binutils-mesboot0@2.20.1a", shape = box, fontname = Helvetica]; - "/gnu/store/56ykhaizzgaf05854bdmd9dll0s81zvr-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/hx26z6mcprq63wpv7qxvkzfyb7m7y21f-tcc-boot-0.9.27.drv" [color = magenta]; - "/gnu/store/56ykhaizzgaf05854bdmd9dll0s81zvr-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/jjv0nyliqz0sl6hpqn5nv88z1g20a29a-bootstrap-binaries-0.drv" [color = magenta]; - "/gnu/store/56ykhaizzgaf05854bdmd9dll0s81zvr-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/jjv0nyliqz0sl6hpqn5nv88z1g20a29a-bootstrap-binaries-0.drv" [color = magenta]; - "/gnu/store/56ykhaizzgaf05854bdmd9dll0s81zvr-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/f6im9aa6dih27mzbcn0nzhpimx1x3fbz-diffutils-mesboot-2.7.drv" [color = magenta]; - "/gnu/store/56ykhaizzgaf05854bdmd9dll0s81zvr-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/jk9r6i5y06jx00pbs36djkl07qvaq37b-make-mesboot0-3.80.drv" [color = magenta]; - "/gnu/store/hx26z6mcprq63wpv7qxvkzfyb7m7y21f-tcc-boot-0.9.27.drv" [label = "tcc-boot@0.9.27", shape = box, fontname = Helvetica]; - "/gnu/store/hx26z6mcprq63wpv7qxvkzfyb7m7y21f-tcc-boot-0.9.27.drv" -> "/gnu/store/vsmyymmby9k68rk272z9pjz7r2nzakqd-mes-boot-0.17.drv" [color = cyan3]; - "/gnu/store/hx26z6mcprq63wpv7qxvkzfyb7m7y21f-tcc-boot-0.9.27.drv" -> "/gnu/store/0fn8gpb337qkwwyil1n454arihyks016-tcc-boot0-0.9.26-2.b7aa906.drv" [color = cyan3]; - "/gnu/store/hx26z6mcprq63wpv7qxvkzfyb7m7y21f-tcc-boot-0.9.27.drv" -> "/gnu/store/jjv0nyliqz0sl6hpqn5nv88z1g20a29a-bootstrap-binaries-0.drv" [color = cyan3]; - "/gnu/store/vsmyymmby9k68rk272z9pjz7r2nzakqd-mes-boot-0.17.drv" [label = "mes-boot@0.17", shape = box, fontname = Helvetica]; - "/gnu/store/vsmyymmby9k68rk272z9pjz7r2nzakqd-mes-boot-0.17.drv" -> "/gnu/store/sg0wyd627wnjgbz3h81wpw40mvycd9a4-mescc-tools-boot-0.4-1.f02b8f4.drv" [color = peachpuff4]; - "/gnu/store/vsmyymmby9k68rk272z9pjz7r2nzakqd-mes-boot-0.17.drv" -> "/gnu/store/jjv0nyliqz0sl6hpqn5nv88z1g20a29a-bootstrap-binaries-0.drv" [color = peachpuff4]; - "/gnu/store/vsmyymmby9k68rk272z9pjz7r2nzakqd-mes-boot-0.17.drv" -> "/gnu/store/1dz9ddx84s4lgpcayy71kd01w493ab8f-guile-bootstrap-2.0.drv" [color = peachpuff4]; - "/gnu/store/sg0wyd627wnjgbz3h81wpw40mvycd9a4-mescc-tools-boot-0.4-1.f02b8f4.drv" [label = "mescc-tools-boot@0.4-1.f02b8f4", shape = box, fontname = Helvetica]; - "/gnu/store/sg0wyd627wnjgbz3h81wpw40mvycd9a4-mescc-tools-boot-0.4-1.f02b8f4.drv" -> "/gnu/store/jjv0nyliqz0sl6hpqn5nv88z1g20a29a-bootstrap-binaries-0.drv" [color = blue]; - "/gnu/store/jjv0nyliqz0sl6hpqn5nv88z1g20a29a-bootstrap-binaries-0.drv" [label = "bootstrap-binaries@0", shape = box, fontname = Helvetica]; - "/gnu/store/1dz9ddx84s4lgpcayy71kd01w493ab8f-guile-bootstrap-2.0.drv" [label = "guile-bootstrap@2.0", shape = box, fontname = Helvetica]; - "/gnu/store/0fn8gpb337qkwwyil1n454arihyks016-tcc-boot0-0.9.26-2.b7aa906.drv" [label = "tcc-boot0@0.9.26-2.b7aa906", shape = box, fontname = Helvetica]; - "/gnu/store/0fn8gpb337qkwwyil1n454arihyks016-tcc-boot0-0.9.26-2.b7aa906.drv" -> "/gnu/store/vsmyymmby9k68rk272z9pjz7r2nzakqd-mes-boot-0.17.drv" [color = dimgrey]; - "/gnu/store/0fn8gpb337qkwwyil1n454arihyks016-tcc-boot0-0.9.26-2.b7aa906.drv" -> "/gnu/store/sg0wyd627wnjgbz3h81wpw40mvycd9a4-mescc-tools-boot-0.4-1.f02b8f4.drv" [color = dimgrey]; - "/gnu/store/0fn8gpb337qkwwyil1n454arihyks016-tcc-boot0-0.9.26-2.b7aa906.drv" -> "/gnu/store/jjv0nyliqz0sl6hpqn5nv88z1g20a29a-bootstrap-binaries-0.drv" [color = dimgrey]; - "/gnu/store/0fn8gpb337qkwwyil1n454arihyks016-tcc-boot0-0.9.26-2.b7aa906.drv" -> "/gnu/store/1dz9ddx84s4lgpcayy71kd01w493ab8f-guile-bootstrap-2.0.drv" [color = dimgrey]; - "/gnu/store/f6im9aa6dih27mzbcn0nzhpimx1x3fbz-diffutils-mesboot-2.7.drv" [label = "diffutils-mesboot@2.7", shape = box, fontname = Helvetica]; - "/gnu/store/f6im9aa6dih27mzbcn0nzhpimx1x3fbz-diffutils-mesboot-2.7.drv" -> "/gnu/store/vsmyymmby9k68rk272z9pjz7r2nzakqd-mes-boot-0.17.drv" [color = darkgoldenrod]; - "/gnu/store/f6im9aa6dih27mzbcn0nzhpimx1x3fbz-diffutils-mesboot-2.7.drv" -> "/gnu/store/hx26z6mcprq63wpv7qxvkzfyb7m7y21f-tcc-boot-0.9.27.drv" [color = darkgoldenrod]; - "/gnu/store/f6im9aa6dih27mzbcn0nzhpimx1x3fbz-diffutils-mesboot-2.7.drv" -> "/gnu/store/jjv0nyliqz0sl6hpqn5nv88z1g20a29a-bootstrap-binaries-0.drv" [color = darkgoldenrod]; - "/gnu/store/f6im9aa6dih27mzbcn0nzhpimx1x3fbz-diffutils-mesboot-2.7.drv" -> "/gnu/store/jjv0nyliqz0sl6hpqn5nv88z1g20a29a-bootstrap-binaries-0.drv" [color = darkgoldenrod]; - "/gnu/store/f6im9aa6dih27mzbcn0nzhpimx1x3fbz-diffutils-mesboot-2.7.drv" -> "/gnu/store/jk9r6i5y06jx00pbs36djkl07qvaq37b-make-mesboot0-3.80.drv" [color = darkgoldenrod]; - "/gnu/store/jk9r6i5y06jx00pbs36djkl07qvaq37b-make-mesboot0-3.80.drv" [label = "make-mesboot0@3.80", shape = box, fontname = Helvetica]; - "/gnu/store/jk9r6i5y06jx00pbs36djkl07qvaq37b-make-mesboot0-3.80.drv" -> "/gnu/store/hx26z6mcprq63wpv7qxvkzfyb7m7y21f-tcc-boot-0.9.27.drv" [color = blue]; - "/gnu/store/jk9r6i5y06jx00pbs36djkl07qvaq37b-make-mesboot0-3.80.drv" -> "/gnu/store/jjv0nyliqz0sl6hpqn5nv88z1g20a29a-bootstrap-binaries-0.drv" [color = blue]; - "/gnu/store/jk9r6i5y06jx00pbs36djkl07qvaq37b-make-mesboot0-3.80.drv" -> "/gnu/store/jjv0nyliqz0sl6hpqn5nv88z1g20a29a-bootstrap-binaries-0.drv" [color = blue]; - "/gnu/store/jiv0ii6rybn7f3vmny68yfzlw21zndm1-glibc-mesboot0-2.2.5.drv" [label = "glibc-mesboot0@2.2.5", shape = box, fontname = Helvetica]; - "/gnu/store/jiv0ii6rybn7f3vmny68yfzlw21zndm1-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/56ykhaizzgaf05854bdmd9dll0s81zvr-binutils-mesboot0-2.20.1a.drv" [color = magenta]; - "/gnu/store/jiv0ii6rybn7f3vmny68yfzlw21zndm1-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/1lpd2hq50fmk6kfqn1aahrac6apvs6fb-gcc-core-mesboot-2.95.3.drv" [color = magenta]; - "/gnu/store/jiv0ii6rybn7f3vmny68yfzlw21zndm1-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/jjv0nyliqz0sl6hpqn5nv88z1g20a29a-bootstrap-binaries-0.drv" [color = magenta]; - "/gnu/store/jiv0ii6rybn7f3vmny68yfzlw21zndm1-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/jjv0nyliqz0sl6hpqn5nv88z1g20a29a-bootstrap-binaries-0.drv" [color = magenta]; - "/gnu/store/jiv0ii6rybn7f3vmny68yfzlw21zndm1-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/f6im9aa6dih27mzbcn0nzhpimx1x3fbz-diffutils-mesboot-2.7.drv" [color = magenta]; - "/gnu/store/jiv0ii6rybn7f3vmny68yfzlw21zndm1-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/w2iap5yh3bnnw2idxbglnxggbhv7qqmy-mesboot-headers-0.17.drv" [color = magenta]; - "/gnu/store/jiv0ii6rybn7f3vmny68yfzlw21zndm1-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/jk9r6i5y06jx00pbs36djkl07qvaq37b-make-mesboot0-3.80.drv" [color = magenta]; - "/gnu/store/1lpd2hq50fmk6kfqn1aahrac6apvs6fb-gcc-core-mesboot-2.95.3.drv" [label = "gcc-core-mesboot@2.95.3", shape = box, fontname = Helvetica]; - "/gnu/store/1lpd2hq50fmk6kfqn1aahrac6apvs6fb-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/56ykhaizzgaf05854bdmd9dll0s81zvr-binutils-mesboot0-2.20.1a.drv" [color = magenta]; - "/gnu/store/1lpd2hq50fmk6kfqn1aahrac6apvs6fb-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/hx26z6mcprq63wpv7qxvkzfyb7m7y21f-tcc-boot-0.9.27.drv" [color = magenta]; - "/gnu/store/1lpd2hq50fmk6kfqn1aahrac6apvs6fb-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/jjv0nyliqz0sl6hpqn5nv88z1g20a29a-bootstrap-binaries-0.drv" [color = magenta]; - "/gnu/store/1lpd2hq50fmk6kfqn1aahrac6apvs6fb-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/jjv0nyliqz0sl6hpqn5nv88z1g20a29a-bootstrap-binaries-0.drv" [color = magenta]; - "/gnu/store/1lpd2hq50fmk6kfqn1aahrac6apvs6fb-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/f6im9aa6dih27mzbcn0nzhpimx1x3fbz-diffutils-mesboot-2.7.drv" [color = magenta]; - "/gnu/store/1lpd2hq50fmk6kfqn1aahrac6apvs6fb-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/jk9r6i5y06jx00pbs36djkl07qvaq37b-make-mesboot0-3.80.drv" [color = magenta]; - "/gnu/store/w2iap5yh3bnnw2idxbglnxggbhv7qqmy-mesboot-headers-0.17.drv" [label = "mesboot-headers@0.17", shape = box, fontname = Helvetica]; - "/gnu/store/w2iap5yh3bnnw2idxbglnxggbhv7qqmy-mesboot-headers-0.17.drv" -> "/gnu/store/jjv0nyliqz0sl6hpqn5nv88z1g20a29a-bootstrap-binaries-0.drv" [color = red]; - "/gnu/store/w2iap5yh3bnnw2idxbglnxggbhv7qqmy-mesboot-headers-0.17.drv" -> "/gnu/store/drs84w7k2bjl91virvqgd2vll0c321wp-linux-libre-headers-bootstrap-0.drv" [color = red]; - "/gnu/store/drs84w7k2bjl91virvqgd2vll0c321wp-linux-libre-headers-bootstrap-0.drv" [label = "linux-libre-headers-bootstrap@0", shape = box, fontname = Helvetica]; - "/gnu/store/8075vsabf755bgm8i3f4x1b1pfp8liqc-gcc-mesboot0-2.95.3.drv" [label = "gcc-mesboot0@2.95.3", shape = box, fontname = Helvetica]; - "/gnu/store/8075vsabf755bgm8i3f4x1b1pfp8liqc-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/56ykhaizzgaf05854bdmd9dll0s81zvr-binutils-mesboot0-2.20.1a.drv" [color = darkseagreen]; - "/gnu/store/8075vsabf755bgm8i3f4x1b1pfp8liqc-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/1lpd2hq50fmk6kfqn1aahrac6apvs6fb-gcc-core-mesboot-2.95.3.drv" [color = darkseagreen]; - "/gnu/store/8075vsabf755bgm8i3f4x1b1pfp8liqc-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/jiv0ii6rybn7f3vmny68yfzlw21zndm1-glibc-mesboot0-2.2.5.drv" [color = darkseagreen]; - "/gnu/store/8075vsabf755bgm8i3f4x1b1pfp8liqc-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/jjv0nyliqz0sl6hpqn5nv88z1g20a29a-bootstrap-binaries-0.drv" [color = darkseagreen]; - "/gnu/store/8075vsabf755bgm8i3f4x1b1pfp8liqc-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/jjv0nyliqz0sl6hpqn5nv88z1g20a29a-bootstrap-binaries-0.drv" [color = darkseagreen]; - "/gnu/store/8075vsabf755bgm8i3f4x1b1pfp8liqc-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/f6im9aa6dih27mzbcn0nzhpimx1x3fbz-diffutils-mesboot-2.7.drv" [color = darkseagreen]; - "/gnu/store/8075vsabf755bgm8i3f4x1b1pfp8liqc-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/drs84w7k2bjl91virvqgd2vll0c321wp-linux-libre-headers-bootstrap-0.drv" [color = darkseagreen]; - "/gnu/store/8075vsabf755bgm8i3f4x1b1pfp8liqc-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/jk9r6i5y06jx00pbs36djkl07qvaq37b-make-mesboot0-3.80.drv" [color = darkseagreen]; - "/gnu/store/s6g5nfjabl97s0kk4alvgxfs6n8f1k9c-make-mesboot-3.82.drv" [label = "make-mesboot@3.82", shape = box, fontname = Helvetica]; - "/gnu/store/s6g5nfjabl97s0kk4alvgxfs6n8f1k9c-make-mesboot-3.82.drv" -> "/gnu/store/56ykhaizzgaf05854bdmd9dll0s81zvr-binutils-mesboot0-2.20.1a.drv" [color = blue]; - "/gnu/store/s6g5nfjabl97s0kk4alvgxfs6n8f1k9c-make-mesboot-3.82.drv" -> "/gnu/store/jiv0ii6rybn7f3vmny68yfzlw21zndm1-glibc-mesboot0-2.2.5.drv" [color = blue]; - "/gnu/store/s6g5nfjabl97s0kk4alvgxfs6n8f1k9c-make-mesboot-3.82.drv" -> "/gnu/store/8075vsabf755bgm8i3f4x1b1pfp8liqc-gcc-mesboot0-2.95.3.drv" [color = blue]; - "/gnu/store/s6g5nfjabl97s0kk4alvgxfs6n8f1k9c-make-mesboot-3.82.drv" -> "/gnu/store/jk9r6i5y06jx00pbs36djkl07qvaq37b-make-mesboot0-3.80.drv" [color = blue]; - "/gnu/store/s6g5nfjabl97s0kk4alvgxfs6n8f1k9c-make-mesboot-3.82.drv" -> "/gnu/store/jjv0nyliqz0sl6hpqn5nv88z1g20a29a-bootstrap-binaries-0.drv" [color = blue]; - "/gnu/store/s6g5nfjabl97s0kk4alvgxfs6n8f1k9c-make-mesboot-3.82.drv" -> "/gnu/store/jjv0nyliqz0sl6hpqn5nv88z1g20a29a-bootstrap-binaries-0.drv" [color = blue]; - "/gnu/store/s6g5nfjabl97s0kk4alvgxfs6n8f1k9c-make-mesboot-3.82.drv" -> "/gnu/store/drs84w7k2bjl91virvqgd2vll0c321wp-linux-libre-headers-bootstrap-0.drv" [color = blue]; + "/gnu/store/k9iiipnm44yl1j7lq1b4llh9fmjb482i-gcc-mesboot-4.9.4.drv" [label = "gcc-mesboot@4.9.4", shape = box, fontname = Helvetica]; + "/gnu/store/k9iiipnm44yl1j7lq1b4llh9fmjb482i-gcc-mesboot-4.9.4.drv" -> "/gnu/store/rpz0s3f2cfhsvj6734ss2j4jqisly67x-binutils-mesboot-2.20.1a.drv" [color = darkgoldenrod]; + "/gnu/store/k9iiipnm44yl1j7lq1b4llh9fmjb482i-gcc-mesboot-4.9.4.drv" -> "/gnu/store/7nv5rwsxx4v2g5fgbilj0c96gx34897q-gcc-mesboot1-wrapper-4.7.4.drv" [color = darkgoldenrod]; + "/gnu/store/k9iiipnm44yl1j7lq1b4llh9fmjb482i-gcc-mesboot-4.9.4.drv" -> "/gnu/store/9bi0anc7vq3m6zm845wyaq9mfdasyqkg-gcc-mesboot1-4.7.4.drv" [color = darkgoldenrod]; + "/gnu/store/k9iiipnm44yl1j7lq1b4llh9fmjb482i-gcc-mesboot-4.9.4.drv" -> "/gnu/store/1aqmzzsa18kmckm6jw9slr4i0xkrw9g0-glibc-mesboot-2.16.0.drv" [color = darkgoldenrod]; + "/gnu/store/k9iiipnm44yl1j7lq1b4llh9fmjb482i-gcc-mesboot-4.9.4.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkgoldenrod]; + "/gnu/store/k9iiipnm44yl1j7lq1b4llh9fmjb482i-gcc-mesboot-4.9.4.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkgoldenrod]; + "/gnu/store/k9iiipnm44yl1j7lq1b4llh9fmjb482i-gcc-mesboot-4.9.4.drv" -> "/gnu/store/jrqric1r8zyiw50rzb6q2mrfhf3yi0nc-diffutils-mesboot-2.7.drv" [color = darkgoldenrod]; + "/gnu/store/k9iiipnm44yl1j7lq1b4llh9fmjb482i-gcc-mesboot-4.9.4.drv" -> "/gnu/store/72kjcwwjxbkhblx6wrfd7kn2y0lmfyy0-linux-libre-headers-bootstrap-0.drv" [color = darkgoldenrod]; + "/gnu/store/k9iiipnm44yl1j7lq1b4llh9fmjb482i-gcc-mesboot-4.9.4.drv" -> "/gnu/store/b84wdn9yjagp0z7dklqaac3nhabllcxp-make-mesboot-3.82.drv" [color = darkgoldenrod]; + "/gnu/store/rpz0s3f2cfhsvj6734ss2j4jqisly67x-binutils-mesboot-2.20.1a.drv" [label = "binutils-mesboot@2.20.1a", shape = box, fontname = Helvetica]; + "/gnu/store/rpz0s3f2cfhsvj6734ss2j4jqisly67x-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/6112c8hrb47fd1svdjyaiy79x3r1ryv3-binutils-mesboot0-2.20.1a.drv" [color = darkviolet]; + "/gnu/store/rpz0s3f2cfhsvj6734ss2j4jqisly67x-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/yc8llxzasyyq94h71knnd3p0fqkbhd37-glibc-mesboot0-2.2.5.drv" [color = darkviolet]; + "/gnu/store/rpz0s3f2cfhsvj6734ss2j4jqisly67x-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/20r0xxzq1nah1rx23sv5d22sjlinj820-gcc-mesboot0-2.95.3.drv" [color = darkviolet]; + "/gnu/store/rpz0s3f2cfhsvj6734ss2j4jqisly67x-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkviolet]; + "/gnu/store/rpz0s3f2cfhsvj6734ss2j4jqisly67x-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkviolet]; + "/gnu/store/rpz0s3f2cfhsvj6734ss2j4jqisly67x-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/jrqric1r8zyiw50rzb6q2mrfhf3yi0nc-diffutils-mesboot-2.7.drv" [color = darkviolet]; + "/gnu/store/rpz0s3f2cfhsvj6734ss2j4jqisly67x-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/72kjcwwjxbkhblx6wrfd7kn2y0lmfyy0-linux-libre-headers-bootstrap-0.drv" [color = darkviolet]; + "/gnu/store/rpz0s3f2cfhsvj6734ss2j4jqisly67x-binutils-mesboot-2.20.1a.drv" -> "/gnu/store/qkrrqygyc11bq450xq4jxkaj4aqf8xlv-make-mesboot0-3.80.drv" [color = darkviolet]; + "/gnu/store/6112c8hrb47fd1svdjyaiy79x3r1ryv3-binutils-mesboot0-2.20.1a.drv" [label = "binutils-mesboot0@2.20.1a", shape = box, fontname = Helvetica]; + "/gnu/store/6112c8hrb47fd1svdjyaiy79x3r1ryv3-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/15srbzj4y43vwfv79fxf1v1ajjw5kjwa-tcc-boot-0.9.27.drv" [color = red]; + "/gnu/store/6112c8hrb47fd1svdjyaiy79x3r1ryv3-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = red]; + "/gnu/store/6112c8hrb47fd1svdjyaiy79x3r1ryv3-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = red]; + "/gnu/store/6112c8hrb47fd1svdjyaiy79x3r1ryv3-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/jrqric1r8zyiw50rzb6q2mrfhf3yi0nc-diffutils-mesboot-2.7.drv" [color = red]; + "/gnu/store/6112c8hrb47fd1svdjyaiy79x3r1ryv3-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/qkrrqygyc11bq450xq4jxkaj4aqf8xlv-make-mesboot0-3.80.drv" [color = red]; + "/gnu/store/15srbzj4y43vwfv79fxf1v1ajjw5kjwa-tcc-boot-0.9.27.drv" [label = "tcc-boot@0.9.27", shape = box, fontname = Helvetica]; + "/gnu/store/15srbzj4y43vwfv79fxf1v1ajjw5kjwa-tcc-boot-0.9.27.drv" -> "/gnu/store/gvh2cb2arylz028y5ak3c9s4gxngfj50-mes-boot-0.18.drv" [color = darkgoldenrod]; + "/gnu/store/15srbzj4y43vwfv79fxf1v1ajjw5kjwa-tcc-boot-0.9.27.drv" -> "/gnu/store/4lbzsyzndxc3pp0rqd7qkd2fr278xnrb-tcc-boot0-0.9.26-4.46ee3f1.drv" [color = darkgoldenrod]; + "/gnu/store/15srbzj4y43vwfv79fxf1v1ajjw5kjwa-tcc-boot-0.9.27.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkgoldenrod]; + "/gnu/store/gvh2cb2arylz028y5ak3c9s4gxngfj50-mes-boot-0.18.drv" [label = "mes-boot@0.18", shape = box, fontname = Helvetica]; + "/gnu/store/gvh2cb2arylz028y5ak3c9s4gxngfj50-mes-boot-0.18.drv" -> "/gnu/store/q6bf80szhn5cfyhyl7m2aakj4f7hlyrh-mescc-tools-boot-0.5.2.drv" [color = cyan3]; + "/gnu/store/gvh2cb2arylz028y5ak3c9s4gxngfj50-mes-boot-0.18.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = cyan3]; + "/gnu/store/gvh2cb2arylz028y5ak3c9s4gxngfj50-mes-boot-0.18.drv" -> "/gnu/store/gz3agxnnlgkafw2c8jnvk2hqmlh85pkc-guile-bootstrap-2.0.drv" [color = cyan3]; + "/gnu/store/q6bf80szhn5cfyhyl7m2aakj4f7hlyrh-mescc-tools-boot-0.5.2.drv" [label = "mescc-tools-boot@0.5.2", shape = box, fontname = Helvetica]; + "/gnu/store/q6bf80szhn5cfyhyl7m2aakj4f7hlyrh-mescc-tools-boot-0.5.2.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkviolet]; + "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [label = "bootstrap-binaries@0", shape = box, fontname = Helvetica]; + "/gnu/store/gz3agxnnlgkafw2c8jnvk2hqmlh85pkc-guile-bootstrap-2.0.drv" [label = "guile-bootstrap@2.0", shape = box, fontname = Helvetica]; + "/gnu/store/4lbzsyzndxc3pp0rqd7qkd2fr278xnrb-tcc-boot0-0.9.26-4.46ee3f1.drv" [label = "tcc-boot0@0.9.26-4.46ee3f1", shape = box, fontname = Helvetica]; + "/gnu/store/4lbzsyzndxc3pp0rqd7qkd2fr278xnrb-tcc-boot0-0.9.26-4.46ee3f1.drv" -> "/gnu/store/gvh2cb2arylz028y5ak3c9s4gxngfj50-mes-boot-0.18.drv" [color = darkseagreen]; + "/gnu/store/4lbzsyzndxc3pp0rqd7qkd2fr278xnrb-tcc-boot0-0.9.26-4.46ee3f1.drv" -> "/gnu/store/q6bf80szhn5cfyhyl7m2aakj4f7hlyrh-mescc-tools-boot-0.5.2.drv" [color = darkseagreen]; + "/gnu/store/4lbzsyzndxc3pp0rqd7qkd2fr278xnrb-tcc-boot0-0.9.26-4.46ee3f1.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkseagreen]; + "/gnu/store/4lbzsyzndxc3pp0rqd7qkd2fr278xnrb-tcc-boot0-0.9.26-4.46ee3f1.drv" -> "/gnu/store/gz3agxnnlgkafw2c8jnvk2hqmlh85pkc-guile-bootstrap-2.0.drv" [color = darkseagreen]; + "/gnu/store/jrqric1r8zyiw50rzb6q2mrfhf3yi0nc-diffutils-mesboot-2.7.drv" [label = "diffutils-mesboot@2.7", shape = box, fontname = Helvetica]; + "/gnu/store/jrqric1r8zyiw50rzb6q2mrfhf3yi0nc-diffutils-mesboot-2.7.drv" -> "/gnu/store/gvh2cb2arylz028y5ak3c9s4gxngfj50-mes-boot-0.18.drv" [color = red]; + "/gnu/store/jrqric1r8zyiw50rzb6q2mrfhf3yi0nc-diffutils-mesboot-2.7.drv" -> "/gnu/store/15srbzj4y43vwfv79fxf1v1ajjw5kjwa-tcc-boot-0.9.27.drv" [color = red]; + "/gnu/store/jrqric1r8zyiw50rzb6q2mrfhf3yi0nc-diffutils-mesboot-2.7.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = red]; + "/gnu/store/jrqric1r8zyiw50rzb6q2mrfhf3yi0nc-diffutils-mesboot-2.7.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = red]; + "/gnu/store/jrqric1r8zyiw50rzb6q2mrfhf3yi0nc-diffutils-mesboot-2.7.drv" -> "/gnu/store/qkrrqygyc11bq450xq4jxkaj4aqf8xlv-make-mesboot0-3.80.drv" [color = red]; + "/gnu/store/qkrrqygyc11bq450xq4jxkaj4aqf8xlv-make-mesboot0-3.80.drv" [label = "make-mesboot0@3.80", shape = box, fontname = Helvetica]; + "/gnu/store/qkrrqygyc11bq450xq4jxkaj4aqf8xlv-make-mesboot0-3.80.drv" -> "/gnu/store/15srbzj4y43vwfv79fxf1v1ajjw5kjwa-tcc-boot-0.9.27.drv" [color = blue]; + "/gnu/store/qkrrqygyc11bq450xq4jxkaj4aqf8xlv-make-mesboot0-3.80.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = blue]; + "/gnu/store/qkrrqygyc11bq450xq4jxkaj4aqf8xlv-make-mesboot0-3.80.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = blue]; + "/gnu/store/yc8llxzasyyq94h71knnd3p0fqkbhd37-glibc-mesboot0-2.2.5.drv" [label = "glibc-mesboot0@2.2.5", shape = box, fontname = Helvetica]; + "/gnu/store/yc8llxzasyyq94h71knnd3p0fqkbhd37-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/6112c8hrb47fd1svdjyaiy79x3r1ryv3-binutils-mesboot0-2.20.1a.drv" [color = dimgrey]; + "/gnu/store/yc8llxzasyyq94h71knnd3p0fqkbhd37-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/3hqzkw9ag2f3p1skzynr0wq3499ghmsf-gcc-core-mesboot-2.95.3.drv" [color = dimgrey]; + "/gnu/store/yc8llxzasyyq94h71knnd3p0fqkbhd37-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = dimgrey]; + "/gnu/store/yc8llxzasyyq94h71knnd3p0fqkbhd37-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = dimgrey]; + "/gnu/store/yc8llxzasyyq94h71knnd3p0fqkbhd37-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/jrqric1r8zyiw50rzb6q2mrfhf3yi0nc-diffutils-mesboot-2.7.drv" [color = dimgrey]; + "/gnu/store/yc8llxzasyyq94h71knnd3p0fqkbhd37-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/sivwa9pmj19nfad8zavgqjll11hahcyb-mesboot-headers-0.18.drv" [color = dimgrey]; + "/gnu/store/yc8llxzasyyq94h71knnd3p0fqkbhd37-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/qkrrqygyc11bq450xq4jxkaj4aqf8xlv-make-mesboot0-3.80.drv" [color = dimgrey]; + "/gnu/store/3hqzkw9ag2f3p1skzynr0wq3499ghmsf-gcc-core-mesboot-2.95.3.drv" [label = "gcc-core-mesboot@2.95.3", shape = box, fontname = Helvetica]; + "/gnu/store/3hqzkw9ag2f3p1skzynr0wq3499ghmsf-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/6112c8hrb47fd1svdjyaiy79x3r1ryv3-binutils-mesboot0-2.20.1a.drv" [color = darkgoldenrod]; + "/gnu/store/3hqzkw9ag2f3p1skzynr0wq3499ghmsf-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/15srbzj4y43vwfv79fxf1v1ajjw5kjwa-tcc-boot-0.9.27.drv" [color = darkgoldenrod]; + "/gnu/store/3hqzkw9ag2f3p1skzynr0wq3499ghmsf-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkgoldenrod]; + "/gnu/store/3hqzkw9ag2f3p1skzynr0wq3499ghmsf-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkgoldenrod]; + "/gnu/store/3hqzkw9ag2f3p1skzynr0wq3499ghmsf-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/jrqric1r8zyiw50rzb6q2mrfhf3yi0nc-diffutils-mesboot-2.7.drv" [color = darkgoldenrod]; + "/gnu/store/3hqzkw9ag2f3p1skzynr0wq3499ghmsf-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/qkrrqygyc11bq450xq4jxkaj4aqf8xlv-make-mesboot0-3.80.drv" [color = darkgoldenrod]; + "/gnu/store/sivwa9pmj19nfad8zavgqjll11hahcyb-mesboot-headers-0.18.drv" [label = "mesboot-headers@0.18", shape = box, fontname = Helvetica]; + "/gnu/store/sivwa9pmj19nfad8zavgqjll11hahcyb-mesboot-headers-0.18.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkviolet]; + "/gnu/store/sivwa9pmj19nfad8zavgqjll11hahcyb-mesboot-headers-0.18.drv" -> "/gnu/store/72kjcwwjxbkhblx6wrfd7kn2y0lmfyy0-linux-libre-headers-bootstrap-0.drv" [color = darkviolet]; + "/gnu/store/72kjcwwjxbkhblx6wrfd7kn2y0lmfyy0-linux-libre-headers-bootstrap-0.drv" [label = "linux-libre-headers-bootstrap@0", shape = box, fontname = Helvetica]; + "/gnu/store/20r0xxzq1nah1rx23sv5d22sjlinj820-gcc-mesboot0-2.95.3.drv" [label = "gcc-mesboot0@2.95.3", shape = box, fontname = Helvetica]; + "/gnu/store/20r0xxzq1nah1rx23sv5d22sjlinj820-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/6112c8hrb47fd1svdjyaiy79x3r1ryv3-binutils-mesboot0-2.20.1a.drv" [color = darkviolet]; + "/gnu/store/20r0xxzq1nah1rx23sv5d22sjlinj820-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/3hqzkw9ag2f3p1skzynr0wq3499ghmsf-gcc-core-mesboot-2.95.3.drv" [color = darkviolet]; + "/gnu/store/20r0xxzq1nah1rx23sv5d22sjlinj820-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/yc8llxzasyyq94h71knnd3p0fqkbhd37-glibc-mesboot0-2.2.5.drv" [color = darkviolet]; + "/gnu/store/20r0xxzq1nah1rx23sv5d22sjlinj820-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkviolet]; + "/gnu/store/20r0xxzq1nah1rx23sv5d22sjlinj820-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkviolet]; + "/gnu/store/20r0xxzq1nah1rx23sv5d22sjlinj820-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/jrqric1r8zyiw50rzb6q2mrfhf3yi0nc-diffutils-mesboot-2.7.drv" [color = darkviolet]; + "/gnu/store/20r0xxzq1nah1rx23sv5d22sjlinj820-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/72kjcwwjxbkhblx6wrfd7kn2y0lmfyy0-linux-libre-headers-bootstrap-0.drv" [color = darkviolet]; + "/gnu/store/20r0xxzq1nah1rx23sv5d22sjlinj820-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/qkrrqygyc11bq450xq4jxkaj4aqf8xlv-make-mesboot0-3.80.drv" [color = darkviolet]; + "/gnu/store/7nv5rwsxx4v2g5fgbilj0c96gx34897q-gcc-mesboot1-wrapper-4.7.4.drv" [label = "gcc-mesboot1-wrapper@4.7.4", shape = box, fontname = Helvetica]; + "/gnu/store/7nv5rwsxx4v2g5fgbilj0c96gx34897q-gcc-mesboot1-wrapper-4.7.4.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = blue]; + "/gnu/store/7nv5rwsxx4v2g5fgbilj0c96gx34897q-gcc-mesboot1-wrapper-4.7.4.drv" -> "/gnu/store/1aqmzzsa18kmckm6jw9slr4i0xkrw9g0-glibc-mesboot-2.16.0.drv" [color = blue]; + "/gnu/store/7nv5rwsxx4v2g5fgbilj0c96gx34897q-gcc-mesboot1-wrapper-4.7.4.drv" -> "/gnu/store/9bi0anc7vq3m6zm845wyaq9mfdasyqkg-gcc-mesboot1-4.7.4.drv" [color = blue]; + "/gnu/store/1aqmzzsa18kmckm6jw9slr4i0xkrw9g0-glibc-mesboot-2.16.0.drv" [label = "glibc-mesboot@2.16.0", shape = box, fontname = Helvetica]; + "/gnu/store/1aqmzzsa18kmckm6jw9slr4i0xkrw9g0-glibc-mesboot-2.16.0.drv" -> "/gnu/store/rpz0s3f2cfhsvj6734ss2j4jqisly67x-binutils-mesboot-2.20.1a.drv" [color = darkseagreen]; + "/gnu/store/1aqmzzsa18kmckm6jw9slr4i0xkrw9g0-glibc-mesboot-2.16.0.drv" -> "/gnu/store/yc8llxzasyyq94h71knnd3p0fqkbhd37-glibc-mesboot0-2.2.5.drv" [color = darkseagreen]; + "/gnu/store/1aqmzzsa18kmckm6jw9slr4i0xkrw9g0-glibc-mesboot-2.16.0.drv" -> "/gnu/store/hcyw9rs7n3w9kj3xf230509fhjqfxcvj-glibc-headers-mesboot-2.16.0.drv" [color = darkseagreen]; + "/gnu/store/1aqmzzsa18kmckm6jw9slr4i0xkrw9g0-glibc-mesboot-2.16.0.drv" -> "/gnu/store/9bi0anc7vq3m6zm845wyaq9mfdasyqkg-gcc-mesboot1-4.7.4.drv" [color = darkseagreen]; + "/gnu/store/1aqmzzsa18kmckm6jw9slr4i0xkrw9g0-glibc-mesboot-2.16.0.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkseagreen]; + "/gnu/store/1aqmzzsa18kmckm6jw9slr4i0xkrw9g0-glibc-mesboot-2.16.0.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkseagreen]; + "/gnu/store/1aqmzzsa18kmckm6jw9slr4i0xkrw9g0-glibc-mesboot-2.16.0.drv" -> "/gnu/store/jrqric1r8zyiw50rzb6q2mrfhf3yi0nc-diffutils-mesboot-2.7.drv" [color = darkseagreen]; + "/gnu/store/1aqmzzsa18kmckm6jw9slr4i0xkrw9g0-glibc-mesboot-2.16.0.drv" -> "/gnu/store/72kjcwwjxbkhblx6wrfd7kn2y0lmfyy0-linux-libre-headers-bootstrap-0.drv" [color = darkseagreen]; + "/gnu/store/1aqmzzsa18kmckm6jw9slr4i0xkrw9g0-glibc-mesboot-2.16.0.drv" -> "/gnu/store/b84wdn9yjagp0z7dklqaac3nhabllcxp-make-mesboot-3.82.drv" [color = darkseagreen]; + "/gnu/store/hcyw9rs7n3w9kj3xf230509fhjqfxcvj-glibc-headers-mesboot-2.16.0.drv" [label = "glibc-headers-mesboot@2.16.0", shape = box, fontname = Helvetica]; + "/gnu/store/hcyw9rs7n3w9kj3xf230509fhjqfxcvj-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/rpz0s3f2cfhsvj6734ss2j4jqisly67x-binutils-mesboot-2.20.1a.drv" [color = darkseagreen]; + "/gnu/store/hcyw9rs7n3w9kj3xf230509fhjqfxcvj-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/yc8llxzasyyq94h71knnd3p0fqkbhd37-glibc-mesboot0-2.2.5.drv" [color = darkseagreen]; + "/gnu/store/hcyw9rs7n3w9kj3xf230509fhjqfxcvj-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/9bi0anc7vq3m6zm845wyaq9mfdasyqkg-gcc-mesboot1-4.7.4.drv" [color = darkseagreen]; + "/gnu/store/hcyw9rs7n3w9kj3xf230509fhjqfxcvj-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/sivwa9pmj19nfad8zavgqjll11hahcyb-mesboot-headers-0.18.drv" [color = darkseagreen]; + "/gnu/store/hcyw9rs7n3w9kj3xf230509fhjqfxcvj-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkseagreen]; + "/gnu/store/hcyw9rs7n3w9kj3xf230509fhjqfxcvj-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkseagreen]; + "/gnu/store/hcyw9rs7n3w9kj3xf230509fhjqfxcvj-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/jrqric1r8zyiw50rzb6q2mrfhf3yi0nc-diffutils-mesboot-2.7.drv" [color = darkseagreen]; + "/gnu/store/hcyw9rs7n3w9kj3xf230509fhjqfxcvj-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/72kjcwwjxbkhblx6wrfd7kn2y0lmfyy0-linux-libre-headers-bootstrap-0.drv" [color = darkseagreen]; + "/gnu/store/hcyw9rs7n3w9kj3xf230509fhjqfxcvj-glibc-headers-mesboot-2.16.0.drv" -> "/gnu/store/b84wdn9yjagp0z7dklqaac3nhabllcxp-make-mesboot-3.82.drv" [color = darkseagreen]; + "/gnu/store/9bi0anc7vq3m6zm845wyaq9mfdasyqkg-gcc-mesboot1-4.7.4.drv" [label = "gcc-mesboot1@4.7.4", shape = box, fontname = Helvetica]; + "/gnu/store/9bi0anc7vq3m6zm845wyaq9mfdasyqkg-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/rpz0s3f2cfhsvj6734ss2j4jqisly67x-binutils-mesboot-2.20.1a.drv" [color = darkseagreen]; + "/gnu/store/9bi0anc7vq3m6zm845wyaq9mfdasyqkg-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/20r0xxzq1nah1rx23sv5d22sjlinj820-gcc-mesboot0-2.95.3.drv" [color = darkseagreen]; + "/gnu/store/9bi0anc7vq3m6zm845wyaq9mfdasyqkg-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/yc8llxzasyyq94h71knnd3p0fqkbhd37-glibc-mesboot0-2.2.5.drv" [color = darkseagreen]; + "/gnu/store/9bi0anc7vq3m6zm845wyaq9mfdasyqkg-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkseagreen]; + "/gnu/store/9bi0anc7vq3m6zm845wyaq9mfdasyqkg-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkseagreen]; + "/gnu/store/9bi0anc7vq3m6zm845wyaq9mfdasyqkg-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/jrqric1r8zyiw50rzb6q2mrfhf3yi0nc-diffutils-mesboot-2.7.drv" [color = darkseagreen]; + "/gnu/store/9bi0anc7vq3m6zm845wyaq9mfdasyqkg-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/72kjcwwjxbkhblx6wrfd7kn2y0lmfyy0-linux-libre-headers-bootstrap-0.drv" [color = darkseagreen]; + "/gnu/store/9bi0anc7vq3m6zm845wyaq9mfdasyqkg-gcc-mesboot1-4.7.4.drv" -> "/gnu/store/b84wdn9yjagp0z7dklqaac3nhabllcxp-make-mesboot-3.82.drv" [color = darkseagreen]; + "/gnu/store/b84wdn9yjagp0z7dklqaac3nhabllcxp-make-mesboot-3.82.drv" [label = "make-mesboot@3.82", shape = box, fontname = Helvetica]; + "/gnu/store/b84wdn9yjagp0z7dklqaac3nhabllcxp-make-mesboot-3.82.drv" -> "/gnu/store/6112c8hrb47fd1svdjyaiy79x3r1ryv3-binutils-mesboot0-2.20.1a.drv" [color = darkgoldenrod]; + "/gnu/store/b84wdn9yjagp0z7dklqaac3nhabllcxp-make-mesboot-3.82.drv" -> "/gnu/store/yc8llxzasyyq94h71knnd3p0fqkbhd37-glibc-mesboot0-2.2.5.drv" [color = darkgoldenrod]; + "/gnu/store/b84wdn9yjagp0z7dklqaac3nhabllcxp-make-mesboot-3.82.drv" -> "/gnu/store/20r0xxzq1nah1rx23sv5d22sjlinj820-gcc-mesboot0-2.95.3.drv" [color = darkgoldenrod]; + "/gnu/store/b84wdn9yjagp0z7dklqaac3nhabllcxp-make-mesboot-3.82.drv" -> "/gnu/store/qkrrqygyc11bq450xq4jxkaj4aqf8xlv-make-mesboot0-3.80.drv" [color = darkgoldenrod]; + "/gnu/store/b84wdn9yjagp0z7dklqaac3nhabllcxp-make-mesboot-3.82.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkgoldenrod]; + "/gnu/store/b84wdn9yjagp0z7dklqaac3nhabllcxp-make-mesboot-3.82.drv" -> "/gnu/store/ksmskl74pjjanjvak62pnyxpkphylrnf-bootstrap-binaries-0.drv" [color = darkgoldenrod]; + "/gnu/store/b84wdn9yjagp0z7dklqaac3nhabllcxp-make-mesboot-3.82.drv" -> "/gnu/store/72kjcwwjxbkhblx6wrfd7kn2y0lmfyy0-linux-libre-headers-bootstrap-0.drv" [color = darkgoldenrod]; } diff --git a/doc/mes.texi b/doc/mes.texi index 8797318c..2f4feb1c 100644 --- a/doc/mes.texi +++ b/doc/mes.texi @@ -115,13 +115,19 @@ These were “Maxwell’s Equations of Software!” @author Alan Kay @end quotation -GNU Mes@footnote{``Mes'' is an acronym for the Maxwell Equations of -Software.} consists of a mutual self-hosting Scheme interpreter written -in C and a Nyacc-based (see @pxref{NYACC User's Guide,,, nyacc-ug, NYACC -User's Guide}) C compiler written in Scheme. +The purpose of GNU Mes@footnote{``Mes'' is an acronym for the Maxwell +Equations of Software.} is to help create a computer operating system +that we can trust. -The Scheme interpreter @file{mes.c} is about 5000LOC of restricted C and -intended to be bootstrappable using a very simple C compiler. +Mes consists of a mutual self-hosting Scheme interpreter written in C +and a Nyacc-based (see @pxref{NYACC User's Guide,,, nyacc-ug, NYACC +User's Guide}) C compiler written in Scheme. The Scheme interpreter +@file{mes.c} is about 5000LOC of restricted C and intended to be +bootstrappable using a very simple C compiler. + +If we want to trust our computers to do what we instructed them to do +then we need to be able to inspect all instructions---all +softwares---that we have given it to run. @section Software Freedom @cindex purpose @@ -154,11 +160,25 @@ essential freedoms: @end enumerate @end quotation -So we have access to the software, we have studied it, possibly modified -it, we built it and we installed it on a computer or some device. How -can we trust that when we run the program we are indeed running the -untainted product of the source code that we studied? Unless we are -certain of this we cannot really enjoy freedom 1. +A computer operating system that respects the user's freedom is one +essential ingredient for building a reliable, trustable computing +system. There are about a dozen general purpose operating systems that +can be trusted in this way, see +@url{https://www.gnu.org/distros/free-distros.html, Free Distributions}. +For all softwares on such a system we have the full source code and +build recipes available. + +@c The Free System Distribution Guidelines (GNU FSDG)@footnote{Examples of +@c free operating systems are GNU GuixSD, GNU Parabola and Trisquel, see +@c https://www.gnu.org/distros/free-system-distribution-guidelines.html} +@c can serve as help to create such a system + +So we have access to all the software, we have studied it, possibly +modified it, then we built it and we installed it on a computer or some +device or appliance. How can we trust that when we run the program we +are indeed running the untainted product of the source code that we +studied? Unless we are certain of this we cannot really enjoy +Freedom 1. @menu * Reproducible Builds:: Reproducibility and free software. @@ -170,8 +190,10 @@ certain of this we cannot really enjoy freedom 1. @section Reproducible Builds The current Reproducible Builds effort incubated in the Debian -project@footnote{@url{http://debian.org, The Debian Project}} and was organized by Lunar. Quoting -the Reproducible Builds website@footnote{@url{https://reproducible-builds.org/,Reproducible Builds}} +project@footnote{@url{http://debian.org, The Debian Project}} and was +organized by Lunar. Quoting the Reproducible Builds +website@footnote{@url{https://reproducible-builds.org/,Reproducible +Builds}} @quotation A build is reproducible if given the same source code, build environment @@ -183,11 +205,11 @@ copies of all specified artifacts. Now consider the opposite, that a second build of a piece of source code produces a different binary program. Upon further investigation we -might find that the only difference is a timestamp that was embedded in -the binary, or perhaps the name of the directory it was built in. Such -investigations can be nontrivial and are highly unpractical. And what -if the binary difference is not so trivial, cannot be easily accounted -for? +might find that the only difference is probably harmless: a timestamp +that was embedded in the binary, or perhaps the name of the user that +built it or directory it was built in. Such investigations can be +nontrivial and are highly unpractical. And what if the binary +difference is not so trivial, cannot be easily accounted for? A piece of software that cannot be built bit-by-bit reproducible is probably not a good community member in the world of software freedom. @@ -233,8 +255,8 @@ seeds that are used to start building the distribution. The GNU GuixSD operating system has a relatively small closure of bootstrap binaries: GNU binutils, GNU gcc, GNU Libc, GNU Guile, and -``Static binaries'' (think: bash, coreutils, diffutils, findutils, -gawk, grep, gzip, make, sed, tar) +``Static binaries'' (think: bash, bzip2, coreutils, gawk, grep, gzip, +patch, sed, tar, xz). @example $ du -schx $(readlink $(guix build bootstrap-tarballs)/*) @@ -267,16 +289,113 @@ $ du -schx * There is an obvious solution: we cannot allow any binary seeds in our software stack. Not even in the bootstrap binaries. Maybe that is a bit too strong: we want to have the absolute minimum of binary seeds and -all binary seeds need to be inspectable and must be reviewed. +all binary seeds need to be inspectable and must be reviewed. How big +would the absolute minimal set be? @subsection The Magical Self-Hosting Hex Assembler June 2016 I learnt about @url{https://github.com/oriansj/stage0/,Stage0}. Jeremiah Orians -created `hex0' a ~500 byte self-hosting hex assembler. The source code -is well documented and the binary is the exact mirror of the source -code. I was inspired: what if we could bootstrap a whole GNU -distribution from source, using only an initial 500 byte binary seed? +created @file{hex0} a ~500 byte self-hosting hex assembler. The source +code is well documented and the binary is the exact mirror of the source +code. I was inspired. + +Here is an example of what the @file{hex0} program looks like; the start +of the @var{hex} function + +@example +00000060: 4883 f830 7c6f 4883 f83a 7c5a 4883 f841 H..0|oH..:|ZH..A +@dots{} +000000d0: 48c7 c0ff ffff ffc3 0000 0000 0000 0000 H............... +000000e0: 4883 e830 c300 0000 0000 0000 0000 0000 H..0............ +@end example + +All computer programs look like this: an opaque list of computer codes. +The initial programs that we take for granted---the bootstrap +binaries---are about 250MB of such numbers: think 250,000 pages full of +numbers. + +Most computers work pretty well so apparently there is not a pressing +need to inspect and study all of these codes. At the same time it is +tricky to fully trust@footnote{ Ken Thompson's 1984 Turing award +acceptance speech +@url{http://www.ece.cmu.edu/~ganger/712.fall02/papers/p761-thompson.pdf, +Reflections on Trusting Tust}.} a computer that was bootstrapped in this +way. + +Here is what the source code of the @file{hex0} assembler looks like + +@example +## function: hex +48 83 f8 30 # cmp $0x30,%rax +7c 6f # jl 6000f3 +48 83 f8 3a # cmp $0x3a,%rax +7c 5a # jl 6000e4 +48 83 f8 41 # cmp $0x41,%rax +@dots{} +## function: ascii_other +48 c7 c0 ff ff ff ff # mov $0xffffffffffffffff,%rax +c3 # ret +@dots{} +## function: ascii_num +48 83 e8 30 # sub $0x30,%rax +c3 # ret +@end example + +While it may be hard to understand what this piece of the program does, +it should be possible for anyone to verify that the computer codes above +correspond to the source code with comments. + +One step beyond these annotated codes is Assembly language. To write a +program in Assembly, you only need to provide the instructions; the +codes are computed by the @file{assembler} program. + +@example +hex: + # deal all ascii less than 0 + cmp $48, %rax + jl ascii_other + # deal with 0-9 + cmp $58, %rax + jl ascii_num +@dots{} +ascii_other: + mov $-1, %rax + ret +ascii_num: + sub $48, %rax + ret +@end example + +More readable still, a similar program text in the C programming language. + +@example +int +hex (int c) +@{ + if (c >= '0' && c <= '9') + return c - 48; +@dots{} +@} +@end example + +What if we could bootstrap our entire system from only this one +@file{hex0} assembler binary seed? We would only ever need to inspect +these 500 bytes of computer codes. Every@footnote{Some program +languages have become very hard or practically impossible to bootstrap. +Instead of depending on a simple language such as C, they depend on a +recent version of itself, or on other binary or ASCII seeds, on other +recent programs written in that language, or even on manual +intervention. Programs written in a language that cannot be +bootstrapped can still run on our systems, but cannot enjoy any of the +trust we intend to create.} later program is written in a more friendly +programming language: Assembly, C, @dots{} Scheme. + +Inspecting all these programs is a lot of work, but it can certainly be +done. We might be able to create a fully inspectable path from almost +nothing to all of the programs that our computer runs. Something that +seemed to be an impossible dream is suddenly starting to look like +``just a couple years of work''. @subsection LISP as Maxwell's Equations of Software @@ -298,8 +417,8 @@ over. Our starting point is @file{hex0}, a 500 byte hex assembler and we need to somehow close the gap to building the bootstrap binaries, esp. GNU -Gcc and GNU Libc. What better way to do that than by leveraging the -powers of LISP? +Gcc and the GNU C Library. What better way to do that than by +leveraging the powers of LISP? GNU Mes is a Scheme@footnote{Scheme is a modern LISP} interpreter that will be indirectly bootstrapped from @file{hex0} and that wields the @@ -337,9 +456,7 @@ GNU Mes depends on the following packages: @item @url{http://gnu.org/software/guile/, GNU Guile}, version 2.0.13 or later, including 2.2.x; @item @url{http://www.gnu.org/software/make/, GNU Make}. -@item @url{https://savannah.gnu.org/projects/nyacc/, NYACC}, currently only the patched - version 0.80.42 from @url{http://gitlab.com/janneke/nyacc/, patched - NYACC} is known to work. +@item @url{https://savannah.gnu.org/projects/nyacc/, NYACC}, 0.86.0 is known to work. @item @url{http://gcc.gnu.org, GCC's gcc}, version 2.95.3 or later. @end itemize @@ -409,8 +526,8 @@ MES_BOOT=scaffold/boot/00-zero.scm src/mes Run a single Mes Scheme test @example -tests/boot.test -tests/boot.test-guile +./pre-inst-env tests/boot.test +MES=guile ./pre-inst-env tests/boot.test @end example Run MesCC tests only @@ -474,9 +591,9 @@ responsibility. @section The Mes Bootstrap Process The Mes full source bootstrap process@footnote{TBH, the current state of -affairs demands to label this a `reduced binary seed bootstrap'} is +affairs demands to label this a `Reduced Binary Seed bootstrap'} is currently being developed in GuixSD@footnote{See -@file{gnu/packages/mes.scm} in the @var{wip-bootstrap} branch in Guix +@file{gnu/packages/commencement.scm} in the @var{core-updates-next} branch in Guix git @url{http://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/mes.scm?h=wip-bootstrap}}. In it's intiial form it is only available for x86-linux. @@ -505,7 +622,7 @@ glibc-source + binutils + gcc + glibc0 => glibc @c This graph is generated from wip-bootstrap, doing: -@c ~/src/guix-bootstrap/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-graph.dot +@c ~/src/guix-boot/pre-inst-env guix graph --type=bag -e '(@@ (gnu packages commencement) gcc-mesboot)' doc/images/gcc-mesboot-graph.dot @c dot -T png doc/images/gcc-mesboot-graph.dot > doc/images/gcc-mesboot-graph.png Here's a generated dependency diagram to for the final bootstrap gcc @@ -519,8 +636,8 @@ injected by our own doing as temporary shortcut mescc-tools-seed, mes-seed, tinycc-seed @end example -These additional non-bootstrapped dependencies (i.e., binary seeds) are -taken for granted +For now, these additional non-bootstrapped dependencies (i.e., binary +seeds) are taken for granted @example BOOTSTRAP-GUILE, bash, bzip2, coreutils, gawk, grep, gzip, patch, sed, @@ -889,24 +1006,25 @@ without any effort. However, please don't let our preference stop you from reporting a bug. There's one thing @emph{much} worse for us than getting a bug report -without a patch: Reading a complaint or rant online about your pain and -how our work sucks, without having heard directly what you experienced. +without a patch: Reading a complaint or rant online about your +frustrations and how our work sucks, without having heard directly what +you experienced. So if you report a problem, will it be fixed? And @strong{when}? The most honest answer is: It depends. Let's curry that informationless -honesty with a more helpful and more blunt reminder of a mantra of Free -Software: +honesty with a more helpful and more blunt reminder of a mantra of free +software: @quotation @table @strong @item Q: -When@dots{}? +When will it be finished? @item A: -@dots{}sooner if you help. +It will be ready sooner if you help. @end table -@author Eric Raymond +@author Richard Stallman @end quotation @cindex contact, irc, mailing list @@ -922,7 +1040,7 @@ Please send bug reports with full details to @email{bug-mes@@gnu.org}. We would like to thank the following people for their help: Jeremiah Orians, pdewacht, rain1, Ricardo Wurmus, Rutger van Beusekom. -w + We also thank Ludovic Courtès for creating GuixSD and making the bootstrap problem so painfully visible, John McCarthy for creating LISP-1.5 and Alan Kay for their inspiring comment on