doc: Release update.
* BOOTSTRAP: Release update. * HACKING: Likewise. * INSTALL: Likewise. * NEWS: Likewise. * PORTING: Likewise. * README: Likewise. * ROADMAP: Likewise. * doc/mes.texi: Likewise. * doc/announce/ANNOUNCE-0.22: New file.
This commit is contained in:
parent
d8fca8321e
commit
34feefa559
55
BOOTSTRAP
55
BOOTSTRAP
|
@ -8,24 +8,24 @@ Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
||||||
notice and this notice are preserved.
|
notice and this notice are preserved.
|
||||||
|
|
||||||
* What?
|
* What?
|
||||||
** Full source bootstrapping for GNU Guix
|
** Full source bootstrapping for the GNU System
|
||||||
|
|
||||||
A package in Guix is uniquely identified by the hash of its source code,
|
A package in GNU Guix is uniquely identified by the hash of its source
|
||||||
its dependencies, and its build recipe.
|
code, 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 Guix manual
|
*** From the GNU 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.
|
||||||
|
|
||||||
The root of this dependency graph is a small set of “bootstrap
|
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::.
|
||||||
|
|
||||||
**** Guix bootstrap tarballs
|
**** Guix v1.0 bootstrap binary seed
|
||||||
|
|
||||||
$ 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
|
||||||
|
@ -44,6 +44,42 @@ $ du -schx *
|
||||||
5.2M share
|
5.2M share
|
||||||
252M total
|
252M total
|
||||||
|
|
||||||
|
**** Guix Reduced Binary Seed bootstrap binary seed
|
||||||
|
|
||||||
|
$ du -schx $(readlink $(guix build bootstrap-tarballs)/*)
|
||||||
|
5.7M /gnu/store/9f8gi8raqfx9j3l9d00qrrc0jg3r1kyj-guile-static-stripped-tarball-2.2.6/guile-static-stripped-2.2.6-x86_64-linux.tar.xz
|
||||||
|
80K /gnu/store/b6rjl52hibhmvyw4dg8678pwryhla0h2-linux-libre-headers-stripped-tarball-4.19.56/linux-libre-headers-stripped-4.19.56-x86_64-linux.tar.xz
|
||||||
|
12K /gnu/store/d7zlxsjcnqilmvqwx7scija9x9bjw8cw-mescc-tools-static-stripped-tarball-0.5.2-0.bb062b0/mescc-tools-static-stripped-0.5.2-0.bb062b0-x86_64-linux.tar.xz
|
||||||
|
428K /gnu/store/n7zc4kpi8ny6jlfaikkzxlwhc5fvr1vr-mes-minimal-stripped-tarball-0.19/mes-minimal-stripped-0.19-x86_64-linux.tar.xz
|
||||||
|
6.0M /gnu/store/nv4djwlrljfqmynqr2cqvfwz0ydx7kxb-static-binaries-tarball-0/static-binaries-0-x86_64-linux.tar.xz
|
||||||
|
13M total
|
||||||
|
$ for i in $(readlink $(guix build bootstrap-tarballs)/*);\
|
||||||
|
do sudo tar xf $i; done
|
||||||
|
Password:
|
||||||
|
$ du -schx *
|
||||||
|
93M bin
|
||||||
|
700K include
|
||||||
|
38M lib
|
||||||
|
14M share
|
||||||
|
145M total
|
||||||
|
|
||||||
|
**** Guix Scheme-only bootstrap binary seed
|
||||||
|
|
||||||
|
$ du -schx $(readlink $(~/src/guix/wip-bootstrap/pre-inst-env guix build bootstrap-tarballs)/*)
|
||||||
|
5.7M /gnu/store/1mq2pcd2h7g54xpi2jrgj6ibbi4lgi3c-guile-static-stripped-tarball-2.2.6/guile-static-stripped-2.2.6-x86_64-linux.tar.xz
|
||||||
|
80K /gnu/store/bl1r2bpk6fam8r2gjvr5mvr48i3dm2hn-linux-libre-headers-stripped-tarball-4.19.56/linux-libre-headers-stripped-4.19.56-x86_64-linux.tar.xz
|
||||||
|
12K /gnu/store/w0dlz486dhb8aiq8pxm5akllz628fqin-mescc-tools-static-stripped-tarball-0.5.2-0.bb062b0/mescc-tools-static-stripped-0.5.2-0.bb062b0-x86_64-linux.tar.xz
|
||||||
|
428K /gnu/store/15j6l18q44ymlrh1cfp4s4hc9835xic5-mes-minimal-stripped-tarball-0.19/mes-minimal-stripped-0.19-x86_64-linux.tar.xz
|
||||||
|
6.2M total
|
||||||
|
$ for i in $(readlink $(~/src/guix/wip-bootstrap/pre-inst-env guix build bootstrap-tarballs)/*);\
|
||||||
|
do sudo tar xf $i; done
|
||||||
|
$ du -schx *
|
||||||
|
4.9M bin
|
||||||
|
700K include
|
||||||
|
38M lib
|
||||||
|
14M share
|
||||||
|
57M total
|
||||||
|
|
||||||
* Why?
|
* Why?
|
||||||
** Reproducibility is essential to Software Freedom
|
** Reproducibility is essential to Software Freedom
|
||||||
|
|
||||||
|
@ -92,20 +128,22 @@ be source.
|
||||||
|
|
||||||
*** mes.c: a Scheme interpreter in ~5,000LOC of simple C
|
*** mes.c: a Scheme interpreter in ~5,000LOC of simple C
|
||||||
*** mescc: a C compiler written in Scheme (uses Nyacc C99 parser in Scheme)
|
*** mescc: a C compiler written in Scheme (uses Nyacc C99 parser in Scheme)
|
||||||
*** mes.M2: this Scheme interpreter in preprocessed M2
|
*** mes.M2: this Scheme interpreter in bootstrappable M2
|
||||||
|
|
||||||
** TinyCC
|
** TinyCC
|
||||||
|
|
||||||
https://gitlab.com/janneke/tinycc
|
https://gitlab.com/janneke/tinycc
|
||||||
|
|
||||||
* TODO
|
* TODO
|
||||||
|
** merge scheme-only bootstrap into Guix.
|
||||||
|
** reduced binary seed bootstrap into NixOS, Debian.
|
||||||
** 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 Guix.
|
** reduced binary seed bootstrap into Guix.
|
||||||
** replace Guix bootstrap for x86_64.
|
** replace Guix bootstrap for x86_64.
|
||||||
** replace Guix bootstrap for x86.
|
** replace Guix bootstrap for x86.
|
||||||
** add full source gcc-4.7 package build.
|
** add full source gcc-4.7 package build.
|
||||||
|
@ -121,5 +159,6 @@ be source.
|
||||||
** tcc compiled with gcc is known to compile gcc
|
** tcc compiled with gcc is known to compile gcc
|
||||||
|
|
||||||
* Contact
|
* Contact
|
||||||
|
** bug-mes@gnu.org
|
||||||
** #bootstrappable, #guix on freenode
|
** #bootstrappable, #guix on freenode
|
||||||
** bootstrappable.org
|
** bootstrappable.org
|
||||||
|
|
70
HACKING
70
HACKING
|
@ -1,64 +1,31 @@
|
||||||
-*- org -*-
|
-*- org -*-
|
||||||
#+TITLE: Hacking GNU Mes
|
#+TITLE: Hacking GNU Mes
|
||||||
|
|
||||||
Copyright © 2016,2017,2018 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.
|
|
||||||
|
|
||||||
* SETUP
|
* SETUP
|
||||||
guix environment -l guix.scm #64 bit + 32bit
|
guix environment -l guix.scm #64 bit + 32bit
|
||||||
|
|
||||||
|
CC=i686-unkown-linux-gnu-gcc ./configure
|
||||||
or
|
or
|
||||||
|
./configure
|
||||||
|
|
||||||
guix environment --system=i686-linux -l guix.scm #32 bit only
|
The 64bit bootstrap is not supported; MesCC needs work to be able to
|
||||||
|
compile a functional tinycc.
|
||||||
or
|
|
||||||
|
|
||||||
guix package --profile=~/.config/guix/mes --manifest=build-aux/manifest.scm
|
|
||||||
. ~/.config/guix/mes/etc/profile
|
|
||||||
|
|
||||||
* BUILD
|
* BUILD
|
||||||
There are two major modes to build Mes: true bootstrap and
|
|
||||||
development.
|
|
||||||
|
|
||||||
** DEVELOPMENT BUILD
|
GNU Guile can be used as a replacement for Mes. It's faster and has
|
||||||
To help development we assume ./configure sets these variables for make
|
much better error handling.
|
||||||
|
|
||||||
CC -- gcc (or i686-unknown-linux-gnu-gcc sans libc)
|
#+BEGIN_SRC bash
|
||||||
GUILE -- guile
|
make MES=guile
|
||||||
HEX2 -- hex2
|
make check MES=guile
|
||||||
MES -- unset
|
#+END_SRC
|
||||||
M1 -- M1
|
|
||||||
prefix -- ""
|
|
||||||
|
|
||||||
Mes is supposed to serve as a full equivalent for Guile, however Mes
|
Configure to compile with Tiny CC
|
||||||
is still about 2 to 10 times slower than Guile. That's why we usually
|
|
||||||
don't use Mes during development, configure --with-cheating.
|
|
||||||
|
|
||||||
Gcc is used to verify the sanity of our C sources.
|
#+BEGIN_SRC bash
|
||||||
|
./configure CC=tcc --host=i686-unknown-linux-gnu --with-courage
|
||||||
i686-unknown-linux-gnu-gcc is used to compare hex/assembly, to test
|
#+END_SRC
|
||||||
the gcc variant of Mes C Libirary.
|
|
||||||
Target prefix: x86-mes-gcc.
|
|
||||||
|
|
||||||
gcc -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.
|
|
||||||
|
|
||||||
** BOOTSTRAP BUILD
|
|
||||||
|
|
||||||
./configure.sh [--prefix=PREFIX]
|
|
||||||
./bootstrap.sh
|
|
||||||
./install.sh
|
|
||||||
|
|
||||||
In bootstrap mode, we don't have gcc (CC), we don't have a 32 bit gcc,
|
|
||||||
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
|
|
||||||
mes-seed package. mes.M1 will be produced by M2-Planet from mes.c.
|
|
||||||
|
|
||||||
* DEBUG
|
* DEBUG
|
||||||
MES_DEBUG=<level> mes
|
MES_DEBUG=<level> mes
|
||||||
|
@ -83,7 +50,7 @@ mes-seed package. mes.M1 will be produced by M2-Planet from mes.c.
|
||||||
|
|
||||||
* Bugs
|
* Bugs
|
||||||
** mes: performance, Mes is now 2-10x slower than Guile.
|
** mes: performance, Mes is now 2-10x slower than Guile.
|
||||||
** mes/mescc lack support for the Hurd.
|
** mes/mescc lack support for fork/exec on the Hurd.
|
||||||
** mes: gcc-x86_64 compiled mes segfaults with small arena, or gc_up_arena.
|
** mes: gcc-x86_64 compiled mes segfaults with small arena, or gc_up_arena.
|
||||||
** mes: gcc-x86 compiled, tests/srfi-13.test number->string INT-MIN fails:
|
** mes: gcc-x86 compiled, tests/srfi-13.test number->string INT-MIN fails:
|
||||||
test: number->string INT-MIN: fail
|
test: number->string INT-MIN: fail
|
||||||
|
@ -214,3 +181,10 @@ https://notabug.org/rain1/hex86/src/master/tests/hex0b3.hex86
|
||||||
https://jamey.thesharps.us/2016/07/15/testing-strategies-for-corrode/
|
https://jamey.thesharps.us/2016/07/15/testing-strategies-for-corrode/
|
||||||
("Randomized testing with Csmith and C-Reduce") [10:58]
|
("Randomized testing with Csmith and C-Reduce") [10:58]
|
||||||
** linux syscalls: https://fedora.juszkiewicz.com.pl/syscalls.html
|
** linux syscalls: https://fedora.juszkiewicz.com.pl/syscalls.html
|
||||||
|
* legalese
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
23
INSTALL
23
INSTALL
|
@ -41,6 +41,19 @@ similar way.
|
||||||
make
|
make
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
|
If you get something like
|
||||||
|
|
||||||
|
#+BEGIN_SRC bash
|
||||||
|
mes.c:(.text+0x8da0): undefined reference to `__stack_chk_fail'
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
then your compiler inserts stack protection code. The Mes C Library
|
||||||
|
does not support that. Turn it off lik this
|
||||||
|
|
||||||
|
#+BEGIN_SRC bash
|
||||||
|
./configure CFLAGS=-fno-stack-protector
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
** Check it
|
** Check it
|
||||||
|
|
||||||
#+BEGIN_SRC bash
|
#+BEGIN_SRC bash
|
||||||
|
@ -86,3 +99,13 @@ https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/commencement.scm
|
||||||
#+BEGIN_SRC bash
|
#+BEGIN_SRC bash
|
||||||
sh install.sh
|
sh install.sh
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
* Regular build and bootstrap combine
|
||||||
|
|
||||||
|
To build mes.c using MesCC, configure using --with-bootstrap:
|
||||||
|
|
||||||
|
#+BEGIN_SRC bash
|
||||||
|
./configure --with-bootstrap
|
||||||
|
make
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
This creates bin/mes-gcc and bin/mes-mescc.
|
||||||
|
|
36
NEWS
36
NEWS
|
@ -10,6 +10,41 @@ Copyright © 2016,2017,2018,2019 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.22 since 0.21
|
||||||
|
** Core
|
||||||
|
*** Mes now builds reproducibly with MesCC, cross distribution
|
||||||
|
Using --with-bootstrap on x86, a bin/mes-mescc is compiled with
|
||||||
|
mes+mescc, that shall have sha256sum
|
||||||
|
|
||||||
|
9e0bcb1633c58e7bc415f6ea27cee7951d6b0658e13cdc147e992b31a14625fb bin/mes-mescc
|
||||||
|
|
||||||
|
This has been verified on GNU Guix, Debian GNU/Linux and NixOS.
|
||||||
|
*** Mes now builds reproducibly with Guile+MesCC vs Mes+MesCC.
|
||||||
|
*** Mes now builds reproducibly with Tiny CC-built MesCC.
|
||||||
|
*** configure now respects the user's CFLAGS, CPPFLAGS and LDFLAGS.
|
||||||
|
*** Mes now supports mescc-tools 0.5.2 next to 0.6.1.
|
||||||
|
This allows introducing the Scheme-only bootstrap without updating or
|
||||||
|
adding new bootstrap binary seeds into GNU Guix.
|
||||||
|
*** Mes now runs when configured --with-courage on the Hurd:
|
||||||
|
GNU debian 0.9 GNU-Mach 1.8+git20170609-486/Hurd-0.9 i686-AT386 GNU
|
||||||
|
Note that mescc does not run; fork and exec are not yet implemented.
|
||||||
|
*** Mes now configures --with-courage on x86-FreeBSD 12.1
|
||||||
|
The initial ELF scaffold tests: exit-42.S, 0exit-42.hex2,
|
||||||
|
body-exit-42.hex2, hello-mes.S, 0hello-mes.hex2, body-hello-mes.hex2
|
||||||
|
pass.
|
||||||
|
*** configure now has a --with-bootstrap option.
|
||||||
|
This adds the reproducible bootstrap build of bin/mes-mescc, using
|
||||||
|
mes+mescc.
|
||||||
|
*** configure prefers $CC over gcc; tcc over gcc, gcc over cc.
|
||||||
|
*** Mes now prints an error when attempting to read a file that does not exist.
|
||||||
|
*** Mes no longer depends on GIT.
|
||||||
|
** Noteworthy bug fixes
|
||||||
|
*** Several annoying build problems were fixed, for non-Guix systems.
|
||||||
|
*** A bug with buffered-read was fixed.
|
||||||
|
This means that bash-2.05 can now build glibc-2.2.5; notably it now
|
||||||
|
successfully executes make-syscall.sh.
|
||||||
|
*** A bug with execlp, execvp for file names containing a slash was fixed.
|
||||||
|
This should allow make-3.80 running scripts that have "#! ./move-if-change".
|
||||||
* Changes in 0.21 since 0.20
|
* Changes in 0.21 since 0.20
|
||||||
** Core
|
** Core
|
||||||
*** Mes can now be bootstrapped with Gash and Gash Core Utils.
|
*** Mes can now be bootstrapped with Gash and Gash Core Utils.
|
||||||
|
@ -48,6 +83,7 @@ take-while.
|
||||||
*** 1 new function
|
*** 1 new function
|
||||||
__mesabi_uldiv.
|
__mesabi_uldiv.
|
||||||
** Noteworthy bug fixes
|
** Noteworthy bug fixes
|
||||||
|
*** map and for-each now support lists with unequal length.
|
||||||
*** interger division has been fixed.
|
*** interger division has been fixed.
|
||||||
*** isatty now looks at terminfo.
|
*** isatty now looks at terminfo.
|
||||||
*** signal now uses sigaction correctly for non-x86.
|
*** signal now uses sigaction correctly for non-x86.
|
||||||
|
|
22
PORTING
22
PORTING
|
@ -54,6 +54,28 @@ bootstrap for x86_64 uses x86 mes and that is not expected to change.
|
||||||
The Hurd port can be found in wip-hurd on savannah. For development, we
|
The Hurd port can be found in wip-hurd on savannah. For development, we
|
||||||
use a Debian GNU/Hurd vm.
|
use a Debian GNU/Hurd vm.
|
||||||
|
|
||||||
|
* Porting GNU Mes to FreeBSD
|
||||||
|
The FreeBSD port can be found in wip-freebsd on savannah.
|
||||||
|
|
||||||
|
* Porting the Reduced Binary Seed bootstrap to NixOS
|
||||||
|
The NixOS port of the Reduced Binary Seed bootstrap lives on the
|
||||||
|
mes-bootstrap branch in https://github.com/xwvvvvwx/nixpkgs
|
||||||
|
|
||||||
|
* Porting the Reduced Binary Seed bootstrap to Debian GNU/Linux
|
||||||
|
To port the Reduced Binary Seed bootstrap to a traditional distribution
|
||||||
|
such as Debian, two things need to happen: the bootstrap must be ported
|
||||||
|
and the distribution build process needs to change to start from a only
|
||||||
|
binary seed.
|
||||||
|
|
||||||
|
The porting aspect is probably easiest: we start by packaging GNU Mes as
|
||||||
|
a regular package. Having Mes built as a regular package, we can then
|
||||||
|
build a bootstrap Mes. This bootstrap Mes can be used to build tinycc,
|
||||||
|
and so on.
|
||||||
|
|
||||||
|
Once we have shown that the Debian base system can be bootstrapped from
|
||||||
|
a Reduced Binary seed, thus significantly reducing the Trusted Computing
|
||||||
|
Base (TCB), strategic decisions about the build process can start.
|
||||||
|
|
||||||
* Legalese
|
* Legalese
|
||||||
Copyright © 2019 Jan (janneke) Nieuwenhuizen <[[mailto:janneke@gnu.org][janneke@gnu.org]]>
|
Copyright © 2019 Jan (janneke) Nieuwenhuizen <[[mailto:janneke@gnu.org][janneke@gnu.org]]>
|
||||||
|
|
||||||
|
|
22
README
22
README
|
@ -4,20 +4,20 @@
|
||||||
#+SUBTITLE: Maxwell Equations of Software
|
#+SUBTITLE: Maxwell Equations of Software
|
||||||
|
|
||||||
[[https://www.gnu.org/software/mes][GNU Mes]] is a Scheme interpreter and C compiler for bootstrapping the GNU
|
[[https://www.gnu.org/software/mes][GNU Mes]] is a Scheme interpreter and C compiler for bootstrapping the GNU
|
||||||
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
|
System. Since version 0.22 it has again helped to halve the size of
|
||||||
[[https://www.gnu.org/software/guix][GNU Guix]]. This bootstrap has halved the size of opaque, uninspectable
|
opaque, uninspectable binary seeds that are currently being used in the
|
||||||
binaries that were needed to bootstrap Guix 1.0. The final goal is to
|
[[https://guix.gnu.org/blog/2019/guix-reduces-bootstrap-seed-by-50/][Reduced Binary Seed bootstrap]] of [[https://www.gnu.org/software/guix][GNU Guix]]. The final goal is to help
|
||||||
help create a full source bootstrap as part of the [[http://bootstrappable.org][bootstrappable builds]]
|
create a full source bootstrap as part of the [[http://bootstrappable.org][bootstrappable builds]]
|
||||||
effort for UNIX-like operating systems.
|
effort for UNIX-like operating systems.
|
||||||
|
|
||||||
Mes consists of a mutual self-hosting Scheme interpreter written in
|
The Scheme interpreter is written in ~5,000 LOC of simple C, and the C
|
||||||
~5,000 LOC of simple C, and a C compiler written in Scheme. This mes.c
|
compiler written in Scheme and these are mutual self-hosting. This
|
||||||
is [[https://github.com/oriansj/mes-m2][being simplified]] to be transpiled by [[https://github.com/oriansj/m2-planet][M2-Planet]].
|
mes.c is [[https://github.com/oriansj/mes-m2][being simplified]] to be transpiled by [[https://github.com/oriansj/m2-planet][M2-Planet]].
|
||||||
|
|
||||||
The Scheme interpreter has a Garbage Collector, a library of loadable
|
Mes has a Garbage Collector, a library of loadable Scheme modules--
|
||||||
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
|
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 syntax-case]] with
|
||||||
syntax-case]] with R7RS ellipsis, Matt Wette's [[https://www.nongnu.org/nyacc][Nyacc]] --and test suite just
|
R7RS ellipsis, Matt Wette's [[https://www.nongnu.org/nyacc][Nyacc]] --and test suite, just enough to
|
||||||
enough to support a REPL and a C99 compiler: MesCC.
|
support a REPL and a C99 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
|
||||||
|
|
31
ROADMAP
31
ROADMAP
|
@ -9,7 +9,7 @@ Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
||||||
|
|
||||||
The goals of the GNU Mes project are two-fold:
|
The goals of the GNU Mes project are two-fold:
|
||||||
|
|
||||||
- to bootstrap the GNU system purely from source, without using any binary
|
- to bootstrap the GNU System purely from source, without using any binary
|
||||||
seeds.
|
seeds.
|
||||||
|
|
||||||
- to aid the Reproducible-Builds.org effort; demonstrate the impact and
|
- to aid the Reproducible-Builds.org effort; demonstrate the impact and
|
||||||
|
@ -23,23 +23,32 @@ on Freenode!
|
||||||
|
|
||||||
* TODO
|
* TODO
|
||||||
** release 0.x, unsorted
|
** release 0.x, unsorted
|
||||||
|
- Merge the Scheme-only bootstrap which uses Gash and Gash Core
|
||||||
|
Utilities to remove from bootstrap-binary seed : Awk, Bash, Core
|
||||||
|
Utilities, Grep, Gzip, Sed, Tar.
|
||||||
- Introduce the Reduced Binaries Seed bootstrap to NixOS (Debian,
|
- Introduce the Reduced Binaries Seed bootstrap to NixOS (Debian,
|
||||||
Gentoo, ...?)
|
Arch, Gentoo, ...?)
|
||||||
- Full Source Bootstrap: compile Mes.c using M2-Planet. Jeremiah
|
- Full Source Bootstrap: compile mes.c using M2-Planet. Jeremiah
|
||||||
branched-out from mes; see https://github.com/oriansj/mes-m2, also see the
|
branched-out from mes; see https://github.com/oriansj/mes-m2, also see the
|
||||||
branches: wip-m2-merge and wip-m2.
|
branches: wip-full-source-bootstrap, 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,
|
- Full Guile-compatible module support: define-module, define-public,
|
||||||
export, use-modules, ...
|
export, use-modules, ...
|
||||||
- ARMv7/AArch64 support: Mes C Library and MesCC.
|
- ARMv7/AArch64 support: Mes C Library and MesCC.
|
||||||
- Simplify eval-apply and other core functionality (see mes-m2).
|
- Simplify eval-apply and other core functionality (see mes-m2).
|
||||||
** after release 1.0
|
- Support native x86_64 bootstrap.
|
||||||
- Replace the initial gcc-2.95.3 with gcc-4.6.4.
|
- Simplify MesCC ``MesCC should optimize ease of convincing us of its
|
||||||
|
correctness''
|
||||||
- tcc: remove or upstream patches from tcc-boot.
|
- tcc: remove or upstream patches from tcc-boot.
|
||||||
- tcc: build 0.9.27 directly instead of via 0.9.26, see tinycc
|
- tcc: build 0.9.27 directly instead of via 0.9.26, see tinycc
|
||||||
|
** after release 1.0
|
||||||
|
- Build Guix packages using Mes: run or simplify (guix build utils),
|
||||||
|
(guix build gnu-build-system).
|
||||||
|
- Build Guix packages without guix-daemon. See Ludovic's initrd build
|
||||||
|
work.
|
||||||
|
- Bootstrap support for the Hurd. Most needed now are fork and exec.
|
||||||
|
- Replace the initial gcc-2.95.3 with gcc-4.6.4.
|
||||||
|
- FreeBSD, *BSD?
|
||||||
wip-bootstrappable@0.9.27 branch
|
wip-bootstrappable@0.9.27 branch
|
||||||
- Bootstrap a `bootstrap-Guile' before bootstrapping tcc?
|
|
||||||
- Skip tcc: Build gcc using MesCC.
|
- Skip tcc: Build gcc using MesCC.
|
||||||
- better garbage collector.
|
- better garbage collector.
|
||||||
- mes/mescc: proper docstrings, api reference documentation.
|
- mes/mescc: proper docstrings, api reference documentation.
|
||||||
|
@ -51,9 +60,9 @@ on Freenode!
|
||||||
+ get full source syntax-case up (Andre van Tonder?)
|
+ get full source syntax-case up (Andre van Tonder?)
|
||||||
https://srfi.schemers.org/srfi-72/srfi-72.html, or
|
https://srfi.schemers.org/srfi-72/srfi-72.html, or
|
||||||
+ ... drop it?
|
+ ... drop it?
|
||||||
- Support the Hurd. There is a wip-hurd branch; most needed now are fork
|
|
||||||
and exec.
|
|
||||||
* DONE
|
* DONE
|
||||||
|
- 0.22 GNU Mes now builds reproducibly cross-platform, runs on the
|
||||||
|
Hurd and has better support for other distributions and kernels.
|
||||||
- 0.21 GNU Mes now supports a Scheme-only bootstrap and is packaged in
|
- 0.21 GNU Mes now supports a Scheme-only bootstrap and is packaged in
|
||||||
Debian GNU/Linux.
|
Debian GNU/Linux.
|
||||||
- 0.20 GNU Mes brings the Reduced Binary Source bootstrap to Guix.
|
- 0.20 GNU Mes brings the Reduced Binary Source bootstrap to Guix.
|
||||||
|
|
|
@ -37,18 +37,18 @@ Packages are available in Guix master.
|
||||||
|
|
||||||
GNU Mes[0] brings a Reduced Binary Seed bootstrap[1] to GNU Guix[2].
|
GNU Mes[0] brings a Reduced Binary Seed bootstrap[1] to GNU Guix[2].
|
||||||
This bootstrap has halved the size of opaque, uninspectable binaries
|
This bootstrap has halved the size of opaque, uninspectable binaries
|
||||||
that were needed to bootstrap Guix. The final goal is to help create
|
that were needed to bootstrap Guix 1.0. The final goal is to help
|
||||||
a full source bootstrap as part of the bootstrappable builds[3] effort
|
create a full source bootstrap as part of the bootstrappable builds[3]
|
||||||
for any interested UNIX-like operating system.
|
effort for any interested UNIX-like operating system.
|
||||||
|
|
||||||
It 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
|
||||||
This mes.c is being simplified[4] to be transpiled by M2-Planet[5].
|
mes.c is being simplified[4] to be transpiled by M2-Planet[5].
|
||||||
|
|
||||||
The Scheme interpreter has a Garbage Collector, a library of loadable
|
The Scheme interpreter has a Garbage Collector, a library of loadable
|
||||||
Scheme modules-- notably Dominique Boucher's LALR[6], Pre-R6RS
|
Scheme modules-- notably Dominique Boucher's LALR[6], Pre-R6RS
|
||||||
[portable syntax-case[7] with R7RS ellipsis, Matt Wette's Nyacc[8]
|
[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:
|
--and test suite, just enough to support a REPL and a C99 compiler:
|
||||||
MesCC.
|
MesCC.
|
||||||
|
|
||||||
Mes+MesCC can compile an only lightly patched TinyCC[9] that is
|
Mes+MesCC can compile an only lightly patched TinyCC[9] that is
|
||||||
|
|
162
doc/announce/ANNOUNCE-0.22
Normal file
162
doc/announce/ANNOUNCE-0.22
Normal file
|
@ -0,0 +1,162 @@
|
||||||
|
|
||||||
|
Subject: GNU Mes 0.22 released
|
||||||
|
|
||||||
|
<#secure method=pgpmime mode=sign>
|
||||||
|
|
||||||
|
We are pleased to announce the release of GNU Mes 0.22, representing
|
||||||
|
57 commits over 8 weeks.
|
||||||
|
|
||||||
|
Mes can now be built reproducibly by mes+mescc or guile+mescc accross
|
||||||
|
distributions such as GNU Guix, Debian GNU/Linux and NixOS. Also, many
|
||||||
|
build issues were fixed. A big thank you to reproducible-builds.org,
|
||||||
|
Vagrant Cascadian, Jelle van der Waa, Hannes Mehnert and David Terry!
|
||||||
|
|
||||||
|
Mes now runs on the Hurd--mescc does not run yet, many system calls are
|
||||||
|
missing, especially fork/exec--and initial scaffolding support for
|
||||||
|
creating FreeBSD binaries was added.
|
||||||
|
|
||||||
|
This release better supports bringing the Scheme-only bootstrap to Guix:
|
||||||
|
it no longer requires an update to the Guix bootstrap seed.
|
||||||
|
|
||||||
|
The Scheme-only bootstrap means that 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.
|
||||||
|
|
||||||
|
We are excited that the Nlnet Foundation[12] is now sponsoring this
|
||||||
|
work!
|
||||||
|
|
||||||
|
Next targets:
|
||||||
|
|
||||||
|
- Introduce the Reduced Binaries Seed bootstrap to NixOS (Debian,
|
||||||
|
Arch, Gentoo, ...?)
|
||||||
|
- Merge the Scheme-only bootstrap, the wip-bootstrap branch (using
|
||||||
|
Guile, Gash and Gash Core Utils to remove awk, bash, core utilities,
|
||||||
|
grep, gzip, make, sed, tar, etc. from the Guix bootstrap binaries)
|
||||||
|
into Guix core-updates.
|
||||||
|
- ARM support
|
||||||
|
- Full Source Bootstrap: compile Mes.c using M2-Planet
|
||||||
|
- Add full Guile module support
|
||||||
|
- Reduced Binary Seed bootstrap for ARM
|
||||||
|
- Support mescc on the Hurd (fork/exec, ...)
|
||||||
|
|
||||||
|
Packages are available in Guix master; the cross-distro reproducible
|
||||||
|
is built using
|
||||||
|
|
||||||
|
guix build --system=i686-linux mes-rb5
|
||||||
|
|
||||||
|
* About
|
||||||
|
|
||||||
|
GNU Mes[0] is a Scheme interpreter and C compiler for bootstrapping the GNU
|
||||||
|
System. Since version 0.22 it has again helped to halve the size of
|
||||||
|
opaque, uninspectable binary seeds that are currently being used in the
|
||||||
|
Reduced Binary Seed bootstrap[1] of GNU Guix[2]. The final goal is to help
|
||||||
|
create a full source bootstrap as part of the bootstrappable builds[3]
|
||||||
|
effort for UNIX-like operating systems.
|
||||||
|
|
||||||
|
The Scheme interpreter is written in ~5,000 LOC of simple C, and the C
|
||||||
|
compiler written in Scheme and these are mutual self-hosting. This
|
||||||
|
mes.c is being simplified[4] to be transpiled by M2-Planet[5].
|
||||||
|
|
||||||
|
Mes 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.22.tar.gz
|
||||||
|
https://ftp.gnu.org/gnu/mes/mes-0.22.tar.gz.sig
|
||||||
|
|
||||||
|
Use a mirror for higher download bandwidth:
|
||||||
|
https://ftpmirror.gnu.org/mes/mes-0.22.tar.gz
|
||||||
|
https://ftpmirror.gnu.org/mes/mes-0.22.tar.gz.sig
|
||||||
|
|
||||||
|
Here are the MD5 and SHA1 checksums:
|
||||||
|
|
||||||
|
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx mes-0.22.tar.gz
|
||||||
|
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx mes-0.22.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.22.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.22 since 0.21
|
||||||
|
** Core
|
||||||
|
*** Mes now builds reproducibly with MesCC, cross distribution
|
||||||
|
Using --with-bootstrap on x86, a bin/mes-mescc is compiled with
|
||||||
|
mes+mescc, that shall have sha256sum
|
||||||
|
|
||||||
|
9e0bcb1633c58e7bc415f6ea27cee7951d6b0658e13cdc147e992b31a14625fb bin/mes-mescc
|
||||||
|
|
||||||
|
This has been verified on GNU Guix, Debian GNU/Linux and NixOS.
|
||||||
|
*** Mes now builds reproducibly with Guile+MesCC vs Mes+MesCC.
|
||||||
|
*** Mes now builds reproducibly with Tiny CC-built MesCC.
|
||||||
|
*** configure now respects the user's CFLAGS, CPPFLAGS and LDFLAGS.
|
||||||
|
*** Mes now supports mescc-tools 0.5.2 next to 0.6.1.
|
||||||
|
This allows introducing the Scheme-only bootstrap without updating or
|
||||||
|
adding new bootstrap binary seeds into GNU Guix.
|
||||||
|
*** Mes now runs when configured --with-courage on the Hurd:
|
||||||
|
GNU debian 0.9 GNU-Mach 1.8+git20170609-486/Hurd-0.9 i686-AT386 GNU
|
||||||
|
Note that mescc does not run; fork and exec are not yet implemented.
|
||||||
|
*** Mes now configures --with-courage on x86-FreeBSD 12.1
|
||||||
|
The initial ELF scaffold tests: exit-42.S, 0exit-42.hex2,
|
||||||
|
body-exit-42.hex2, hello-mes.S, 0hello-mes.hex2, body-hello-mes.hex2
|
||||||
|
pass.
|
||||||
|
*** configure now has a --with-bootstrap option.
|
||||||
|
This adds the reproducible bootstrap build of bin/mes-mescc, using
|
||||||
|
mes+mescc.
|
||||||
|
*** configure prefers $CC over gcc; tcc over gcc, gcc over cc.
|
||||||
|
*** Mes now prints an error when attempting to read a file that does not exist.
|
||||||
|
*** Mes no longer depends on GIT.
|
||||||
|
** Noteworthy bug fixes
|
||||||
|
*** Several annoying build problems were fixed, for non-Guix systems.
|
||||||
|
*** A bug with buffered-read was fixed.
|
||||||
|
This means that bash-2.05 can now build glibc-2.2.5; notably it now
|
||||||
|
successfully executes make-syscall.sh.
|
||||||
|
*** A bug with execlp, execvp for file names containing a slash was fixed.
|
||||||
|
This should allow make-3.80 running scripts that have "#! ./move-if-change".
|
||||||
|
|
||||||
|
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
|
166
doc/mes.texi
166
doc/mes.texi
|
@ -29,7 +29,7 @@ Documentation License''.
|
||||||
|
|
||||||
|
|
||||||
* mes: (mes)Invoking mes. Running Mes, a minimalist Guile lookalike.
|
* mes: (mes)Invoking mes. Running Mes, a minimalist Guile lookalike.
|
||||||
* mescc: (mes)Invoking MesCC. Running the MesCC bootstrap compiler.
|
* mescc: (mes)Invoking mescc. Running the MesCC bootstrap compiler.
|
||||||
@end direntry
|
@end direntry
|
||||||
|
|
||||||
@titlepage
|
@titlepage
|
||||||
|
@ -48,7 +48,7 @@ Edition @value{EDITION} @*
|
||||||
@contents
|
@contents
|
||||||
|
|
||||||
@c *********************************************************************
|
@c *********************************************************************
|
||||||
@node Top
|
@node Top, Introduction, (dir), (dir)
|
||||||
@top GNU Mes
|
@top GNU Mes
|
||||||
|
|
||||||
This document describes GNU Mes version @value{VERSION}, a bootstrappable
|
This document describes GNU Mes version @value{VERSION}, a bootstrappable
|
||||||
|
@ -73,6 +73,7 @@ Software Freedom
|
||||||
* Reproducible Builds:: Reproducibility and free software.
|
* Reproducible Builds:: Reproducibility and free software.
|
||||||
* Bootstrappable Builds:: The freedom to build a software without binary seed.
|
* Bootstrappable Builds:: The freedom to build a software without binary seed.
|
||||||
* Full Source Bootstrap:: Software dependencies worthy of GNU.
|
* Full Source Bootstrap:: Software dependencies worthy of GNU.
|
||||||
|
* LISP as Maxwell's Equations of Software:: Auditable elegance.
|
||||||
|
|
||||||
Installation
|
Installation
|
||||||
|
|
||||||
|
@ -83,15 +84,15 @@ Installation
|
||||||
Bootstrapping
|
Bootstrapping
|
||||||
|
|
||||||
* The Mes Bootstrap Process:: How Mes will make you yogurt from pure milk.
|
* The Mes Bootstrap Process:: How Mes will make you yogurt from pure milk.
|
||||||
* Invoking Mes:: Running Mes, a minimalist Guile lookalike.
|
* Invoking mes:: Running Mes, a minimalist Guile lookalike.
|
||||||
* Invoking MesCC:: Running the MesCC bootstrap compiler.
|
* Invoking mescc:: Running the MesCC bootstrap compiler.
|
||||||
* Invoking mesar::
|
* Invoking mesar::
|
||||||
|
|
||||||
Invoking Mes
|
Invoking mes
|
||||||
|
|
||||||
* Environment Variables:: If the bits won't change, change their habitat.
|
* Environment Variables:: If the bits won't change, change their habitat.
|
||||||
|
|
||||||
Invoking MesCC
|
Invoking mescc
|
||||||
|
|
||||||
* MesCC Environment Variables:: There's no NIX like POSIX.
|
* MesCC Environment Variables:: There's no NIX like POSIX.
|
||||||
|
|
||||||
|
@ -108,7 +109,7 @@ Contributing
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
@c *********************************************************************
|
@c *********************************************************************
|
||||||
@node Introduction
|
@node Introduction, Installation, Top, Top
|
||||||
@chapter Introduction
|
@chapter Introduction
|
||||||
|
|
||||||
@quotation
|
@quotation
|
||||||
|
@ -187,9 +188,10 @@ Freedom 1.
|
||||||
* Reproducible Builds:: Reproducibility and free software.
|
* Reproducible Builds:: Reproducibility and free software.
|
||||||
* Bootstrappable Builds:: The freedom to build a software without binary seed.
|
* Bootstrappable Builds:: The freedom to build a software without binary seed.
|
||||||
* Full Source Bootstrap:: Software dependencies worthy of GNU.
|
* Full Source Bootstrap:: Software dependencies worthy of GNU.
|
||||||
|
* LISP as Maxwell's Equations of Software:: Auditable elegance.
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
@node Reproducible Builds
|
@node Reproducible Builds, Bootstrappable Builds, Introduction, Introduction
|
||||||
@section Reproducible Builds
|
@section Reproducible Builds
|
||||||
|
|
||||||
The current Reproducible Builds effort incubated in the Debian
|
The current Reproducible Builds effort incubated in the Debian
|
||||||
|
@ -238,7 +240,7 @@ packages could be rebuild bit-identical from source.
|
||||||
@author Martin Uecker
|
@author Martin Uecker
|
||||||
@end quotation
|
@end quotation
|
||||||
|
|
||||||
@node Bootstrappable Builds
|
@node Bootstrappable Builds, Full Source Bootstrap, Reproducible Builds, Introduction
|
||||||
@section Bootstrappable Builds
|
@section Bootstrappable Builds
|
||||||
|
|
||||||
Software distributions that take reproducible builds seriously are
|
Software distributions that take reproducible builds seriously are
|
||||||
|
@ -250,14 +252,14 @@ opaque ascii or binary @emph{seeds} that are injected during build
|
||||||
time. Yes, a package may build reproduciblly from all inspectable
|
time. Yes, a package may build reproduciblly from all inspectable
|
||||||
sourcess...but what functionality is programmed in the opaque seed?
|
sourcess...but what functionality is programmed in the opaque seed?
|
||||||
|
|
||||||
@subsection Bootstrap Binaries
|
@subsection Bootstrap Binary Seed
|
||||||
Possibly one of the most harmless, but certainly by far the biggest
|
Possibly one of the most harmless, but certainly by far the biggest
|
||||||
binary seed that all software distributions inject are the so called
|
binary seed that all software distributions inject are the so called
|
||||||
@emph{bootstrap binaries}. Bootstrap binaries are the initial binary
|
@emph{bootstrap binary seed}. 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, version 1.0 had a relatively small
|
The GNU Guix operating system, version 1.0 had a relatively small
|
||||||
closure of bootstrap binaries: GNU binutils, GNU gcc, GNU Libc, GNU
|
closure of bootstrap binary seed: GNU binutils, GNU gcc, GNU Libc, GNU
|
||||||
Guile, and ``Static binaries'' (think: bash, bzip2, coreutils, gawk,
|
Guile, and ``Static binaries'' (think: bash, bzip2, coreutils, gawk,
|
||||||
grep, gzip, patch, sed, tar, xz).
|
grep, gzip, patch, sed, tar, xz).
|
||||||
|
|
||||||
|
@ -287,17 +289,17 @@ $ du -schx *
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
During the Guix 1.1 development series we managed to create the first
|
During the Guix 1.1 development series we managed to create the first
|
||||||
reduction by 50% of the Guix @emph{bootstrap binaries}@footnote{See
|
reduction by 50% of the Guix @emph{bootstrap binary seed}@footnote{See
|
||||||
@url{https://guix.gnu.org/blog/2019/guix-reduces-bootstrap-seed-by-50/}}.
|
@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
|
This was a very important step because the ~250MB @emph{seed} of binary
|
||||||
code was practically non-auditable, which makes it hard to establish
|
code was practically non-auditable, which makes it hard to establish
|
||||||
what source code produced them.
|
what source code produced them.
|
||||||
|
|
||||||
@node Full Source Bootstrap
|
@node Full Source Bootstrap, , Bootstrappable Builds, Introduction
|
||||||
@section Full Source Bootstrap
|
@section Full Source Bootstrap
|
||||||
|
|
||||||
There is an obvious solution: we cannot allow any binary seeds in our
|
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
|
software stack. Not even in the bootstrap binary seed. Maybe that is a
|
||||||
bit too strong: we want to have the absolute minimum of binary seeds and
|
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. How big
|
all binary seeds need to be inspectable and must be reviewed. How big
|
||||||
would the absolute minimal set be?
|
would the absolute minimal set be?
|
||||||
|
@ -321,8 +323,8 @@ of the @var{hex} function
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
All computer programs look like this: an opaque list of computer codes.
|
All computer programs look like this: an opaque list of computer codes.
|
||||||
The initial programs that we take for granted---the bootstrap
|
The initial programs that we take for granted---the bootstrap binary
|
||||||
binaries---are about 250MB of such numbers: think 250,000 pages full of
|
seed---are about 250MB of such numbers: think 250,000 pages full of
|
||||||
numbers.
|
numbers.
|
||||||
|
|
||||||
Most computers work pretty well so apparently there is not a pressing
|
Most computers work pretty well so apparently there is not a pressing
|
||||||
|
@ -407,7 +409,8 @@ nothing to all of the programs that our computer runs. Something that
|
||||||
seemed to be an impossible dream is suddenly starting to look like
|
seemed to be an impossible dream is suddenly starting to look like
|
||||||
``just a couple years of work''.
|
``just a couple years of work''.
|
||||||
|
|
||||||
@subsection LISP as Maxwell's Equations of Software
|
@node LISP as Maxwell's Equations of Software
|
||||||
|
@section LISP as Maxwell's Equations of Software
|
||||||
|
|
||||||
As fate would have it, I stumbled upon this
|
As fate would have it, I stumbled upon this
|
||||||
@url{https://queue.acm.org/detail.cfm?id=1039523, interview with Alan
|
@url{https://queue.acm.org/detail.cfm?id=1039523, interview with Alan
|
||||||
|
@ -426,7 +429,7 @@ over.
|
||||||
@end quotation
|
@end quotation
|
||||||
|
|
||||||
Our starting point is @file{hex0}, a 500 byte hex assembler and we need
|
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
|
to somehow close the gap to building the bootstrap binary seed, esp. GNU
|
||||||
Gcc and the GNU C Library. What better way to do that than by
|
Gcc and the GNU C Library. What better way to do that than by
|
||||||
leveraging the powers of LISP?
|
leveraging the powers of LISP?
|
||||||
|
|
||||||
|
@ -435,8 +438,49 @@ will be indirectly bootstrapped from @file{hex0} and that wields the
|
||||||
magical powers of LISP to close the bootstrap gap, asserting we can
|
magical powers of LISP to close the bootstrap gap, asserting we can
|
||||||
enjoy software Freedom 1.
|
enjoy software Freedom 1.
|
||||||
|
|
||||||
|
@subsection Auditable Elegance
|
||||||
|
|
||||||
|
@code{eval} and @code{apply} are mutual recursing functions that---using
|
||||||
|
a few helper functions---describe the core of the universe of computing.
|
||||||
|
|
||||||
|
@lisp
|
||||||
|
(define (apply fn x a)
|
||||||
|
(cond
|
||||||
|
((atom fn)
|
||||||
|
(cond
|
||||||
|
((eq fn CAR) (caar x))
|
||||||
|
((eq fn CDR) (cdar x))
|
||||||
|
((eq fn CONS) (cons (car x) (cadr x)))
|
||||||
|
((eq fn ATOM) (atom (car x)))
|
||||||
|
((eq fn EQ) (eq (car x) (cadr x)))
|
||||||
|
(#t (apply (eval fn a) x a))))
|
||||||
|
((eq (car fn) LAMBDA)
|
||||||
|
(eval (caddr fn) (pairlis (cadr fn) x a)))
|
||||||
|
((eq (car fn) LABEL)
|
||||||
|
(apply (caddr fn) x
|
||||||
|
(cons (cons (cadr fn) (caddr fn)) a)))))
|
||||||
|
@end lisp
|
||||||
|
|
||||||
|
@lisp
|
||||||
|
(define (eval e a)
|
||||||
|
(cond
|
||||||
|
((atom e) (cdr (assoc e a)))
|
||||||
|
((atom (car e))
|
||||||
|
(cond ((eq (car e) QUOTE) (cadr e))
|
||||||
|
((eq (car e) COND) (evcon (cdr e) a))
|
||||||
|
(#t (apply (car e) (evlis (cdr e) a) a))))
|
||||||
|
(#t (apply (car e) (evlis (cdr e) a) a))))
|
||||||
|
@end lisp
|
||||||
|
|
||||||
|
It will be a big day when our computers are fully bootstrapped from
|
||||||
|
source. It would be nice if that source code were readable, auditable
|
||||||
|
and elegant. To be honest, the elegance displayed above that we
|
||||||
|
achieved at the very start of the Mes project is currently hard to find.
|
||||||
|
It is our sincerest hope to bring back this level of quality and
|
||||||
|
elegance..
|
||||||
|
|
||||||
@c *********************************************************************
|
@c *********************************************************************
|
||||||
@node Installation
|
@node Installation, Bootstrapping, Introduction, Top
|
||||||
@chapter Installation
|
@chapter Installation
|
||||||
|
|
||||||
@cindex installing Mes
|
@cindex installing Mes
|
||||||
|
@ -452,7 +496,7 @@ to use it.
|
||||||
* Running the Test Suites:: Testing Mes.
|
* Running the Test Suites:: Testing Mes.
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
@node Regular Requirements
|
@node Regular Requirements, Bootstrap Requirements, Installation, Installation
|
||||||
@section Regular Requirements
|
@section Regular Requirements
|
||||||
|
|
||||||
This section lists requirements when building Mes from source. The
|
This section lists requirements when building Mes from source. The
|
||||||
|
@ -476,7 +520,7 @@ Mes is compatible with GNU Guile, so it is possible to share the same
|
||||||
Scheme code between both. Currently 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, Running the Test Suites, Regular Requirements, Installation
|
||||||
@section Bootstrap Requirements
|
@section Bootstrap Requirements
|
||||||
|
|
||||||
This section lists requirements when building Mes as a bootstrap
|
This section lists requirements when building Mes as a bootstrap
|
||||||
|
@ -501,7 +545,7 @@ Bootstrapping Mes depends on the following packages:
|
||||||
@item @url{https://savannah.gnu.org/projects/nyacc/, NYACC}, 0.93.0 or later, including 0.99.0.
|
@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, , Bootstrap Requirements, Installation
|
||||||
@section Running the Test Suites
|
@section Running the Test Suites
|
||||||
|
|
||||||
@cindex test suites
|
@cindex test suites
|
||||||
|
@ -544,7 +588,7 @@ CC=gcc CC32=i686-unknown-linux-gnu-gcc MES=guile \
|
||||||
build-aux/test.sh scaffold/tests/00-exit-0
|
build-aux/test.sh scaffold/tests/00-exit-0
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
@node Bootstrapping
|
@node Bootstrapping, Contributing, Installation, Top
|
||||||
@chapter Bootstrapping
|
@chapter Bootstrapping
|
||||||
|
|
||||||
@quotation
|
@quotation
|
||||||
|
@ -584,12 +628,12 @@ responsibility.
|
||||||
|
|
||||||
@menu
|
@menu
|
||||||
* The Mes Bootstrap Process:: How Mes will make you yogurt from pure milk.
|
* The Mes Bootstrap Process:: How Mes will make you yogurt from pure milk.
|
||||||
* Invoking Mes:: Running Mes, a minimalist Guile lookalike.
|
* Invoking mes:: Running Mes, a minimalist Guile lookalike.
|
||||||
* Invoking MesCC:: Running the MesCC bootstrap compiler.
|
* Invoking mescc:: Running the MesCC bootstrap compiler.
|
||||||
* Invoking mesar::
|
* Invoking mesar::
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
@node The Mes Bootstrap Process
|
@node The Mes Bootstrap Process, Invoking mes, Bootstrapping, Bootstrapping
|
||||||
@section The Mes Bootstrap Process
|
@section The Mes Bootstrap Process
|
||||||
|
|
||||||
The Reduced Binary Seed bootstrap currently adopted by Guix@footnote{See
|
The Reduced Binary Seed bootstrap currently adopted by Guix@footnote{See
|
||||||
|
@ -667,8 +711,8 @@ Although we think these are less essential and thus less interesting
|
||||||
than the GNU toolchain triplet that we focussed on initially, our next
|
than the GNU toolchain triplet that we focussed on initially, our next
|
||||||
priority is to eleminate these one by one.
|
priority is to eleminate these one by one.
|
||||||
|
|
||||||
@node Invoking Mes
|
@node Invoking mes, Invoking mescc, The Mes Bootstrap Process, Bootstrapping
|
||||||
@section Invoking Mes
|
@section Invoking mes
|
||||||
|
|
||||||
@cindex repl
|
@cindex repl
|
||||||
The @command{mes} command is the Scheme interpreter whose prime
|
The @command{mes} command is the Scheme interpreter whose prime
|
||||||
|
@ -687,13 +731,13 @@ The @var{option}s can be among the following:
|
||||||
|
|
||||||
@item -s @var{script} @var{arg}@dots{}
|
@item -s @var{script} @var{arg}@dots{}
|
||||||
@cindex script mode
|
@cindex script mode
|
||||||
By default, Mes will read a file named on the command line as a script.
|
By default, mes will read a file named on the command line as a script.
|
||||||
Any command-line arguments @var{arg}@dots{} following @var{script}
|
Any command-line arguments @var{arg}@dots{} following @var{script}
|
||||||
become the script's arguments; the @code{command-line} function returns
|
become the script's arguments; the @code{command-line} function returns
|
||||||
a list of strings of the form @code{(@var{script} @var{arg}@dots{})}.
|
a list of strings of the form @code{(@var{script} @var{arg}@dots{})}.
|
||||||
|
|
||||||
Scripts are read and evaluated as Scheme source code just as the
|
Scripts are read and evaluated as Scheme source code just as the
|
||||||
@code{load} function would. After loading @var{script}, Mes exits.
|
@code{load} function would. After loading @var{script}, mes exits.
|
||||||
|
|
||||||
@item -c @var{expr} @var{arg}@dots{}
|
@item -c @var{expr} @var{arg}@dots{}
|
||||||
@cindex evaluate expression, command-line argument
|
@cindex evaluate expression, command-line argument
|
||||||
|
@ -701,7 +745,7 @@ Evaluate @var{expr} as Scheme code, and then exit. Any command-line
|
||||||
arguments @var{arg}@dots{}) following @var{expr} become command-line
|
arguments @var{arg}@dots{}) following @var{expr} become command-line
|
||||||
arguments; the @code{command-line} function returns a list of strings of
|
arguments; the @code{command-line} function returns a list of strings of
|
||||||
the form @code{(@var{guile} @var{arg}@dots{})}, where @var{mes} is the
|
the form @code{(@var{guile} @var{arg}@dots{})}, where @var{mes} is the
|
||||||
path of the Mes executable.
|
path of the mes executable.
|
||||||
|
|
||||||
@item -- @var{arg}@dots{}
|
@item -- @var{arg}@dots{}
|
||||||
Run interactively, prompting the user for expressions and evaluating
|
Run interactively, prompting the user for expressions and evaluating
|
||||||
|
@ -709,7 +753,7 @@ them. Any command-line arguments @var{arg}@dots{} following the
|
||||||
@option{--} become command-line arguments for the interactive session;
|
@option{--} become command-line arguments for the interactive session;
|
||||||
the @code{command-line} function returns a list of strings of the form
|
the @code{command-line} function returns a list of strings of the form
|
||||||
@code{(@var{guile} @var{arg}@dots{})}, where @var{mes} is the path of the
|
@code{(@var{guile} @var{arg}@dots{})}, where @var{mes} is the path of the
|
||||||
Mes executable.
|
mes executable.
|
||||||
|
|
||||||
@item -L,--load-path=@var{directory}
|
@item -L,--load-path=@var{directory}
|
||||||
Add @var{directory} to the front of Mes module load path. The given
|
Add @var{directory} to the front of Mes module load path. The given
|
||||||
|
@ -732,10 +776,10 @@ and the command-line arguments---the list provided by the
|
||||||
@code{command-line} function.
|
@code{command-line} function.
|
||||||
|
|
||||||
@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 -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.
|
||||||
|
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
|
@ -743,7 +787,7 @@ Display the current version of Mes, and then exit.
|
||||||
* Environment Variables:: If the bits won't change, change their habitat.
|
* Environment Variables:: If the bits won't change, change their habitat.
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
@node Environment Variables
|
@node Environment Variables, , Invoking mes, Invoking mes
|
||||||
@subsection Environment Variables
|
@subsection Environment Variables
|
||||||
@cindex environment variables
|
@cindex environment variables
|
||||||
@cindex shell
|
@cindex shell
|
||||||
|
@ -752,13 +796,13 @@ Display the current version of Mes, and then exit.
|
||||||
@c Hmm, I expected this paragraph in the Guix manual?
|
@c Hmm, I expected this paragraph in the Guix manual?
|
||||||
Here are the environment variables (see @pxref{Environment Variables,,,
|
Here are the environment variables (see @pxref{Environment Variables,,,
|
||||||
guile, Guile Reference}) that affect the run-time behavior of
|
guile, Guile Reference}) that affect the run-time behavior of
|
||||||
Mes:
|
mes:
|
||||||
|
|
||||||
@table @env
|
@table @env
|
||||||
@item MES_BOOT
|
@item MES_BOOT
|
||||||
@vindex MES_BOOT
|
@vindex MES_BOOT
|
||||||
|
|
||||||
Set @env{MES_BOOT} to change the initial Scheme program that Mes runs.
|
Set @env{MES_BOOT} to change the initial Scheme program that mes runs.
|
||||||
|
|
||||||
@item MES_ARENA
|
@item MES_ARENA
|
||||||
@vindex MES_ARENA
|
@vindex MES_ARENA
|
||||||
|
@ -821,8 +865,8 @@ Mes uses @var{@strong{GUILE}_LOAD_PATH} for compatibility with Guile.
|
||||||
|
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
@node Invoking MesCC
|
@node Invoking mescc, Invoking mesar, Invoking mes, Bootstrapping
|
||||||
@section Invoking MesCC
|
@section Invoking mescc
|
||||||
|
|
||||||
@example
|
@example
|
||||||
mescc @var{option}@dots{} @file{FILE}@dots{}
|
mescc @var{option}@dots{} @file{FILE}@dots{}
|
||||||
|
@ -902,14 +946,14 @@ specify LANGUAGE of the following input files
|
||||||
* MesCC Environment Variables:: There's no NIX like POSIX.
|
* MesCC Environment Variables:: There's no NIX like POSIX.
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
@node MesCC Environment Variables
|
@node MesCC Environment Variables, , Invoking mescc, Invoking mescc
|
||||||
@subsection MesCC Environment Variables
|
@subsection MesCC Environment Variables
|
||||||
|
|
||||||
@table @env
|
@table @env
|
||||||
@item MES
|
@item MES
|
||||||
@vindex MES
|
@vindex MES
|
||||||
|
|
||||||
Setting @env{MES} to a mes-compatible Scheme will run MesCC using that
|
Setting @env{MES} to a mes-compatible Scheme will run mescc using that
|
||||||
@example
|
@example
|
||||||
MES=guile mescc -c scaffold/main.c
|
MES=guile mescc -c scaffold/main.c
|
||||||
@end example
|
@end example
|
||||||
|
@ -931,7 +975,7 @@ during the parsing phase.
|
||||||
|
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
@node Invoking mesar
|
@node Invoking mesar, , Invoking mescc, Bootstrapping
|
||||||
@section Invoking mesar
|
@section Invoking mesar
|
||||||
|
|
||||||
@example
|
@example
|
||||||
|
@ -961,7 +1005,7 @@ display version and exit
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
@c *********************************************************************
|
@c *********************************************************************
|
||||||
@node Contributing
|
@node Contributing, Acknowledgments, Bootstrapping, Top
|
||||||
@chapter Contributing
|
@chapter Contributing
|
||||||
|
|
||||||
@menu
|
@menu
|
||||||
|
@ -973,7 +1017,7 @@ display version and exit
|
||||||
* Submitting Patches:: Share your work.
|
* Submitting Patches:: Share your work.
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
@node Building from Git
|
@node Building from Git, Running Mes From the Source Tree, Contributing, Contributing
|
||||||
@section Building from Git
|
@section Building from Git
|
||||||
|
|
||||||
If you want to hack GNU Mes itself, it is recommended to use the latest
|
If you want to hack GNU Mes itself, it is recommended to use the latest
|
||||||
|
@ -997,7 +1041,7 @@ Finally, you have to invoke @code{make check} to run tests
|
||||||
installation instructions (@pxref{Installation}) or send a message to
|
installation instructions (@pxref{Installation}) or send a message to
|
||||||
the @email{bug-mes@@gnu.org} mailing list.
|
the @email{bug-mes@@gnu.org} mailing list.
|
||||||
|
|
||||||
@node Running Mes From the Source Tree
|
@node Running Mes From the Source Tree, Porting GNU Mes, Building from Git, Contributing
|
||||||
@section Running Mes From the Source Tree
|
@section Running Mes From the Source Tree
|
||||||
|
|
||||||
First, you need to have an environment with all the dependencies
|
First, you need to have an environment with all the dependencies
|
||||||
|
@ -1005,7 +1049,7 @@ available (@pxref{Building from Git}), and then simply prefix each
|
||||||
command by @command{./pre-inst-env} (the @file{pre-inst-env} script
|
command by @command{./pre-inst-env} (the @file{pre-inst-env} script
|
||||||
lives in the top build tree of Mes).
|
lives in the top build tree of Mes).
|
||||||
|
|
||||||
@node Porting GNU Mes
|
@node Porting GNU Mes, The Perfect Setup, Running Mes From the Source Tree, Contributing
|
||||||
@section Porting GNU Mes
|
@section Porting GNU Mes
|
||||||
|
|
||||||
Mes was written for x86-linux. A 64 bit (x86_64) is almost done, only a
|
Mes was written for x86-linux. A 64 bit (x86_64) is almost done, only a
|
||||||
|
@ -1017,13 +1061,13 @@ An ARM (armv4/armv7l) linux port is underway. A port to GNU/Hurd
|
||||||
|
|
||||||
Initial scaffold, built by @file{build-aux/build-scaffold.sh}:
|
Initial scaffold, built by @file{build-aux/build-scaffold.sh}:
|
||||||
@example
|
@example
|
||||||
@file{lib/x86-mes-gcc/exit-42.S}
|
@file{lib/linux/x86-mes-gcc/exit-42.S}
|
||||||
@file{lib/x86-mes/elf32-0exit-42.hex2}
|
@file{lib/linux/x86-mes/elf32-0exit-42.hex2}
|
||||||
@file{lib/x86-mes/elf32-body-exit-42.hex2}
|
@file{lib/linux/x86-mes/elf32-body-exit-42.hex2}
|
||||||
|
|
||||||
@file{lib/x86-mes-gcc/hello-mes.S}
|
@file{lib/linux/x86-mes-gcc/hello-mes.S}
|
||||||
@file{lib/x86-mes/elf32-0hello-mes.hex2}
|
@file{lib/linux/x86-mes/elf32-0hello-mes.hex2}
|
||||||
@file{lib/x86-mes/elf32-body-hello-mes.hex2}
|
@file{lib/linux/x86-mes/elf32-body-hello-mes.hex2}
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
Porting MesCC:
|
Porting MesCC:
|
||||||
|
@ -1038,7 +1082,7 @@ Porting MesCC:
|
||||||
@file{mes/module/mescc/i386/info.mes}
|
@file{mes/module/mescc/i386/info.mes}
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
@node The Perfect Setup
|
@node The Perfect Setup, Coding Style, Porting GNU Mes, Contributing
|
||||||
@section The Perfect Setup
|
@section The Perfect Setup
|
||||||
|
|
||||||
The Perfect Setup to hack on Mes is basically the perfect setup used
|
The Perfect Setup to hack on Mes is basically the perfect setup used
|
||||||
|
@ -1053,7 +1097,7 @@ on-line documentation (docstrings), context-sensitive completion,
|
||||||
@kbd{M-.} to jump to an object definition, a REPL to try out your code,
|
@kbd{M-.} to jump to an object definition, a REPL to try out your code,
|
||||||
and more (@pxref{Introduction,,, geiser, Geiser User Manual}).
|
and more (@pxref{Introduction,,, geiser, Geiser User Manual}).
|
||||||
|
|
||||||
@node Coding Style
|
@node Coding Style, Submitting Patches, The Perfect Setup, Contributing
|
||||||
@section Coding Style
|
@section Coding Style
|
||||||
|
|
||||||
In general our code follows the GNU Coding Standards (@pxref{Top,,,
|
In general our code follows the GNU Coding Standards (@pxref{Top,,,
|
||||||
|
@ -1089,7 +1133,7 @@ Additionally, in Mes we prefer to format @code{if} statements like this
|
||||||
else))
|
else))
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
@node Submitting Patches
|
@node Submitting Patches, , Coding Style, Contributing
|
||||||
@section Submitting Patches
|
@section Submitting Patches
|
||||||
|
|
||||||
Development is done using the Git distributed version control system.
|
Development is done using the Git distributed version control system.
|
||||||
|
@ -1139,7 +1183,7 @@ Join us on @code{#bootstrappable} on the Freenode IRC network or on
|
||||||
Please send bug reports with full details to @email{bug-mes@@gnu.org}.
|
Please send bug reports with full details to @email{bug-mes@@gnu.org}.
|
||||||
|
|
||||||
@c *********************************************************************
|
@c *********************************************************************
|
||||||
@node Acknowledgments
|
@node Acknowledgments, Resources, Contributing, Top
|
||||||
@chapter Acknowledgments
|
@chapter Acknowledgments
|
||||||
|
|
||||||
We would like to thank the following people for their help: Jeremiah
|
We would like to thank the following people for their help: Jeremiah
|
||||||
|
@ -1151,7 +1195,7 @@ LISP-1.5 and Alan Kay for their inspiring comment on
|
||||||
@url{https://queue.acm.org/detail.cfm?id=1039523, Page 13}.
|
@url{https://queue.acm.org/detail.cfm?id=1039523, Page 13}.
|
||||||
|
|
||||||
@c *********************************************************************
|
@c *********************************************************************
|
||||||
@node Resources
|
@node Resources, GNU Free Documentation License, Acknowledgments, Top
|
||||||
@chapter Resources
|
@chapter Resources
|
||||||
|
|
||||||
@itemize
|
@itemize
|
||||||
|
@ -1185,17 +1229,17 @@ at the freenode IRC network.
|
||||||
@end itemize
|
@end itemize
|
||||||
|
|
||||||
@c *********************************************************************
|
@c *********************************************************************
|
||||||
@node GNU Free Documentation License
|
@node GNU Free Documentation License, Concept Index, Resources, Top
|
||||||
@appendix GNU Free Documentation License
|
@appendix GNU Free Documentation License
|
||||||
@cindex license, GNU Free Documentation License
|
@cindex license, GNU Free Documentation License
|
||||||
@include fdl-1.3.texi
|
@include fdl-1.3.texi
|
||||||
|
|
||||||
@c *********************************************************************
|
@c *********************************************************************
|
||||||
@node Concept Index
|
@node Concept Index, Programming Index, GNU Free Documentation License, Top
|
||||||
@unnumbered Concept Index
|
@unnumbered Concept Index
|
||||||
@printindex cp
|
@printindex cp
|
||||||
|
|
||||||
@node Programming Index
|
@node Programming Index, , Concept Index, Top
|
||||||
@unnumbered Programming Index
|
@unnumbered Programming Index
|
||||||
@syncodeindex tp fn
|
@syncodeindex tp fn
|
||||||
@syncodeindex vr fn
|
@syncodeindex vr fn
|
||||||
|
|
Loading…
Reference in a new issue