doc: Remarks from Rutger.

* doc/mes.texi: Remarks from Rutger.
This commit is contained in:
Jan Nieuwenhuizen 2018-07-09 19:59:54 +02:00
parent 9ad4c789d7
commit a4943c1db1
No known key found for this signature in database
GPG key ID: F3C1A0D9C1D65273

View file

@ -60,6 +60,7 @@ Scheme interpreter and C compiler written for bootstrapping the GNU system.
* Bootstrapping:: Would you strap my boots? * Bootstrapping:: Would you strap my boots?
* Contributing:: Your help needed! * Contributing:: Your help needed!
* Acknowledgments:: Thanks! * Acknowledgments:: Thanks!
* Resources::
* GNU Free Documentation License:: The license of this manual. * GNU Free Documentation License:: The license of this manual.
* Concept Index:: Concepts. * Concept Index:: Concepts.
* Programming Index:: Data types, functions, and variables. * Programming Index:: Data types, functions, and variables.
@ -115,9 +116,9 @@ These were “Maxwells Equations of Software!”
@end quotation @end quotation
Mes@footnote{``Mes'' is an acronym for the Maxwell Equations of Mes@footnote{``Mes'' is an acronym for the Maxwell Equations of
Software.} consists of a mutual self-hosting Scheme interpreter Software.} consists of a mutual self-hosting Scheme interpreter written
prototype written in C and a Nyacc-based (see @pxref{NYACC User's in C and a Nyacc-based (see @pxref{NYACC User's Guide,,, nyacc-ug, NYACC
Guide,,, nyacc-ug, NYACC User's Guide}) C compiler written in Scheme. User's Guide}) C compiler written in Scheme.
The Scheme interpreter @file{mes.c} is about 5000LOC of restricted C and The Scheme interpreter @file{mes.c} is about 5000LOC of restricted C and
intended to be bootstrappable using a very simple C compiler. intended to be bootstrappable using a very simple C compiler.
@ -125,19 +126,39 @@ intended to be bootstrappable using a very simple C compiler.
@section Software Freedom @section Software Freedom
@cindex purpose @cindex purpose
The four essential Freedoms of Software are at the core of our GNU The four essential Freedoms of Software are at the core of our GNU
community. Quoting@footnote{The four essential freedoms community. Quoting the GNU philosophy@footnote{The four essential
@url{https://www.gnu.org/philosophy/free-sw.html}} freedom #1 freedoms @url{https://www.gnu.org/philosophy/free-sw.html}}
@quotation @quotation
The freedom to study how the program works, and change it so it does A program is free software if the program's users have the four
your computing as you wish (freedom 1). Access to the source code is a essential freedoms:
precondition for this.
@enumerate 0
@item
The freedom to run the program as you wish, for any purpose (freedom 0).
@item
The freedom to study how the program works, and change it so it does
your computing as you wish (freedom 1). Access to the source code is
a precondition for this.
@item
The freedom to redistribute copies so you can help others (freedom
2).
@item
The freedom to distribute copies of your modified versions to others
(freedom 3). By doing this you can give the whole community a chance
to benefit from your changes. Access to the source code is a
precondition for this.
@end enumerate
@end quotation @end quotation
So we have access to the software, we have studied it, possibly modified So we have access to the software, we have studied it, possibly modified
it, we built it and we installed it on a computer or some device. How it, we built it and we installed it on a computer or some device. How
can we trust that when we run the program we are indeed running the can we trust that when we run the program we are indeed running the
untainted product of the source code that we studied? untainted product of the source code that we studied? Unless we are
certain of this we cannot really enjoy freedom 1.
@menu @menu
* Reproducible Builds:: Reproducibility and free software. * Reproducible Builds:: Reproducibility and free software.
@ -175,7 +196,7 @@ largely because failing that precondition makes justifable trust in
binaries provided suspect at best and downright dangerous in reality. binaries provided suspect at best and downright dangerous in reality.
It becomes clear that a bit-by-bit reproducible build of all our It becomes clear that a bit-by-bit reproducible build of all our
sofwares is essential if we value our Freedom #1. sofwares is essential if we value our Freedom 1.
@subsection An Old Idea @subsection An Old Idea
@ -199,8 +220,8 @@ Software distributions that take reproducible builds seriously are
currently shipping well over 90% reproducible packages. currently shipping well over 90% reproducible packages.
That a package builds bit-by-bit reproducibly however is not enough to That a package builds bit-by-bit reproducibly however is not enough to
guarantee Freedom #1. There is another factor that is often overlooked: guarantee Freedom 1. There is another factor that is often overlooked:
opaque ascii or binary @emph{seeds} that are injected dnuring build 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?
@ -245,10 +266,10 @@ $ du -schx *
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 binaries. Maybe that is a
bit too strong: 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 need to be reviewed. all binary seeds need to be inspectable and must be reviewed.
@subsection The Magical Self Hosting Hex Assembler @subsection The Magical Self-Hosting Hex Assembler
June 2016 I learnt about June 2016 I learnt about
@url{https://github.com/oriansj/stage0/,Stage0}. Jeremiah Orians @url{https://github.com/oriansj/stage0/,Stage0}. Jeremiah Orians
@ -283,7 +304,7 @@ powers of LISP?
Mes is a Scheme@footnote{Scheme is a modern LISP} interpreter that will Mes is a Scheme@footnote{Scheme is a modern LISP} interpreter that will
be indirectly bootstrapped from @file{hex0} and that wields the magical be indirectly bootstrapped from @file{hex0} and that wields the magical
powers of LISP to close the bootstrap gap, asserting we can enjoy powers of LISP to close the bootstrap gap, asserting we can enjoy
software Freedom #1. software Freedom 1.
@c ********************************************************************* @c *********************************************************************
@node Installation @node Installation
@ -480,6 +501,15 @@ binutils-source + binutils0 + gcc + glibc => binutils
gcc-source + binutils + gcc-core + glibc => gcc gcc-source + binutils + gcc-core + glibc => gcc
@end verbatim @end verbatim
@c FIXME: ./pre-inst-env guix graph --type=references gcc-mesboot@4.1.0
@c | dot -T png > gcc-mesboot-4.1.0.png
@c Using anything else (e.g. --type=package, --type=bag) produces an
@c unreadable image with *many* duplicates.
Here's a generated dependency diagram to give you impression, it is
not complete or correct.
@image{images/gcc-mesboot-graph,2in,,Reference graph of the gcc-mesboot} @image{images/gcc-mesboot-graph,2in,,Reference graph of the gcc-mesboot}
Work is ongoing to remove these binary seeds that were intentionally Work is ongoing to remove these binary seeds that were intentionally
@ -889,12 +919,46 @@ Join us on @code{#bootstrappable} on the Freenode IRC network or on
We would like to thank the following people for their help: Jeremiah We would like to thank the following people for their help: Jeremiah
Orians, pdewacht, rain1, Ricardo Wurmus, Rutger van Beusekom. Orians, pdewacht, rain1, Ricardo Wurmus, Rutger van Beusekom.
w
We also thank Ludovic Courtès for creating GuixSD and making the We also thank Ludovic Courtès for creating GuixSD and making the
bootstrap problem so painfully visible, John McCarthy for creating bootstrap problem so painfully visible, John McCarthy for creating
LISP-1.5 and Alan Kay for their inspiring comment on 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 *********************************************************************
@node Resources
@chapter Resources
@itemize
@item
@url{https://bootstrappable.org, Bootstrappable Builds} Minimize the
amount and size of opaque binary seeds we need to swallow.
@item
@url{https://reproducible-builds.org, Reproducible Builds}
Provide a verifiable path from source code to binary.
@item
@url{https://gitlab.com/oriansj/stage0, Stage0}
If we want, it could all start with a ~500 byte self-hosting hex
assembler.
@item
@url{https://bootstrapping.miraheze.org, Bootstrapping wiki} An amazing
collection of small/bootstrappable compilers, operating systems,
anything you need.
@item
@url{irc.freenode.net, #bootstrappable} The bootstrapping community home
at the freenode IRC network.
@item
@file{guix-devel@@gnu.org} The Guix mailing list, where it all started.
@url{https://lists.gnu.org/archive/html/guix-devel/, guix-devel archives}.
@end itemize
@c ********************************************************************* @c *********************************************************************
@node GNU Free Documentation License @node GNU Free Documentation License
@appendix GNU Free Documentation License @appendix GNU Free Documentation License