doc: Release update.

* BLURB: Release update.
* HACKING: Remove roadmap.
* INSTALL: Release update.
* NEWS: Add 0.21 section.
* README: Release update.
* ROADMAP: New file.
* configure.sh: Release update.
* doc/announce/ANNOUNCE-0.21: New file.
* doc/mes.texi: Release update.
This commit is contained in:
Jan Nieuwenhuizen 2019-11-04 19:59:13 +01:00
parent 594b2859b1
commit ac9c18f8b8
No known key found for this signature in database
GPG key ID: F3C1A0D9C1D65273
13 changed files with 395 additions and 177 deletions

13
BLURB
View file

@ -1,4 +1,7 @@
GNU Mes is a Scheme interpreter and C compiler for bootstrapping the GNU
system.
GNU Mes was created to address the security concerns that arise from GNU Mes was created to address the security concerns that arise from
bootstrapping an operating system using binary blobs, which is common bootstrapping an operating system using binary blobs, which is common
practice for all software distributions. Mes is a Scheme interpreter practice for all software distributions. Mes is a Scheme interpreter
@ -8,13 +11,13 @@ halved the size of opaque, uninspectable binaries that were needed to
bootstrap GNU Guix, a functional GNU/Linux distribution that focusses on bootstrap GNU Guix, a functional GNU/Linux distribution that focusses on
user freedom, reproducibility and security. That reduction was achieved user freedom, reproducibility and security. That reduction was achieved
by replacing GNU Binutils, GNU GCC and the GNU C Library with Mes. The by replacing GNU Binutils, GNU GCC and the GNU C Library with Mes. The
final goal is to help create a full source bootstrap for any interested final goal is to help create a full source bootstrap for UNIX-like
UNIX-like operating system. After three years of volunteer work funding operating systems. After three years of volunteer work funding will
will enable us to make another big step forward and reach an important enable us to make another big step forward and reach an important new
new milestone. milestone.
GNU Mes - https://gnu.org/software/mes GNU Mes - https://gnu.org/software/mes
GNU Guix - https://gnu.org/software/guix GNU Guix - https://gnu.org/software/guix
Bootstrappable Builds - https://bootstrappable.org Bootstrappable Builds - https://bootstrappable.org
Reproducible Builds - https://reproducible-builds.org Reproducible Builds - https://reproducible-builds.org
Reduced Binary Seed bootstrap - http://joyofsource.com/reduced-binary-seed-bootstrap.html Reduced Binary Seed bootstrap - https://guix.gnu.org/blog/2019/guix-reduces-bootstrap-seed-by-50/

View file

@ -1,22 +1,22 @@
-*- org -*- -*- org -*-
#+TITLE: bootstrappable.org project #+TITLE: bootstrappable.org project
Copyright © 2016, 2017, 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
Copying and distribution of this file, with or without modification, Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright are permitted in any medium without royalty provided the copyright
notice and this notice are preserved. notice and this notice are preserved.
* What? * What?
** Full source bootstrapping for GuixSD ** Full source bootstrapping for GNU Guix
A package in GuixSD is can be uniquely identified by the hash of its A package in Guix is uniquely identified by the hash of its source code,
source code, its dependencies and its build recipe. its dependencies, and its build recipe.
Every package can be built from source, except for the bootstrap Every package can be built from source, except for the bootstrap
binaries. binaries.
*** From the GuixSD manual *** From the Guix manual
The distribution is fully “bootstrapped” and “self-contained”: each The distribution is fully “bootstrapped” and “self-contained”: each
package is built based solely on other packages in the distribution. package is built based solely on other packages in the distribution.
@ -25,7 +25,7 @@ The root of this dependency graph is a small set of “bootstrap
binaries”, provided by the (gnu packages bootstrap) module. For more binaries”, provided by the (gnu packages bootstrap) module. For more
information on bootstrapping, *note Bootstrapping::. information on bootstrapping, *note Bootstrapping::.
**** GuixSD bootstrap tarballs **** Guix bootstrap tarballs
$ du -schx $(readlink $(guix build bootstrap-tarballs)/*) $ du -schx $(readlink $(guix build bootstrap-tarballs)/*)
2.1M /gnu/store/9623n4bq6iq5c8cwwdq99qb7d0xj93ym-binutils-static-stripped-tarball-2.28.1/binutils-static-stripped-2.28.1-x86_64-linux.tar.xz 2.1M /gnu/store/9623n4bq6iq5c8cwwdq99qb7d0xj93ym-binutils-static-stripped-tarball-2.28.1/binutils-static-stripped-2.28.1-x86_64-linux.tar.xz
@ -66,7 +66,7 @@ about the bootstrap binaries and compilers?
** Software: MesCC-tools, M2-Planet, GNU Mes and MesCC ** Software: MesCC-tools, M2-Planet, GNU Mes and MesCC
** MesCC-tools ** MesCC-tools
https://github.com/oriansj/mescc-tools https://savannah.gnu.org/projects/mescc-tools
*** hex.0: ~500 byte well-documented, self-hosting hex assembler *** hex.0: ~500 byte well-documented, self-hosting hex assembler
@ -101,13 +101,13 @@ be source.
* TODO * TODO
** remove or upstream patches from tcc-boot ** remove or upstream patches from tcc-boot
** prepare src/mes.c for M2-Planet transpiler. ** prepare src/mes.c for M2-Planet transpiler.
** arm, the Hurd ** ARM, the Hurd
** fix bootstrap-loops: (Nyacc?, mes.M2, psyntax.pp?) ** fix bootstrap-loops: (Nyacc?, mes.M2, psyntax.pp?)
** make GNU gcc (8.0?) bootstrappable again, remove [need for] tcc stage ** make GNU gcc (8.0?) bootstrappable again, remove [need for] tcc stage
* DONE * DONE
** upstream mes-boot to GuixSD. ** upstream mes-boot to Guix.
** replace GuixSD bootstrap for x86_64. ** replace Guix bootstrap for x86_64.
** replace GuixSD bootstrap for x86. ** replace Guix bootstrap for x86.
** add full source gcc-4.7 package build. ** add full source gcc-4.7 package build.
** bootstrap gcc+glibc-built binutils-20.1, gcc-4.1.0. ** 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. ** have tcc-boot compile gnutools triplet: binutils-2.14, gcc-2.95.3, glibc-2.2.5.

56
HACKING
View file

@ -60,62 +60,6 @@ we have no guile (GUILE)...but we should have hex2, M1, and mes.M1.
That's a bootstrap problem which is currently ignored by using the That's a bootstrap problem which is currently ignored by using the
mes-seed package. mes.M1 will be produced by M2-Planet from mes.c. mes-seed package. mes.M1 will be produced by M2-Planet from mes.c.
* ROADMAP
** TODO
*** release 0.x, unsorted
- mes: prepare src/mes.c for M2-Planet transpiler,
Jeremiah branched-out from mes; see https://github.com/oriansj/mes-m2.
- mes/mescc: proper docstrings, api reference documentation.
- replace bootstrap-binaries with Gash: bash, coreutils, grep, gzip,
sed, tar.
- mes: real module support, Guile compatible (define-module,
define-public, export).
- mescc: ARMv7/AArch64 support.
*** after release 1.0
- replace initial gcc-2.95.3 with gcc-3.x or 4.x
- use 3rd party libc (ucLibc, dietlibc, ...) after Mes and reduce
need for bootstrappably-rich Mes C Library?
- mes/mescc: bootstrap a `bootstrap-Guile' before bootstrapping tcc?
- 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
- mes/mescc: bootstrap a minimal-Guile?
+ libguile/{eval,init,list,strings,values,..}.
+ ice-9/eval.scm
- mescc: have mes-tcc pass all scaffold/tests, scaffold/tinycc tests.
- syntax-case bootstrap problem
+ resolve portable syntax-case bootstrap, or
+ get full source syntax-case up (Andre van Tonder?)
https://srfi.schemers.org/srfi-72/srfi-72.html, or
+ ... drop it?
- mescc: the Hurd support.
** DONE
*** 0.19 GNU mes now compiles TinyCC in ~8min and supports building Bash and GNU Tar.
*** 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.
*** 0.16 Mes Lib C now bootstraps glibc-2.2.5, binutils-2.20.1, gcc-4.1.0.
*** 0.15: MesCC now has a libc+gnu that supports compiling binutils-2.14, gcc-2.95.3 and glibc-2.2.5.
*** 0.14: Mes+MesCC now compiles a slightly patched self-hosting tcc.
*** 0.13: Mes+MesCC now compiles a modified, functional tcc.c (~25,000LOC) in 1h30'.
*** 0.12: Mes+MesCC now compiles mes.c (~3000LOC) in ~4min.
*** 0.11: MesCC now compiles a mes-tcc that passes 26/69 of mescc's C tests.
*** 0.10: Mescc now compiles a mes-tcc that compiles a trivial C to a running a.out.
*** 0.9: Mescc now writes M1 macro assembly files and compiles tcc.
*** 0.8: Mescc now writes object files in stage0's labeled hex2 format.
*** 0.7: Mescc supports -E, -c, -o options, include more complete set of header files,
enough to work on compiling tinycc's tcc.c albeit a somewhat modified version.
*** 0.6: Work with unmodified, unbundled Nyacc; compile 33/55 tinycc's tests/test2 suite.
*** 0.5: Mutual self-hosting Scheme interpreter and C compiler: mes.c and mescc,
Support call-with-current-continuation, refactor catch/throw
*** 0.4: Support Nyacc, Gcc-compiled Mes compiles minimal main.c using nyacc
*** 0.3: Garbage collector
*** 0.2: Support psyntax
*** 0.1: Mes eval/apply feature complete; support syntax-rules, compile main.c using LALR, dump ELF
* DEBUG * DEBUG
MES_DEBUG=<level> mes MES_DEBUG=<level> mes
** Levels ** Levels

51
INSTALL
View file

@ -1,7 +1,7 @@
-*- org -*- -*- org -*-
#+TITLE: Building and Installing GNU Mes #+TITLE: Building and Installing GNU Mes
Copyright © 2016, 2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
Copying and distribution of this file, with or without modification, Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright are permitted in any medium without royalty provided the copyright
@ -19,12 +19,14 @@ similar way.
* Regular build * Regular build
** Prerequisites ** Prerequisites
*** Guix *** Guix
guix environment -l guix.scm #64 bit + 32bit #+BEGIN_SRC bash
guix environment --system=i686-linux -l guix.scm #32 bit only guix environment -l guix.scm #64 bit + 32bit
guix environment --system=i686-linux -l guix.scm #32 bit only
#+END_SRC
*** Other GNU/Linux *** Other GNU/Linux
- [[https://github.com/oriansj/mescc-tools][mescc-tools]], 0.5 is known to work. - [[https://savannah.gnu.org/projects/mescc-tools/][mescc-tools]], 0.6.1 is known to work.
- [[https://savannah.gnu.org/projects/nyacc][Nyacc]], 0.86.0 is known to work. - [[https://savannah.gnu.org/projects/nyacc][Nyacc]], 0.93.0 is known to work.
- GNU Gcc, 4.9.3 is known to work. - GNU Gcc, 4.9.3 is known to work.
- GNU Guile, version 2.0.12 or is know to work. - GNU Guile, version 2.0.12 or is know to work.
- SH, /bin/sh, GNU Bash 4.3 is known to work. - SH, /bin/sh, GNU Bash 4.3 is known to work.
@ -34,37 +36,54 @@ similar way.
- Perl, 5.22 is known to work. - Perl, 5.22 is known to work.
** Build it ** Build it
#+BEGIN_SRC bash
./configure ./configure
make make
#+END_SRC
** Check it ** Check it
#+BEGIN_SRC bash
make check make check
#+END_SRC
** Install it ** Install it
#+BEGIN_SRC bash
make install make install
#+END_SRC
* Guix it * Guix it
guix package -f guix.scm
#+BEGIN_SRC bash
guix build -f guix.scm
#+END_SRC
* Bootstrap build * Bootstrap build
The bootstrap build is being developed in Guix, on wip-bootstrap, see The bootstrap build is part of Guix, see
http://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/mes.scm?h=wip-bootstrap https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/commencement.scm
** Prerequisites ** Prerequisites
- [[https://github.com/oriansj/mescc-tools][mescc-tools]], 0.5 is known to work. - [[https://savannah.gnu.org/projects/mescc-tools/][mescc-tools]], 0.6.1 is known to work.
- [[https://savannah.gnu.org/projects/nyacc][Nyacc]], 0.86.0 is known to work. - [[https://savannah.gnu.org/projects/nyacc][Nyacc]], 0.93.0 is known to work.
- [[https://gitlab.com/janneke/mes-seed][mes-seed]], 0.17.1 is known to work.
** Build it ** Build it
<setup environment, e.g. prefix, MES_SEED>
./configure.sh [--prefix=<prefix>] #+BEGIN_SRC bash
./build.sh sh configure.sh [--prefix=<prefix>]
sh bootstrap.sh
#+END_SRC
** Check it ** Check it
./check.sh #+BEGIN_SRC bash
sh check.sh
#+END_SRC
** Install it ** Install it
./install.sh #+BEGIN_SRC bash
sh install.sh
#+END_SRC

19
NEWS
View file

@ -2,7 +2,7 @@
#+TITLE: GNU Mes NEWS history of user-visible changes #+TITLE: GNU Mes NEWS history of user-visible changes
#+STARTUP: content hidestars #+STARTUP: content hidestars
Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
Copying and distribution of this file, with or without modification, Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright are permitted in any medium without royalty provided the copyright
@ -10,6 +10,23 @@ Copyright © 2016,2017,2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
Please send Mes bug reports to bug-mes@gnu.org. Please send Mes bug reports to bug-mes@gnu.org.
* Changes in 0.21 since 0.20
** Core
*** Mes can now be bootstrapped with Gash and Gash Core Utils.
*** Mes now supports a Scheme-only bootstrap.
*** Mes now supports -c EXPR.
** MesCC
*** Mes C Library now supports bootstrapping GNU Awk, GNU Bash, GNU SED, and GNU Tar.
*** Mes C Library now has limited float support in vfprintf, vsnprintf, vsscanf.
**** 7 new functions
abtod, atof, creat, dtoab, execlp, isgraph, mknod, readlink, strtod,
symblink.
**** 5 new stubs
getgrgid, getgrnam, getpgid, getpgrp, mktime, setgrent.
** Noteworthy bug fixes
*** A bug with `mes -c EXPR' has been fixed.
*** The REPL now works again on x86_64.
*** --with-system-libc now works again.
* Changes in 0.20 since 0.19 * Changes in 0.20 since 0.19
** Core ** Core
*** The build system has been simplified, again. *** The build system has been simplified, again.

45
README
View file

@ -3,21 +3,21 @@
#+SUBTITLE: Maxwell Equations of Software #+SUBTITLE: Maxwell Equations of Software
[[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][GNU Guix]]. This [[https://www.gnu.org/software/mes][GNU Mes]] is a Scheme interpreter and C compiler for bootstrapping the GNU
bootstrap has halved the size of opaque, uninspectable binaries that system. Since version 0.20 it brings a [[https://guix.gnu.org/blog/2019/guix-reduces-bootstrap-seed-by-50/][Reduced Binary Seed bootstrap]] to
were needed to bootstrap Guix. The final goal is to help create a full [[https://www.gnu.org/software/guix][GNU Guix]]. This bootstrap has halved the size of opaque, uninspectable
source bootstrap as part of the [[http://bootstrappable.org][bootstrappable builds]] effort for any binaries that were needed to bootstrap Guix 1.0. The final goal is to
interested UNIX-like operating system. help create a full source bootstrap as part of the [[http://bootstrappable.org][bootstrappable builds]]
effort for UNIX-like operating systems.
Mes consists of a mutual self-hosting Scheme interpreter written in Mes consists of a mutual self-hosting Scheme interpreter written in
~5,000 LOC of simple C and a Nyacc-based C compiler written in Scheme. ~5,000 LOC of simple C, and a C compiler written in Scheme. This mes.c
This mes.c is [[https://github.com/oriansj/mes-m2][being simplified]] to be transpiled by [[https://github.com/oriansj/m2-planet][M2-Planet]]. is [[https://github.com/oriansj/mes-m2][being simplified]] to be transpiled by [[https://github.com/oriansj/m2-planet][M2-Planet]].
The Scheme interpreter (mes.c) has a Garbage Collector, a library of The Scheme interpreter has a Garbage Collector, a library of loadable
loadable Scheme modules-- notably Dominique Boucher's [[https://github.com/schemeway/lalr-scm][LALR]], Pre-R6RS Scheme modules-- notably Dominique Boucher's [[https://github.com/schemeway/lalr-scm][LALR]], Pre-R6RS [[https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html][portable
[[https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html][portable syntax-case]] with R7RS ellipsis, Matt Wette's [[https://www.nongnu.org/nyacc][Nyacc]] --and test syntax-case]] with R7RS ellipsis, Matt Wette's [[https://www.nongnu.org/nyacc][Nyacc]] --and test suite just
suite just barely enough to support a simple REPL and simple enough to support a REPL and a C99 compiler: MesCC.
C-compiler: MesCC.
Mes+MesCC can compile an only [[http://gitlab.com/janneke/tinycc][lightly patched TinyCC]] that is 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 self-hosting. Using this tcc and the Mes C library we now have a
@ -64,16 +64,17 @@ General Public Licence version 3 or later. See the file [[file:COPYING][COPYING
* Links * Links
[0] https://www.gnu.org/software/mes [0] https://www.gnu.org/software/mes
[1] https://www.gnu.org/software/guix [1] https://guix.gnu.org/blog/2019/guix-reduces-bootstrap-seed-by-50/
[2] http://bootstrappable.org [2] https://www.gnu.org/software/guix
[3] https://github.com/oriansj/mes-m2 [3] https://bootstrappable.org
[4] https://github.com/oriansj/m2-planet [4] https://github.com/oriansj/mes-m2
[5] https://github.com/schemeway/lalr-scm [5] https://github.com/oriansj/m2-planet
[6] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html [6] https://github.com/schemeway/lalr-scm
[7] https://www.nongnu.org/nyacc [7] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html
[8] http://gitlab.com/janneke/tinycc [8] https://www.nongnu.org/nyacc
[9] [[http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf]] [9] https://gitlab.com/janneke/tinycc
[10] https://github.com/oriansj/stage0 [10] [[http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf]]
[11] https://github.com/oriansj/stage0
* Legalese * Legalese
Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <[[mailto:janneke@gnu.org][janneke@gnu.org]]> Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <[[mailto:janneke@gnu.org][janneke@gnu.org]]>

91
ROADMAP Normal file
View file

@ -0,0 +1,91 @@
-*- org -*-
#+TITLE: Tentative GNU Mes Road Map
Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.
The goals of the GNU Mes project are two-fold:
- to bootstrap the GNU system purely from source, without using any binary
seeds.
- to aid the Reproducible-Builds.org effort; demonstrate the impact and
importance of GNU and Software Freedom.
Since its inception, the project has gone a long way towards that goal. Below
is a list of items we want for version "1.0" of GNU Mes.
You're welcome to discuss this road map on bug-mes@gnu.org or #bootstrappable
on Freenode!
* TODO
** release 0.x, unsorted
- Introduce the Reduced Binaries Seed bootstrap to NixOS (Debian,
Gentoo, ...?)
- Full Source Bootstrap: compile Mes.c using M2-Planet. Jeremiah
branched-out from mes; see https://github.com/oriansj/mes-m2, also see the
branches: wip-m2-merge and wip-m2.
- Scheme-only bootstrap bootstrap-binaries with Gash and Gash Core
Utilities: Awk, Bash, Core Utilities, Grep, Gzip, Make, Sed, Tar.
- Full Guile-compatible module support: define-module, define-public,
export, use-modules, ...
- ARMv7/AArch64 support: Mes C Library and MesCC.
- Simplify eval-apply and other core functionality (see mes-m2).
** after release 1.0
- Replace the initial gcc-2.95.3 with gcc-4.6.4.
- 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
- Bootstrap a `bootstrap-Guile' before bootstrapping tcc?
- Skip tcc: Build gcc using MesCC.
- better garbage collector.
- mes/mescc: proper docstrings, api reference documentation.
- mes/mescc: bootstrap a minimal Guile?
+ libguile/{eval,init,list,strings,values,..}.
+ ice-9/eval.scm
- syntax-case bootstrap problem
+ resolve portable syntax-case bootstrap, or
+ get full source syntax-case up (Andre van Tonder?)
https://srfi.schemers.org/srfi-72/srfi-72.html, or
+ ... drop it?
- Support the Hurd. There is a wip-hurd branch; most needed now are fork
and exec.
* DONE
- 0.21 GNU Mes now supports a Scheme-only bootstrap and is packaged in
Debian GNU/Linux.
- 0.20 GNU Mes brings the Reduced Binary Source bootstrap to Guix.
- 0.19 GNU Mes now compiles TinyCC in ~8min and supports building Bash and
GNU Tar.
- 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.
- 0.16 Mes Lib C now bootstraps glibc-2.2.5, binutils-2.20.1, gcc-4.1.0.
- 0.15: MesCC now has a libc+gnu that supports compiling binutils-2.14,
gcc-2.95.3 and glibc-2.2.5.
- 0.14: Mes+MesCC now compiles a slightly patched self-hosting tcc.
- 0.13: Mes+MesCC now compiles a modified, functional tcc.c (~25,000LOC) in
1h30'.
- 0.12: Mes+MesCC now compiles mes.c (~3000LOC) in ~4min.
- 0.11: MesCC now compiles a mes-tcc that passes 26/69 of mescc's C tests.
- 0.10: Mescc now compiles a mes-tcc that compiles a trivial C to a running
a.out.
- 0.9: Mescc now writes M1 macro assembly files and compiles tcc.
- 0.8: Mescc now writes object files in stage0's labeled hex2 format.
- 0.7: Mescc supports -E, -c, -o options, include more complete set of
header files, enough to work on compiling tinycc's tcc.c albeit a somewhat
modified version.
- 0.6: Work with unmodified, unbundled Nyacc; compile 33/55 tinycc's
tests/test2 suite.
- 0.5: Mutual self-hosting Scheme interpreter and C compiler: mes.c and
mescc, Support call-with-current-continuation, refactor catch/throw
- 0.4: Support Nyacc, Gcc-compiled Mes compiles minimal main.c using nyacc
- 0.3: Garbage collector
- 0.2: Support psyntax
- 0.1: Mes eval/apply feature complete; support syntax-rules, compile main.c
using LALR, dump ELF

View file

@ -67,9 +67,9 @@ cp\
BOOTSTRAP\ BOOTSTRAP\
COPYING\ COPYING\
HACKING\ HACKING\
INSTALL\
NEWS\ NEWS\
README\ README\
ROADMAP\
${DESTDIR}${docdir} ${DESTDIR}${docdir}
if test -f ChangeLog+; then if test -f ChangeLog+; then

View file

@ -254,7 +254,7 @@ GNU Mes is configured for
system: $mes_system system: $mes_system
Run: Run:
./build.sh to build mes sh build.sh to build mes
./check.sh to check mes sh check.sh to check mes
./install.sh to install mes sh install.sh to install mes
EOF EOF

View file

@ -129,5 +129,5 @@ janneke and Danny.
[8] https://www.nongnu.org/nyacc [8] https://www.nongnu.org/nyacc
[9] https://gitlab.com/janneke/tinycc [9] https://gitlab.com/janneke/tinycc
[10] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf [10] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf
[11] https://github.com/oriansj/stage0 [11] https://savannah.nongnu.org/projects/stage0
[12] https://nlnet.nl/project/GNUMes [12] https://nlnet.nl/project/GNUMes

132
doc/announce/ANNOUNCE-0.21 Normal file
View file

@ -0,0 +1,132 @@
Subject: GNU Mes 0.21 released
<#secure method=pgpmime mode=sign>
We are pleased to announce the release of GNU Mes 0.21, representing
54 commits over 10 weeks.
Mes has now brought the Reduced Binary Seed bootstrap to Guix (bootstrap
a GNU/Linux system without binary GNU toolchain or equivalent). See
https://guix.gnu.org/blog/2019/guix-reduces-bootstrap-seed-by-50/
This release supports a Scheme-only bootstrap: Mes can now be built with
Gash and the experimental Gash Core Utils instead of using GNU Awk, GNU
Bash, the GNU Core Utilities, GNU Grep, GNU Gzip, GNU Make, GNU Sed, and
GNU Tar. Also, the Mes C Library now supports bootstrapping those.
Finally, this release brings Mes as a package to Debian GNU/Linux.
We are excited that the Nlnet Foundation[12] is now sponsoring this
work!
Next targets:
- Introduce the Reduced Binaries Seed bootstrap to NixOS (Debian,
Gentoo, ...?)
- Scheme-only bootstrap: use Guile, Gash and Gash Core Utils to remove
awk, bash, core utilities, grep, gzip, make, sed, tar, etc. from the
Guix bootstrap binaries
- ARM support
- Full Source Bootstrap: compile Mes.c using M2-Planet
- Reduced Binary Seed bootstrap for ARM
- the Hurd
Packages are available in Guix master.
* About
GNU Mes[0] brings a Reduced Binary Seed bootstrap[1] to GNU Guix[2].
This bootstrap has halved the size of opaque, uninspectable binaries
that were needed to bootstrap Guix. The final goal is to help create
a full source bootstrap as part of the bootstrappable builds[3] effort
for any interested UNIX-like operating system.
It consists of a mutual self-hosting Scheme interpreter written in
~5,000 LOC of simple C and a Nyacc-based C compiler written in Scheme.
This mes.c is being simplified[4] to be transpiled by M2-Planet[5].
The Scheme interpreter has a Garbage Collector, a library of loadable
Scheme modules-- notably Dominique Boucher's LALR[6], Pre-R6RS
[portable syntax-case[7] with R7RS ellipsis, Matt Wette's Nyacc[8]
--and test suite just enough to support a REPL and a C99 compiler:
MesCC.
Mes+MesCC can compile an only lightly patched TinyCC[9] 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.2.5,
binutils-2.20.1, gcc-2.95.3. This is enough to bootstrap Guix for
i686-linux and x86_64-linux.
Mes is inspired by The Maxwell Equations of Software: LISP-1.5[10] -- John
McCarthy page 13, GNU Guix's source/binary packaging transparency and
Jeremiah Orians's stage0[11] ~500 byte self-hosting hex assembler.
* Download
git clone git://git.savannah.gnu.org/mes.git
Here are the compressed sources and a GPG detached signature[*]:
https://ftp.gnu.org/gnu/mes/mes-0.21.tar.gz
https://ftp.gnu.org/gnu/mes/mes-0.21.tar.gz.sig
Use a mirror for higher download bandwidth:
https://ftpmirror.gnu.org/mes/mes-0.21.tar.gz
https://ftpmirror.gnu.org/mes/mes-0.21.tar.gz.sig
Here are the MD5 and SHA1 checksums:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx mes-0.21.tar.gz
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx mes-0.21.tar.gz
[*] Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact. First, be sure to download both the .sig file
and the corresponding tarball. Then, run a command like this:
gpg --verify mes-0.21.tar.gz.sig
If that command fails because you don't have the required public key,
then run this command to import it:
gpg --keyserver keys.gnupg.net --recv-keys 1A858392E331EAFDB8C27FFBF3C1A0D9C1D65273
and rerun the 'gpg --verify' command.
* Get informed, get involved
See https://bootstrappable.org
Join #bootstrappable on irc.freenode.net.
* Changes in 0.21 since 0.20
** Core
*** Mes can now be bootstrapped with Gash and Gash Core Utils.
*** Mes now supports a Scheme-only bootstrap.
*** Mes now supports -c EXPR.
** MesCC
*** Mes C Library now supports bootstrapping GNU Awk, GNU Bash, GNU SED, and GNU Tar.
*** Mes C Library now has limited float support in vfprintf, vsnprintf, vsscanf.
**** 7 new functions
abtod, atof, creat, dtoab, execlp, isgraph, mknod, readlink, strtod,
symblink.
**** 5 new stubs
getgrgid, getgrnam, getpgid, getpgrp, mktime, setgrent.
** Noteworthy bug fixes
*** A bug with `mes -c EXPR' has been fixed.
*** The REPL now works again on x86_64.
*** --with-system-libc now works again.
Greetings,
janneke and Danny.
[0] https://www.gnu.org/software/mes
[1] https://guix.gnu.org/blog/2019/guix-reduces-bootstrap-seed-by-50/
[2] https://www.gnu.org/software/guix
[3] https://bootstrappable.org
[4] https://github.com/oriansj/mes-m2
[5] https://github.com/oriansj/m2-planet
[6] https://github.com/schemeway/lalr-scm
[7] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html
[8] https://www.nongnu.org/nyacc
[9] https://gitlab.com/janneke/tinycc
[10] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf
[11] https://savannah.nongnu.org/projects/stage0
[12] https://nlnet.nl/project/GNUMes

View file

@ -13,7 +13,7 @@
@set OPENPGP-SIGNING-KEY-ID 1A858392E331EAFDB8C27FFBF3C1A0D9C1D65273 @set OPENPGP-SIGNING-KEY-ID 1A858392E331EAFDB8C27FFBF3C1A0D9C1D65273
@copying @copying
Copyright @copyright{} 2018 Jan (janneke) Nieuwenhuizen@* Copyright @copyright{} 2018,2019 Jan (janneke) Nieuwenhuizen@*
Permission is granted to copy, distribute and/or modify this document Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or under the terms of the GNU Free Documentation License, Version 1.3 or
@ -34,7 +34,7 @@ Documentation License''.
@titlepage @titlepage
@title GNU Mes Reference Manual @title GNU Mes Reference Manual
@subtitle Full Source Bootstrapping of the GNU Guix Operating System @subtitle Full Source Bootstrapping for the GNU system
@author Jan (janneke) Nieuwenhuizen @author Jan (janneke) Nieuwenhuizen
@page @page
@ -124,8 +124,9 @@ that we can trust.
Mes consists of a mutual self-hosting Scheme interpreter written in C 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 and a Nyacc-based (see @pxref{NYACC User's Guide,,, nyacc-ug, NYACC
User's Guide}) C compiler written in Scheme. The Scheme interpreter User's Guide}) C compiler written in Scheme. The Scheme interpreter
@file{mes.c} is about 5000LOC of restricted C and intended to be @file{mes.c} is about 5,000LOC of restricted C, to be compiled with
bootstrappable using a very simple C compiler. M2-Planet@footnote{See @url{https://github.com/oriansj/m2-planet}}, a
very simple C compiler.
If we want to trust our computers to do what we instructed them to do 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 then we need to be able to inspect all instructions---all
@ -255,10 +256,10 @@ binary seed that all software distributions inject are the so called
@emph{bootstrap binaries}. Bootstrap binaries are the initial binary @emph{bootstrap binaries}. Bootstrap binaries are the initial binary
seeds that are used to start building the distribution. seeds that are used to start building the distribution.
The GNU Guix operating system has a relatively small closure of The GNU Guix operating system, version 1.0 had a relatively small
bootstrap binaries: GNU binutils, GNU gcc, GNU Libc, GNU Guile, and closure of bootstrap binaries: GNU binutils, GNU gcc, GNU Libc, GNU
``Static binaries'' (think: bash, bzip2, coreutils, gawk, grep, gzip, Guile, and ``Static binaries'' (think: bash, bzip2, coreutils, gawk,
patch, sed, tar, xz). grep, gzip, patch, sed, tar, xz).
@example @example
$ du -schx $(readlink $(guix build bootstrap-tarballs)/*) $ du -schx $(readlink $(guix build bootstrap-tarballs)/*)
@ -270,8 +271,8 @@ $ du -schx $(readlink $(guix build bootstrap-tarballs)/*)
33M total 33M total
@end example @end example
only a 33MB download that unpacks to 252BM of opaque binaries, that we only a 33MB download that unpacks to a 252MB @emph{seed} of opaque
most probably have the source of, shall we review these together? ;-) binary code.
@example @example
$ for i in $(readlink $(guix build bootstrap-tarballs)/*);\ $ for i in $(readlink $(guix build bootstrap-tarballs)/*);\
@ -285,6 +286,13 @@ $ du -schx *
252M total 252M total
@end example @end example
During the Guix 1.1 development series we managed to create the first
reduction by 50% of the Guix @emph{bootstrap binaries}@footnote{See
@url{https://guix.gnu.org/blog/2019/guix-reduces-bootstrap-seed-by-50/}}.
This was a very important step because the ~250MB @emph{seed} of binary
code was practically non-auditable, which makes it hard to establish
what source code produced them.
@node Full Source Bootstrap @node Full Source Bootstrap
@section Full Source Bootstrap @section Full Source Bootstrap
@ -433,7 +441,7 @@ enjoy software Freedom 1.
@cindex installing Mes @cindex installing Mes
Mes is available for download from its website at Mes is available for download from its website at
@url{http://www.gnu.org/pub/gnu/mes/}. This section describes the @url{https://www.gnu.org/pub/gnu/mes/}. This section describes the
software requirements of Mes, as well as how to install it and get ready software requirements of Mes, as well as how to install it and get ready
to use it. to use it.
@ -458,21 +466,14 @@ GNU Mes depends on the following packages:
@item @url{http://gnu.org/software/guile/, GNU Guile}, version 2.0.13 or @item @url{http://gnu.org/software/guile/, GNU Guile}, version 2.0.13 or
later, including 2.2.x; later, including 2.2.x;
@item @url{http://www.gnu.org/software/make/, GNU Make}. @item @url{http://www.gnu.org/software/make/, GNU Make}.
@item @url{https://savannah.gnu.org/projects/nyacc/, NYACC}, 0.86.0 is known to work. @item @url{https://savannah.gnu.org/projects/nyacc/, NYACC}, 0.93.0 or later, including 0.99.0.
@item @url{http://gcc.gnu.org, GCC's gcc}, version 2.95.3 or later. @item @url{http://gcc.gnu.org, GCC's gcc}, version 2.95.3 or later.
@end itemize @item @url{https://savannah.gnu.org/projects/mescc-tools/, mescc-tools}, version 0.6.1 or later,
The following dependencies are optional:
@itemize
@item
Installing @url{https://github.com/oriansj/mescc-tools/, mescc-tools},
version 0.5 or later, will allow you to have MesCC assemble and link.
@end itemize @end itemize
@cindex Guile, compatibility @cindex Guile, compatibility
Mes is compatible with GNU Guile, so it is possible to share the same Mes is compatible with GNU Guile, so it is possible to share the same
Scheme code between both. Of course, Mes only supports the minimal Scheme code between both. Currently Mes only supports the minimal
subset of R5RS and Guile extensions to run MesCC. subset of R5RS and Guile extensions to run MesCC.
@node Bootstrap Requirements @node Bootstrap Requirements
@ -483,23 +484,21 @@ package. The bootstrap build procedure for Mes is similar to building
GNU software and goes like this GNU software and goes like this
@example @example
export prefix=/usr/local # for example sh configure.sh --prefix=/your/prefix/here
export MES_SEED=../mes # for example sh bootstrap.sh
# optionally set some other environment variables
sh build.sh
sh check.sh sh check.sh
sh install.sh sh install.sh
@end example @end example
See @file{build.sh} for inspiration on what environment variables to See @file{configure.sh} and @file{bootstrap.sh} for inspiration on what
set. environment variables to set.
Bootstrapping Mes depends on the following packages: Bootstrapping Mes depends on the following packages:
@itemize @itemize
@item a POSIX-compatible shell @item a POSIX-compatible shell
@item @url{https://github.com/oriansj/mescc-tools/, mescc-tools}, version 0.5 or later. @item @url{https://github.com/oriansj/mescc-tools/, mescc-tools}, version 0.6.1 or later.
@item @url{http://gitlab.com/janneke/mes-seed/, mes-seed}, version 0.17 or later. @item @url{https://savannah.gnu.org/projects/nyacc/, NYACC}, 0.93.0 or later, including 0.99.0.
@end itemize @end itemize
@node Running the Test Suites @node Running the Test Suites
@ -593,34 +592,51 @@ responsibility.
@node The Mes Bootstrap Process @node The Mes Bootstrap Process
@section The Mes Bootstrap Process @section The Mes Bootstrap Process
The Mes full source bootstrap process@footnote{TBH, the current state of The Reduced Binary Seed bootstrap currently adopted by Guix@footnote{See
affairs demands to label this a `Reduced Binary Seed bootstrap'} is @file{gnu/packages/commencement.scm} in the @var{master} branch in Guix
currently being developed in Guix@footnote{See
@file{gnu/packages/commencement.scm} in the @var{core-updates} branch in Guix
git git
@url{http://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/mes.scm?h=wip-bootstrap}}. @url{http://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/commencement.scm}}.
In it's intiial form it is only available for x86-linux. In its intiial form it is only available for x86-linux.
Currently, it goes like this: Currently, it goes like this:
@verbatim @verbatim
mescc-tools-source + mescc-tools-seed => mescc-tools gcc-mesboot (4.9.4)
^
mes-source + mescc-tools + mescc-seed => mes |
glibc-mesboot (2.16.0)
tcc-source + mes + tinycc-seed => tcc ^
|
binutils-source + mes + tcc => binutils0 gcc-mesboot1 (4.7.4)
^
gcc-source + tcc + binutils0 => gcc-core |
binutils-mesboot (2.20.1a)
glibc-source + kernel-headers-source + binutils0 + gcc => glibc0 ^
|
binutils-source + binutils0 + gcc + glibc => binutils gcc-mesboot0 (2.95.3)
^
gcc-source + binutils + gcc-core + glibc => gcc |
glibc-mesboot0 (2.2.5)
glibc-source + binutils + gcc + glibc0 => glibc ^
|
gcc-core-mesboot (2.95.3)
^
|
make-mesboot0, diffutils-mesboot, binutils-mesboot0 (2.20.1a)
^
|
tcc-boot
^
|
tcc-boot0
^
|
mes-boot
^
|
*
bootstrap-mescc-tools, bootstrap-mes (~10MB)
bootstrap-bash, bootstrap-coreutils&co, bootstrap-guile (~120MB)
@end verbatim @end verbatim
@c This graph is generated from wip-bootstrap, doing: @c This graph is generated from wip-bootstrap, doing:
@ -636,14 +652,14 @@ that builds the rest of Guix.
Work is ongoing to remove these binary seeds that were intentionally Work is ongoing to remove these binary seeds that were intentionally
injected by our own doing as temporary shortcut injected by our own doing as temporary shortcut
@example @example
mescc-tools-seed, mes-seed, tinycc-seed bootstrap-mescc-tools (seed), bootstrap-mes (seed)
@end example @end example
For now, these additional non-bootstrapped dependencies (i.e., binary For now, these additional non-bootstrapped dependencies (i.e., binary
seeds) are taken for granted seeds) are taken for granted
@example @example
BOOTSTRAP-GUILE, bash, bzip2, coreutils, gawk, grep, gzip, patch, sed, bootstrap-guile, bash, bzip2, coreutils, gawk, grep, gzip, patch, sed,
tar, xz tar, xz
@end example @end example
@ -659,7 +675,7 @@ The @command{mes} command is the Scheme interpreter whose prime
directive is to run the @command{MesCC} program. directive is to run the @command{MesCC} program.
For convenience and testing purposes, @command{mes} tries to mimic For convenience and testing purposes, @command{mes} tries to mimic
Guile. guile.
@example @example
mes @var{option}@dots{} @file{FILE}@dots{} mes @var{option}@dots{} @file{FILE}@dots{}
@ -704,9 +720,6 @@ variable.
@item -C,--compiled-path=@var{directory} @item -C,--compiled-path=@var{directory}
Accepted and ignored for Guile compatibility. Accepted and ignored for Guile compatibility.
@item ---dump
dump binary program to stdout
@item -l @var{file} @item -l @var{file}
Load Scheme source code from @var{file}, and continue processing the Load Scheme source code from @var{file}, and continue processing the
command line. command line.
@ -721,9 +734,6 @@ and the command-line arguments---the list provided by the
@item -h@r{, }--help @item -h@r{, }--help
Display help on invoking Mes, and then exit. Display help on invoking Mes, and then exit.
@item ---load
load binary program [module/mes/boot-0.32-mo]
@item -v@r{, }--version @item -v@r{, }--version
Display the current version of Mes, and then exit. Display the current version of Mes, and then exit.

View file

@ -30,6 +30,7 @@
(define welcome (define welcome
(string-append "GNU Mes " %version " (string-append "GNU Mes " %version "
Copyright (C) 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> Copyright (C) 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
Copyright (C) 2019 Danny Milosavljevic <dannym@scratchpost.org>
GNU Mes comes with ABSOLUTELY NO WARRANTY; for details type `,show w'. GNU Mes comes with ABSOLUTELY NO WARRANTY; for details type `,show w'.
This program is free software, and you are welcome to redistribute it This program is free software, and you are welcome to redistribute it