doc: Remarks from Rutger.
* doc/mes.texi: Remarks from Rutger.
This commit is contained in:
parent
9ad4c789d7
commit
a4943c1db1
98
doc/mes.texi
98
doc/mes.texi
|
@ -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 “Maxwell’s 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
|
||||||
|
|
Loading…
Reference in a new issue