diff --git a/haunt.scm b/haunt.scm index 3f5a2a7..629c347 100644 --- a/haunt.scm +++ b/haunt.scm @@ -1,6 +1,8 @@ ;; -*- geiser-scheme-implementation: guile -*- ;;; Bootstrappable.org website ;;; Copyright © 2016, 2018 Ricardo Wurmus +;;; Copyright © 2018 Julien Lepiller +;;; Copyright © 2018 Gábor Boskovits ;;; ;;; This file is part of the Bootstrappable.org website. ;;; @@ -130,6 +132,19 @@ place them in the directory DEST." (a (@ (href "https://gnu.org/licenses/agpl-3.0.html")) "GNU AGPL") ".")) +(define top-level-titles + '(("Benefits" . "/benefits.html") + ("Best Practises" . "/best-practises.html") + ("Projects" . "/projects.html") + ("Contact" . "/who.html"))) + +(define (menu title) + `(ul ,@(map (lambda (arg) + (let ((name (car arg)) + (link (cdr arg))) + `(li (a (@ (href ,link) (class ,(if (equal? name title) "active" "inactive"))) ,name)))) + top-level-titles))) + (define (make-layout big-banner?) (lambda (site title body) `((doctype "html") @@ -158,6 +173,8 @@ place them in the directory DEST." (a (@ (href "/")) (img (@ (alt "A boot pulled up by its straps.") (src "/images/banner-slim.svg")))))) + (nav (@ (id "menu")) + ,(menu title)) (div (@ (id "page")) ,body) ,footer)))) diff --git a/pages/best-practises.skr b/pages/best-practises.skr index 992bff4..2511c55 100644 --- a/pages/best-practises.skr +++ b/pages/best-practises.skr @@ -1,4 +1,4 @@ -(post :title "Best practises" +(post :title "Best Practises" (page (p [Are you developing or contributing to software that is affected by the bootstrapping problem? The following sections list best practises and practical examples that can help you pull yourself up by your own bootstraps, diff --git a/pages/projects.skr b/pages/projects.skr index 1300c43..f232f40 100644 --- a/pages/projects.skr +++ b/pages/projects.skr @@ -1,47 +1,8 @@ -(post :title "Collaboration projects" +(post :title "Projects" (page (p [Here are a couple of ongoing projects in the bootstrappable builds community. If you're interested in working on any of these projects please ,(anchor "contact us" "/who.html").]) - (h2 [From C++ to the world of Java]) - (p [The Java Development Kit (JDK) is written in Java, so you - need a JDK to build a JDK. - ,(anchor "Learn more about how we cut the cycle!" "/projects/java.html")]) - - (h2 [Maintaining GCC version 4.7]) - (p [The C and C++ compilers of the GNU Compiler Collection make up the foundation of many free software distributions. - Current versions of GCC are written in C++, which means that a C++ compiler is needed to build it from source. - GCC 4.7 was the last version of the collection that could be built with a plain C compiler, a much simpler task.]) - (p [We propose to collectively maintain a subset of GCC 4.7 to ensure that we can build the foundation of free software distributions starting with a simple C compiler (such as tinyCC, pcc, etc).]) - - (h2 [Build GCC 4.7 with a smaller compiler]) - (p [GCC is a complex beast and a binary of it is often used to bootstrap the whole system. - Version 4.7 is the last version of GCC to not require a C++ compiler. - This project aims to build GCC version 4.7 with a simple C compiler such as - ,(anchor "TinyCC" "http://www.landley.net/code/tinycc/"), - ,(anchor "pcc" "http://pcc.ludd.ltu.se/"), or - ,(anchor "qcc" "http://www.landley.net/qcc/").]) - - (h2 [Bootstrapping GHC with Hugs]) - (p [The Glasgow Haskell Compiler (GHC) is the most popular Haskell compiler. - It is written in Haskell and since the first public release requires GHC to build newer versions of the compiler. - It might be possible to build a first GHC from source with the Hugs interpreter and an older version of GHC. - ,(anchor "This blog post describes a first attempt" - "http://elephly.net/posts/2017-01-09-bootstrapping-haskell-part-1.html") - of this project.]) - - (h2 [Working towards a source-based bootstrapping path to a GNU+Linux system]) - (p [,(anchor "Mes" - "https://gitlab.com/janneke/mes") - aims to create an entirely source-based bootstrapping path. - The target is to have - ,(anchor "GuixSD" "https://gnu.org/software/guix") - bootstrap from a minimal, easily inspectable binary—that should be readable as source—into something close to R6RS Scheme.]) - (p [As bootstrapping is presumably easiest and probably most fun with Scheme, the next step for Mes is mescc: - a C compiler/linker to bootstrap into GNU GCC and GNU Guile, possibly via Tiny-CC.]) - (p [It currently has an interpreter written in C with garbage collector, - a library of loadable Scheme modules and test suite just barely enough to support a simple REPL and a proof-of-concept C compiler that produces an ELF from the simplest of C files.]) - (h2 [Growing a source-based bootstrapping path to a GNU system]) (p [,(anchor "Stage0" "http://savannah.nongnu.org/projects/stage0") @@ -49,4 +10,43 @@ With zero external dependencies, with the most painful work already done and real langauges such as assembly, forth and garbage collected lisp already implemented]) (p [Demonstrate some old school skill, by writting a new compiler or interpreter or help with various support tasks required to keep this project on track. Or if low level programming isn't for you, help bridge the gap between our goal and where we are by writing low dependency software in the high level language of your choice that might be easier for us to bootstrap.]) - (p [Even if contributing to it isn't for you, if you could take 7 minutes to verify what already exists on whatever weird operating system or hardware you have; we would love to hear about your results.]))) + (p [Even if contributing to it isn't for you, if you could take 7 minutes to verify what already exists on whatever weird operating system or hardware you have; we would love to hear about your results.]) + + (h2 [Working towards a source-based bootstrapping path to a GNU+Linux system]) + (p [A distsribution has to start from bootstrap binaries that are taken for granted. + ,(anchor "Learn more about how we reduce the size of the binary seeds!" "/projects/mes.html")]) + + (h2 [Maintaining GCC version 4.7]) + (p [The C and C++ compilers of the GNU Compiler Collection make up the foundation of many free software distributions. + Current versions of GCC are written in C++, which means that a C++ compiler is needed to build it from source. + GCC 4.7 was the last version of the collection that could be built with a plain C compiler, a much simpler task.]) + (p [We propose to collectively maintain a subset of GCC 4.7 to ensure that we can build the foundation of free software + distributions starting with a simple C compiler (such as tinyCC, pcc, etc).]) + + (h2 [From C++ to the world of Java]) + (p [The Java Development Kit (JDK) is written in Java, so you + need a JDK to build a JDK. + ,(anchor "Learn more about how we cut the cycle!" "/projects/java.html")]) + + (h2 [Bootstrapping the rest of the Java ecosystem]) + (p [In the Java world there are a lot of tools from testing frameworks + like JUnit to build tools like Maven and Gradle that have self dependencies. + Bootstrapping these is an ongoing effort. To see the current status and + work to be done have a look at ,(anchor "Bootstrapping Java Tools" + "/projects/java-tools.html")]) + + (h2 [Boostrapping JVM languages]) + (p [The Java Virtual Machine runs several other languages besides java, + all of them with their own tools and ecosystem. The most prominent ones + are Groovy, Clojure, Scala and Kotlin. Some of these are already + bootstrapped, but this is an ongoing effort. To see the current status + and work to be done have a look at ,(anchor "Bootstrapping JVM languages" + "/projects/jvm-languages.scm")]) + + (h2 [Bootstrapping GHC with Hugs]) + (p [The Glasgow Haskell Compiler (GHC) is the most popular Haskell compiler. + It is written in Haskell and since the first public release requires GHC to build newer versions of the compiler. + It might be possible to build a first GHC from source with the Hugs interpreter and an older version of GHC. + ,(anchor "This blog post describes a first attempt" + "http://elephly.net/posts/2017-01-09-bootstrapping-haskell-part-1.html") + of this project.]))) diff --git a/pages/projects/java-tools.md b/pages/projects/java-tools.md new file mode 100644 index 0000000..16353c4 --- /dev/null +++ b/pages/projects/java-tools.md @@ -0,0 +1,24 @@ +title: Bootstapping Java Tools +--- + +### Maven + +Maven is a build tool in the Java ecosystem. It needs Maven to build. +Maven is bootstrapped in GNU Guix, using generated build configuration +files for the Ant build tool, that is already bootstrapped as the result +of the [From C++ to the world of Java](/projects/java.html) project. + +You can download the graph of dependencies from [here](/static/graphs/maven.dot) +in a dot format. + +## Gradle + +Gradle is a build tool in the Java ecosystem. It needs Gradle to build. +It also depends on Scala. Scala is currently not bootstrappable, to +see the status of work in progress on the issue see +[Bootstrapping JVM Languages](/projects/jvm-languages.html). + +It would be nice to check if Gradle also depends on Kotlin, which is +another JVM language that is not bootstrapped yet. + +[← back to list of projects](/projects.html) diff --git a/pages/projects/jvm-languages.md b/pages/projects/jvm-languages.md new file mode 100644 index 0000000..2a79e70 --- /dev/null +++ b/pages/projects/jvm-languages.md @@ -0,0 +1,35 @@ +title: Bootstrapping JVM languages +--- + +### Clojure + +The Clojure language is bootstrapped on GNU Guix. + +Clojure just did the right thing regarding bootstrappability. They have a +bootstrappabel build system (Ant), and they have their core in a bootstrappable +language (Java), that is just enough to build the parts of the Clojure complier +so that it can build its Clojure files. + +### Groovy + +The Groovy language is bootstrapped on GNU Guix. + +### Scala + +We do not know about a bootsrap path for Scala. Going down the dependency chain +of Scala proved to be futile, as the first pulished version of Scala depends +on proprietary software. Most probably the only way to do this, after a +thoughtful mapping of problem space, seems to be writing a bootstrap compiler +for Scala. Some preliminary work has already been done in that direction, but +it is not ready for publication yet. People interested bootstrapping Scala +are welcome to inquire on the +[#bootstrappable IRC channel]("http://webchat.freenode.net?randomnick=1&channels=%23bootstrappable&uio=d4") +on freenode. + +### Kotlin + +We do not know about a bootstrap path for Kotiln. We are in the phase of +mapping the dependencies of Kotlin to get a plan to have it bootstrapped. +People interested in bootstrapping Kotlin are welcome to join in. + +[← back to list of projects](/projects.html) diff --git a/pages/projects/mes.md b/pages/projects/mes.md new file mode 100644 index 0000000..cc21174 --- /dev/null +++ b/pages/projects/mes.md @@ -0,0 +1,39 @@ +title: Working towards a source-based bootstrapping path to a GNU+Linux system] +--- + +### Reduced binary seed bootstrap (current status) +[Mes](https://www.gnu.org/software/mes) aims to create an entirely source-based bootstrapping path. +The target is to have [GuixSD](https://gnu.org/software/guix) +bootstrap from a minimal, easily inspectable binary—that should be readable as +source—into something close to R6RS Scheme. + +As bootstrapping is presumably easiest and probably most fun with Scheme, the next step for Mes is mescc: +a C compiler/linker to bootstrap into GNU GCC and GNU Guile, via Tiny-CC. + +It currently has an interpreter written in C with garbage collector, +a library of loadable Scheme modules and test suite just barely enough to support a simple REPL and a +C compiler that can build TinyCC. + +The following the graph shows how in GuixSD GCC is removed from the bootstrap binary seed: + +This is the dependency graph of the bootstrap as implemented in +[GNU Guix](https://gnu.org/software/guix): + +![dependency graph of the bootstrap in GNU Guix](/images/gcc-mesboot0.png) + +--The nodes having elliptical shape are the static bootstrap binaries bundled into +--a single tarball, we show them to make implicit dependencies clear. +-- +--The nodes having red text are development only dependecies, they can be safely +--dropped once the bootstrap is stabilized. + +It is also possible to create a similar bootstrap path for other distributions, +as showcased by Nix on the Reproducible Build Summit. + +### Build GCC 4.7 with a smaller compiler +GCC is a complex beast and a binary of it is often used to bootstrap the whole system. +Version 4.7 is the last version of GCC to not require a C++ compiler. +This project aims to build GCC version 4.7 with a simple C compiler such as +[TinyCC](http://www.landley.net/code/tinycc/). + +[← back to list of projects](/projects.html) diff --git a/pages/who.skr b/pages/who.skr index 9615736..228b2c7 100644 --- a/pages/who.skr +++ b/pages/who.skr @@ -1,7 +1,8 @@ -(post :title "Who we are" +(post :title "Contact" (page (p [This project was started at the ,(anchor "2016 Reproducible Builds Summit" "https://reproducible-builds.org/events/berlin2016/") in Berlin, where people involved with various GNU+Linux distributions and BSDs discussed the state of software reproducibility.]) - (p [To contact us please send email to ,(anchor "the bootstrappable mailing list" "mailto:bootstrappable@freelists.org."). + (p [To contact us please send email to ,(anchor "the bootstrappable mailing list" "mailto:bootstrappable@freelists.org") + or join the ,(anchor "#bootstrappable IRC channel" "http://webchat.freenode.net?randomnick=1&channels=%23bootstrappable&uio=d4") on freenode. The ,(anchor "mailing list archive is publicly accessible" "https://www.freelists.org/archive/bootstrappable/").]) (p [To subscribe to the mailing list send an email with "subscribe" in the subject to ,(code "bootstrappable-request@freelists.org").]))) diff --git a/screen.css b/screen.css new file mode 100644 index 0000000..e69de29 diff --git a/site/benefits.html b/site/benefits.html new file mode 100644 index 0000000..8576336 --- /dev/null +++ b/site/benefits.html @@ -0,0 +1,5 @@ +Benefits

This is nice, but what are the actual benefits of “bootstrappable” implementations?

For users

As a user, bootstrappable implementations, together with reproducible builds, provide confidence that you are running the code you expect to be running. + Its source code is auditable by the developer community, which in turns provides reassurance that the code you’re running does not have backdoors.

For distributors

Bootstrappable implementations provide clear provenance tracking: + the dependency graph of your distribution packages shows how each binary was obtained.

Having an automated process for bootstrapping your distribution on existing architectures greatly simplifies porting to new architectures. + With a formalised system bootstrap process you can just focus on issues specific to the new architecture.

For developers

If you are a compiler writer, making your compiler bootstrappable from a different language will simplify the development process (no need to carry large pre-built binaries around). + It will also make it easier to port the compiler to a different platform for which no bootstrap binaries exist yet.

\ No newline at end of file diff --git a/site/best-practises.html b/site/best-practises.html new file mode 100644 index 0000000..4975c1f --- /dev/null +++ b/site/best-practises.html @@ -0,0 +1,28 @@ +Best Practises

Are you developing or contributing to software that is affected by the bootstrapping problem? + The following sections list best practises and practical examples that can help you pull yourself up by your own bootstraps, + no matter if you are a compiler writer, + a build system developer, + or a system distribution developer.

For compiler writers

If you're working on a compiler that is written in a language other than the one it's compiling, you're all set!

If your compiler is written in the language that it's compiling (“self-hosted”), it probably falls in one of the following categories.

When an alternative implementation exists

If other implementations of this programming language exist, please make sure your compiler can be built with one of these. + Examples include:

  • The Go programming language has two implementations: + the reference implementation is self-hosted, and that in GCC is written in C++. + Furthermore, version 1.4 of the reference implementation was written in a different language and can be used to build version 1.5.
  • Common Lisp has several implementations. + Notably GNU clisp is written and C and can be used to build self-hosted implementations such as SBCL.

When there is only one implementation

If your compiler targets a language for which no other implementation exists, then please consider maintaining a (minimal) implementation of the language written in a different language. + Most likely this implementation exists, or existed at the point the programming language was created. + Maintaining this alternate implementation has a cost; + however, this cost should be minimal if this alternate implementation is used routinely to build the compiler, and if this implementation is kept simple—it does not need to be optimized.

Examples include:

Please let us know if you’d like to add your compiler to this list!

For build systems writers

Build systems sometimes have chicken-and-egg problems: they may need a version of themselves to get built. + If you are developing a build system, this can be avoided. + We recommend that you provide an alternative way to build your build system.

Examples include:

  • GNU Make does not require a make implementation. + It can be built using a shell script.
  • Apache Ant can bootstrap with a shell script that only relies on the Java compiler.
  • Bazel does not require Bazel to build itself but can be boostrapped with a shell script.
  • Buck does not require Buck to build itself. + Instead, it can be built using Ant.

Build systems are generally easier to safely bootstrap than a self-hosted compiler that may need a full language compiler of its language. + A slow and inefficient build written in shell scripts or a different older build system (Ant, GNU Make) may suffice to generate a minimal version of the build system to bootstrap a complete version of it.

For distros

It is unavoidable that distributions use some binaries as part of their bootstrap chain. + However, distributions should endeavour to provide traceacibility and automated reproducibility for such binaries. + This means that:

  • It should be clear where the binary came from and how it was produced.
  • Users can reproduce the binary to verify that it has not been tampered with.

For example, a distribution might use a binary package of GCC to build GCC from source. + This bootstrap binary is in most cases built from a previous revision of the distribution's GCC package. + Thus, the distribution can label the binary with something like "this package was built by running <command> on revision <hash> of the distribution's package repository." + A user can then easily reproduce the binary by fetching the specified sources and running the specified command. + This build will in most cases depend on a previous generation of bootstrap binaries. + Thus, we get a chain of verifiable bootstrap binaries stretching back in time.

Bootstrap binaries may also come from upstream. + This would typically be the case when a language is first added to a distribution. + In this case, it may not be obvious how the binary can be reproduced, but the distribution should at least clearly label the provenance of the binary, e.g. this binary was downloaded from https://upstream-compiler.example.org/upstream-compiler-20161211-x86_64-linux.tar.xz.

\ No newline at end of file diff --git a/site/blog/index.html b/site/blog/index.html new file mode 100644 index 0000000..a2c83c5 --- /dev/null +++ b/site/blog/index.html @@ -0,0 +1 @@ +Recent Posts

Recent Posts

    \ No newline at end of file diff --git a/site/css/DroidSerif-webfont.woff b/site/css/DroidSerif-webfont.woff new file mode 100644 index 0000000..3d2bc95 Binary files /dev/null and b/site/css/DroidSerif-webfont.woff differ diff --git a/site/css/reset.css b/site/css/reset.css new file mode 100644 index 0000000..bf12609 --- /dev/null +++ b/site/css/reset.css @@ -0,0 +1,62 @@ +/* http://meyerweb.com/eric/tools/css/reset/ + v2.0b1 | 201101 + NOTE: WORK IN PROGRESS + USE WITH CAUTION AND TEST WITH ABANDON */ + +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, figcaption, figure, +footer, header, hgroup, menu, nav, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} +body { + line-height: 1; +} +ol, ul { + list-style: none; +} +blockquote, q { + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} + +/* remember to define visible focus styles! +:focus { + outline: ?????; +} */ + +/* remember to highlight inserts somehow! */ +ins { + text-decoration: none; +} +del { + text-decoration: line-through; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} diff --git a/site/css/screen.css b/site/css/screen.css new file mode 100644 index 0000000..4a30ec2 --- /dev/null +++ b/site/css/screen.css @@ -0,0 +1,298 @@ +@font-face { + font-family: 'droid_serifregular'; + src: url('DroidSerif-webfont.woff') format('woff'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'linbiolinum'; + src: url('linbiolinum_rah-webfont.woff2') format('woff2'), + url('linbiolinum_rah-webfont.woff') format('woff'); + font-weight: normal; + font-style: normal; +} + +html { + height: 100%; +} + +html, body { + font-family: "droid_serifregular", serif; + text-rendering: optimizelegibility; + -moz-font-feature-settings: "liga"; + line-height: 140%; + color: #333; + background: #fcfbf3; } + +@media all {html {font-size: 24px;}} +@media all and (max-width:1000px){html {font-size: 24px;}} +@media all and (max-width:960px){html {font-size: 23px;}} +@media all and (max-width:920px){html {font-size: 22px;}} +@media all and (max-width:880px){html {font-size: 21px;}} +@media all and (max-width:840px){html {font-size: 20px;}} +@media all and (max-width:800px){html {font-size: 19px;}} +@media all and (max-width:760px){html {font-size: 18px;}} + +body { + margin: 0 auto; + display:flex; + flex-direction: column; + min-height: 100%; +} + +body .elephly { + background: #bdc0ac; } + +nav#menu { + box-shadow: 0px 3px 8px #ccc; + margin-bottom: 1em; + background: #fff; } + +nav#menu ul { + list-type: none; + text-align: center; +} + +nav#menu ul li { + display: inline-block; + padding: 0.5em 1em; +} + +nav#menu a, nav#menu a:visited { + color: black; +} + +nav#menu a.active, a.active:hover { + color: #ff00ff; + background: none; +} + +/*nav#menu a:hover { + color: inherited; + background: none; +}*/ + +#index { + padding: 1rem; + margin-left: 2rem; } +#banner-slim, #banner { + margin-left: auto; + margin-right: auto; + margin-top: 0; + margin-bottom: 0; + width: 100%; + background: #fff; + text-align: center; } + #banner-slim a, #banner a { + border-bottom: none; } + #banner img { + max-width: 1200px; + min-width: 400px; + height: auto; } + +#banner-slim { + padding-bottom: 0.3em; + padding-top: 0.3em; } + +#banner-slim a:hover { + background-color: inherit; +} + +footer { + background-color: #fff; + box-shadow: 0px -3px 8px #ccc; + color: #000; + font-size: 12px; + margin-top: 3rem; + padding: 1em; + text-align: center; } + footer .highlight { + color: #ff00ff; } + +@media screen and (max-width: 600px) { + #index { + text-align: center; }} + +#page { + flex: 1; +} + +/* drop caps */ + +#page p:first-child:first-letter { + font-size: 5em; + float: left; + color: #ff00ff; + line-height: 1em; + padding-top: 4px; + padding-right: 8px; + padding-left: 3px; +} +#page ul { + list-style: square outside; + margin-top: 0.5rem; + margin-bottom: 0.5rem; } + +div.time { + color: #9ba0a7; + margin-top: -2.8rem; + margin-bottom: 2.5rem; + font-size: 0.9rem; + font-weight: normal; } + +div.figure { + text-align: center; + background: #fff; + box-sizing: border-box; + box-shadow: 0 0 0.4em 0 #888; + margin: 1rem; + padding: 1rem; } + @media screen and (min-width: 600px) { + div.figure { + float: right; }} + @media screen and (max-width: 600px) { + div.figure { + float: none; + clear: both; }} + div#page div.figure p.caption { + width: auto; + text-align: center; + font-size: 0.8rem; } + +div.footnotes { + margin-top: 1rem; + padding-top: 1rem; + border-top: 1px dotted #aaaaaa; } + +h1 { + color: #000; + clear: both; + line-height: 125%; + text-align: center; + margin-top: 1.3rem; + margin-bottom: 1.3rem; + display: block; + font-size: 2.2rem; + font-weight: 400; } + +@media screen and (max-width: 600px) { + h1:first-child { + margin-top: 1rem; }} + +* + h2 { + margin-top: 1.8rem; } + +* + h3 { + margin-top: 1.5rem; } + +h2, h3 { + color: #333; + margin-bottom: 0.5em; + clear: both; } + +h2 { + text-align: center; + font-size: 1.2rem; + padding-bottom: 0.3em; + letter-spacing: -0.02em; } + +h3 { + font-family: "Droid Sans", Arial, sans-serif; + font-size: 1em; + font-weight: bold; } + +a { + color: #0aa; + text-decoration: none; } + a:visited { + color: #808; } + a:hover { + color: #000; + background: #ffff00; } + +strong { + font-weight: bold; } + +div#page { + overflow: visible; + max-width: 32rem; + margin-left: 1rem; + margin-right: 1rem; + margin-bottom: 1rem; } + @media only screen and (min-width: 600px) { + div#page { + margin-left: 4rem; + margin-right: 4rem; }} + @media only screen and (min-width: 1024px) { + div#page { + margin-left: auto; + margin-right: auto; }} + div#page ul { + max-width: 32rem; } + div#page p { + margin-bottom: 0; + text-align: justify; + max-width: 32rem; } + div#page p img, div#page p video { + max-width: 100%; + display: inline; + float: right; + margin-left: 0.8rem; + -moz-border-radius: 15px; + border-radius: 15px; } + div#page p.back { + margin-top: 1.5rem; + width: 50%; } + div#page blockquote { + margin-left: 3rem; + margin-right: 3rem; + margin-top: 1rem; + margin-bottom: 1rem; + font-size: 0.9rem; + font-style: italic; } + div#page img.full { + width: 100%; + margin-top: 0.5rem; + margin-bottom: 1rem; + margin-left: 0; + margin-right: 0; + position: static; + float: none; + clear: both; + padding: 0; + display: block; + -moz-border-radius: 15px; + border-radius: 15px; } + div#page img.stretch { + width: 100%; } + +p + p, div.figure + p { + text-indent: .5rem; + margin-top: 0.4rem; } + +pre { + margin: 1rem; + padding: 1rem; + display: inline-block; + border-radius: 3px; + background: #444; } + +pre code { + color: #aaff00; + background: transparent; } + +span.code, code { + font-family: "Envy Code R", "Inconsolata", "Consolas", "Courier New", monospace; + color: #111; + background: #dedede; } + +span.code { + font-size: 0.85rem; + border-bottom: #888; + padding: .15rem; } + +br { + clear: left; } + +em { + font-style: italic; } diff --git a/site/feed.xml b/site/feed.xml new file mode 100644 index 0000000..e094e86 --- /dev/null +++ b/site/feed.xml @@ -0,0 +1 @@ +BootstrappableRecent Posts2018-12-16T00:06:05+0100 \ No newline at end of file diff --git a/site/graphs/gcc-mesboot0.dot b/site/graphs/gcc-mesboot0.dot new file mode 100644 index 0000000..bee4ee3 --- /dev/null +++ b/site/graphs/gcc-mesboot0.dot @@ -0,0 +1,89 @@ +digraph "Guix bag" { + + dpi=100 + "/gnu/store/gz3agxnnlgkafw2c8jnvk2hqmlh85pkc-guile-bootstrap-2.0.drv" [fontcolor = red] + +//HANDCRAFTED UNTIL HERE TO BE ABLE TO CUSTOMIZE + + "/gnu/store/mywrsxmbsz9k87z755mnymmpdjv0jvf1-gcc-mesboot0-2.95.3.drv" [label = "gcc-mesboot0@2.95.3", shape = box, fontname = Helvetica]; + "/gnu/store/mywrsxmbsz9k87z755mnymmpdjv0jvf1-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/fh33abhfvsdgdrg54m86yhmkihfp1g2j-binutils-mesboot0-2.20.1a.drv" [color = darkgoldenrod]; + "/gnu/store/mywrsxmbsz9k87z755mnymmpdjv0jvf1-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/52nz2cbswm4n91707gy8945h2s4jgvfb-gcc-core-mesboot-2.95.3.drv" [color = darkgoldenrod]; + "/gnu/store/mywrsxmbsz9k87z755mnymmpdjv0jvf1-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/rn88dllv6vh4mxwbr4v9wjmnl4ml3xs2-glibc-mesboot0-2.2.5.drv" [color = darkgoldenrod]; + "/gnu/store/mywrsxmbsz9k87z755mnymmpdjv0jvf1-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" [color = darkgoldenrod]; + "/gnu/store/mywrsxmbsz9k87z755mnymmpdjv0jvf1-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/qf1x4bvxg8ihbgmv57yyiwkj5y8zzmk0-diffutils-mesboot-2.7.drv" [color = darkgoldenrod]; + "/gnu/store/mywrsxmbsz9k87z755mnymmpdjv0jvf1-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/q8d60ln0dxjvqd2ymi1g6xyk3046m23n-linux-libre-headers-bootstrap-0.drv" [color = darkgoldenrod]; + "/gnu/store/mywrsxmbsz9k87z755mnymmpdjv0jvf1-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/vys62fkr9p3qfp9mc36456ffbpz24n60-make-mesboot0-3.80.drv" [color = darkgoldenrod]; + "/gnu/store/fh33abhfvsdgdrg54m86yhmkihfp1g2j-binutils-mesboot0-2.20.1a.drv" [label = "binutils-mesboot0@2.20.1a", shape = box, fontname = Helvetica]; + "/gnu/store/fh33abhfvsdgdrg54m86yhmkihfp1g2j-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/7lcpxky7sn4c9c86ywri6y3x2d4681iv-tcc-boot-0.9.27.drv" [color = peachpuff4]; + "/gnu/store/fh33abhfvsdgdrg54m86yhmkihfp1g2j-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" [color = peachpuff4]; + "/gnu/store/fh33abhfvsdgdrg54m86yhmkihfp1g2j-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/qf1x4bvxg8ihbgmv57yyiwkj5y8zzmk0-diffutils-mesboot-2.7.drv" [color = peachpuff4]; + "/gnu/store/fh33abhfvsdgdrg54m86yhmkihfp1g2j-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/vys62fkr9p3qfp9mc36456ffbpz24n60-make-mesboot0-3.80.drv" [color = peachpuff4]; + "/gnu/store/7lcpxky7sn4c9c86ywri6y3x2d4681iv-tcc-boot-0.9.27.drv" [label = "tcc-boot@0.9.27", shape = box, fontname = Helvetica]; + "/gnu/store/7lcpxky7sn4c9c86ywri6y3x2d4681iv-tcc-boot-0.9.27.drv" -> "/gnu/store/pa9s0y0dx6a60a72434syb1zfxgmqilr-mes-boot-0.18.drv" [color = red]; + "/gnu/store/7lcpxky7sn4c9c86ywri6y3x2d4681iv-tcc-boot-0.9.27.drv" -> "/gnu/store/kd9ly1185dn9z1mbkn0wd2r3fcv1bkw5-tcc-boot0-0.9.26-5.c7b3f59.drv" [color = red]; + "/gnu/store/7lcpxky7sn4c9c86ywri6y3x2d4681iv-tcc-boot-0.9.27.drv" -> "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" [color = red]; + "/gnu/store/pa9s0y0dx6a60a72434syb1zfxgmqilr-mes-boot-0.18.drv" [label = "mes-boot@0.18", shape = box, fontname = Helvetica]; + "/gnu/store/pa9s0y0dx6a60a72434syb1zfxgmqilr-mes-boot-0.18.drv" -> "/gnu/store/gd83makzwnb2aq1x0hylfsi8gaxln5js-bootstrap-mescc-tools-0.5.2.drv" [color = darkseagreen]; + "/gnu/store/pa9s0y0dx6a60a72434syb1zfxgmqilr-mes-boot-0.18.drv" -> "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" [color = darkseagreen]; + "/gnu/store/pa9s0y0dx6a60a72434syb1zfxgmqilr-mes-boot-0.18.drv" -> "/gnu/store/629yzay882kh1yhpqddps2psfhpjrk2q-bootstrap-mes-0.drv" [color = darkseagreen]; + "/gnu/store/pa9s0y0dx6a60a72434syb1zfxgmqilr-mes-boot-0.18.drv" -> "/gnu/store/gz3agxnnlgkafw2c8jnvk2hqmlh85pkc-guile-bootstrap-2.0.drv" [color = darkseagreen]; + "/gnu/store/gd83makzwnb2aq1x0hylfsi8gaxln5js-bootstrap-mescc-tools-0.5.2.drv" [label = "bootstrap-mescc-tools@0.5.2", shape = box, fontname = Helvetica]; + "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" [label = "bootstrap-binaries@0", shape = box, fontname = Helvetica]; + "/gnu/store/629yzay882kh1yhpqddps2psfhpjrk2q-bootstrap-mes-0.drv" [label = "bootstrap-mes@0", shape = box, fontname = Helvetica]; + "/gnu/store/gz3agxnnlgkafw2c8jnvk2hqmlh85pkc-guile-bootstrap-2.0.drv" [label = "guile-bootstrap@2.0", shape = box, fontname = Helvetica]; + "/gnu/store/kd9ly1185dn9z1mbkn0wd2r3fcv1bkw5-tcc-boot0-0.9.26-5.c7b3f59.drv" [label = "tcc-boot0@0.9.26-5.c7b3f59", shape = box, fontname = Helvetica]; + "/gnu/store/kd9ly1185dn9z1mbkn0wd2r3fcv1bkw5-tcc-boot0-0.9.26-5.c7b3f59.drv" -> "/gnu/store/pa9s0y0dx6a60a72434syb1zfxgmqilr-mes-boot-0.18.drv" [color = dimgrey]; + "/gnu/store/kd9ly1185dn9z1mbkn0wd2r3fcv1bkw5-tcc-boot0-0.9.26-5.c7b3f59.drv" -> "/gnu/store/gd83makzwnb2aq1x0hylfsi8gaxln5js-bootstrap-mescc-tools-0.5.2.drv" [color = dimgrey]; + "/gnu/store/kd9ly1185dn9z1mbkn0wd2r3fcv1bkw5-tcc-boot0-0.9.26-5.c7b3f59.drv" -> "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" [color = dimgrey]; + "/gnu/store/kd9ly1185dn9z1mbkn0wd2r3fcv1bkw5-tcc-boot0-0.9.26-5.c7b3f59.drv" -> "/gnu/store/629yzay882kh1yhpqddps2psfhpjrk2q-bootstrap-mes-0.drv" [color = dimgrey]; + "/gnu/store/kd9ly1185dn9z1mbkn0wd2r3fcv1bkw5-tcc-boot0-0.9.26-5.c7b3f59.drv" -> "/gnu/store/gz3agxnnlgkafw2c8jnvk2hqmlh85pkc-guile-bootstrap-2.0.drv" [color = dimgrey]; + "/gnu/store/qf1x4bvxg8ihbgmv57yyiwkj5y8zzmk0-diffutils-mesboot-2.7.drv" [label = "diffutils-mesboot@2.7", shape = box, fontname = Helvetica]; + "/gnu/store/qf1x4bvxg8ihbgmv57yyiwkj5y8zzmk0-diffutils-mesboot-2.7.drv" -> "/gnu/store/pa9s0y0dx6a60a72434syb1zfxgmqilr-mes-boot-0.18.drv" [color = blue]; + "/gnu/store/qf1x4bvxg8ihbgmv57yyiwkj5y8zzmk0-diffutils-mesboot-2.7.drv" -> "/gnu/store/7lcpxky7sn4c9c86ywri6y3x2d4681iv-tcc-boot-0.9.27.drv" [color = blue]; + "/gnu/store/qf1x4bvxg8ihbgmv57yyiwkj5y8zzmk0-diffutils-mesboot-2.7.drv" -> "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" [color = blue]; + "/gnu/store/qf1x4bvxg8ihbgmv57yyiwkj5y8zzmk0-diffutils-mesboot-2.7.drv" -> "/gnu/store/vys62fkr9p3qfp9mc36456ffbpz24n60-make-mesboot0-3.80.drv" [color = blue]; + "/gnu/store/vys62fkr9p3qfp9mc36456ffbpz24n60-make-mesboot0-3.80.drv" [label = "make-mesboot0@3.80", shape = box, fontname = Helvetica]; + "/gnu/store/vys62fkr9p3qfp9mc36456ffbpz24n60-make-mesboot0-3.80.drv" -> "/gnu/store/7lcpxky7sn4c9c86ywri6y3x2d4681iv-tcc-boot-0.9.27.drv" [color = blue]; + "/gnu/store/vys62fkr9p3qfp9mc36456ffbpz24n60-make-mesboot0-3.80.drv" -> "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" [color = blue]; + "/gnu/store/52nz2cbswm4n91707gy8945h2s4jgvfb-gcc-core-mesboot-2.95.3.drv" [label = "gcc-core-mesboot@2.95.3", shape = box, fontname = Helvetica]; + "/gnu/store/52nz2cbswm4n91707gy8945h2s4jgvfb-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/fh33abhfvsdgdrg54m86yhmkihfp1g2j-binutils-mesboot0-2.20.1a.drv" [color = darkseagreen]; + "/gnu/store/52nz2cbswm4n91707gy8945h2s4jgvfb-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/7lcpxky7sn4c9c86ywri6y3x2d4681iv-tcc-boot-0.9.27.drv" [color = darkseagreen]; + "/gnu/store/52nz2cbswm4n91707gy8945h2s4jgvfb-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" [color = darkseagreen]; + "/gnu/store/52nz2cbswm4n91707gy8945h2s4jgvfb-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/qf1x4bvxg8ihbgmv57yyiwkj5y8zzmk0-diffutils-mesboot-2.7.drv" [color = darkseagreen]; + "/gnu/store/52nz2cbswm4n91707gy8945h2s4jgvfb-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/vys62fkr9p3qfp9mc36456ffbpz24n60-make-mesboot0-3.80.drv" [color = darkseagreen]; + "/gnu/store/rn88dllv6vh4mxwbr4v9wjmnl4ml3xs2-glibc-mesboot0-2.2.5.drv" [label = "glibc-mesboot0@2.2.5", shape = box, fontname = Helvetica]; + "/gnu/store/rn88dllv6vh4mxwbr4v9wjmnl4ml3xs2-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/fh33abhfvsdgdrg54m86yhmkihfp1g2j-binutils-mesboot0-2.20.1a.drv" [color = blue]; + "/gnu/store/rn88dllv6vh4mxwbr4v9wjmnl4ml3xs2-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/52nz2cbswm4n91707gy8945h2s4jgvfb-gcc-core-mesboot-2.95.3.drv" [color = blue]; + "/gnu/store/rn88dllv6vh4mxwbr4v9wjmnl4ml3xs2-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" [color = blue]; + "/gnu/store/rn88dllv6vh4mxwbr4v9wjmnl4ml3xs2-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/qf1x4bvxg8ihbgmv57yyiwkj5y8zzmk0-diffutils-mesboot-2.7.drv" [color = blue]; + "/gnu/store/rn88dllv6vh4mxwbr4v9wjmnl4ml3xs2-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/kd7b9sba79s1l7hjdhav51gvci5ws4jy-mesboot-headers-0.18.drv" [color = blue]; + "/gnu/store/rn88dllv6vh4mxwbr4v9wjmnl4ml3xs2-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/vys62fkr9p3qfp9mc36456ffbpz24n60-make-mesboot0-3.80.drv" [color = blue]; + "/gnu/store/kd7b9sba79s1l7hjdhav51gvci5ws4jy-mesboot-headers-0.18.drv" [label = "mesboot-headers@0.18", shape = box, fontname = Helvetica]; + "/gnu/store/kd7b9sba79s1l7hjdhav51gvci5ws4jy-mesboot-headers-0.18.drv" -> "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" [color = cyan3]; + "/gnu/store/kd7b9sba79s1l7hjdhav51gvci5ws4jy-mesboot-headers-0.18.drv" -> "/gnu/store/q8d60ln0dxjvqd2ymi1g6xyk3046m23n-linux-libre-headers-bootstrap-0.drv" [color = cyan3]; + "/gnu/store/q8d60ln0dxjvqd2ymi1g6xyk3046m23n-linux-libre-headers-bootstrap-0.drv" [label = "linux-libre-headers-bootstrap@0", shape = box, fontname = Helvetica]; + +// HANDCRAFTED FROM HERE TO MAKE THE STATIC BOOTSTRAP BINARIES VISIBLE + + tar [fontname = Helvetica] + gzip [fontname = Helvetica] + bzip2 [fontname = Helvetica] + xz [fontname = Helevtica] + patch [fontname = Helevtica] + coreutils [fontname = Helvetica] + sed [fontname = Helvetica] + grep [fontname = Helvetica] + gawk [fontname = Helvetica] + bash [fontname = Helvetica] + + "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" -> tar + "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" -> gzip + "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" -> bzip2 + "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" -> xz + "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" -> patch + "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" -> coreutils + "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" -> sed + "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" -> grep + "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" -> gawk + "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" -> bash +} diff --git a/site/images/banner-slim.svg b/site/images/banner-slim.svg new file mode 100644 index 0000000..f4af402 --- /dev/null +++ b/site/images/banner-slim.svg @@ -0,0 +1,359 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/site/images/banner.svg b/site/images/banner.svg new file mode 100644 index 0000000..86d802c --- /dev/null +++ b/site/images/banner.svg @@ -0,0 +1,401 @@ + + + + + Bootstrappable builds logo + + + + + + image/svg+xml + + Bootstrappable builds logo + + 2016 + + + Ricardo Wurmus + + + http://bootstrappable.org + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/site/images/gcc-mesboot0.png b/site/images/gcc-mesboot0.png new file mode 100644 index 0000000..3c27655 Binary files /dev/null and b/site/images/gcc-mesboot0.png differ diff --git a/site/images/jdk-bootstrap.png b/site/images/jdk-bootstrap.png new file mode 100644 index 0000000..c55e851 Binary files /dev/null and b/site/images/jdk-bootstrap.png differ diff --git a/site/index.html b/site/index.html new file mode 100644 index 0000000..b027e0e --- /dev/null +++ b/site/index.html @@ -0,0 +1,10 @@ +Bootstrappable builds

    Compilers are often written in the language they are compiling. + This creates a chicken-and-egg problem that leads users and distributors to rely on opaque, pre-built binaries of those compilers that they use to build newer versions of the compiler.

    To gain trust in our computing platforms, we need to be able to tell how each part was produced from source. + We believe that opaque binaries are a threat to user security and user freedom since they are not auditable; + we believe the amount of bootstrap binaries should be minimized.

    Benefits

    This is nice, but what are the actual benefits of “bootstrappable” implementations? + Find out what additional benefits there are to achieving bootstrappable builds.

    Best practises

    Are you developing or contributing to software that is affected by the bootstrapping problem? + Here we list best practises and practical examples + that can help you pull yourself up by your own bootstraps.

    Collaboration projects

    Solving bootstrapping problems in existing compilers and build systems requires collaboration. + Here is a list of long-term high-impact projects + that we would like to work on collaboratively.

    More projects and status updates can be found on the bootstrapping wiki.

    Join the mailing list and/or the IRC channel #bootstrappable on freenode for news and communication!

    Further reading

    \ No newline at end of file diff --git a/site/projects.html b/site/projects.html new file mode 100644 index 0000000..8cc7d78 --- /dev/null +++ b/site/projects.html @@ -0,0 +1,22 @@ +Projects

    Here are a couple of ongoing projects in the bootstrappable builds community. + If you're interested in working on any of these projects please contact us.

    Growing a source-based bootstrapping path to a GNU system

    Stage0 + starts with just a 280byte Hex monitor and builds up the infrastructure required to start some serious software development. + With zero external dependencies, with the most painful work already done and real langauges such as assembly, forth and garbage collected lisp already implemented

    Demonstrate some old school skill, by writting a new compiler or interpreter or help with various support tasks required to keep this project on track. + Or if low level programming isn't for you, help bridge the gap between our goal and where we are by writing low dependency software in the high level language of your choice that might be easier for us to bootstrap.

    Even if contributing to it isn't for you, if you could take 7 minutes to verify what already exists on whatever weird operating system or hardware you have; we would love to hear about your results.

    Working towards a source-based bootstrapping path to a GNU+Linux system

    A distsribution has to start from bootstrap binaries that are taken for granted. + Learn more about how we reduce the size of the binary seeds!

    Maintaining GCC version 4.7

    The C and C++ compilers of the GNU Compiler Collection make up the foundation of many free software distributions. + Current versions of GCC are written in C++, which means that a C++ compiler is needed to build it from source. + GCC 4.7 was the last version of the collection that could be built with a plain C compiler, a much simpler task.

    We propose to collectively maintain a subset of GCC 4.7 to ensure that we can build the foundation of free software + distributions starting with a simple C compiler (such as tinyCC, pcc, etc).

    From C++ to the world of Java

    The Java Development Kit (JDK) is written in Java, so you + need a JDK to build a JDK. + Learn more about how we cut the cycle!

    Bootstrapping the rest of the Java ecosystem

    In the Java world there are a lot of tools from testing frameworks + like JUnit to build tools like Maven and Gradle that have self dependencies. + Bootstrapping these is an ongoing effort. To see the current status and + work to be done have a look at Bootstrapping Java Tools

    Boostrapping JVM languages

    The Java Virtual Machine runs several other languages besides java, + all of them with their own tools and ecosystem. The most prominent ones + are Groovy, Clojure, Scala and Kotlin. Some of these are already + bootstrapped, but this is an ongoing effort. To see the current status + and work to be done have a look at Bootstrapping JVM languages

    Bootstrapping GHC with Hugs

    The Glasgow Haskell Compiler (GHC) is the most popular Haskell compiler. + It is written in Haskell and since the first public release requires GHC to build newer versions of the compiler. + It might be possible to build a first GHC from source with the Hugs interpreter and an older version of GHC. + This blog post describes a first attempt + of this project.

    \ No newline at end of file diff --git a/site/projects/java-tools.html b/site/projects/java-tools.html new file mode 100644 index 0000000..8aaf47d --- /dev/null +++ b/site/projects/java-tools.html @@ -0,0 +1,9 @@ +Bootstapping Java Tools

    Maven

    Maven is a build tool in the Java ecosystem. It needs Maven to build. +Maven is bootstrapped in GNU Guix, using generated build configuration +files for the Ant build tool, that is already bootstrapped as the result +of the From C++ to the world of Java project.

    You can download the graph of dependencies from here +in a dot format.

    Gradle

    Gradle is a build tool in the Java ecosystem. It needs Gradle to build. +It also depends on Scala. Scala is currently not bootstrappable, to +see the status of work in progress on the issue see +Bootstrapping JVM Languages.

    It would be nice to check if Gradle also depends on Kotlin, which is +another JVM language that is not bootstrapped yet.

    ← back to list of projects

    \ No newline at end of file diff --git a/site/projects/java.html b/site/projects/java.html new file mode 100644 index 0000000..1ab9cda --- /dev/null +++ b/site/projects/java.html @@ -0,0 +1,24 @@ +From C++ to Java

    The Java Development Kit (JDK) is written in Java, so you need a JDK +to build the JDK. One way to cut this dependency cycle is to use +older tools that were written in a time when Java was not yet popular +enough to write compilers in Java.

    In Guix the Java bootstrap begins with Jikes, a Java compiler written +in C++. We use it to build a simple version of GNU Classpath, the +Java standard library. We chose version 0.93 because it is the last +version that can be built with Jikes. With Jikes and this version of +GNU Classpath we can build JamVM, a Java Virtual Machine. We build +version 1.5.1 because it is the last version of JamVM that works with +a version of GNU classpath that does not require ECJ. These three +packages make up the bootstrap JDK.

    This is sufficient to build an older version of Ant, which is needed +to build an older version of ECJ, an incremental Java compiler, both +of which are written in Java.

    ECJ is needed to build the latest release (0.99) and the development +version of GNU Classpath. The development version of GNU Classpath +has much more support for Java 1.6 than the latest release, but we +need to build 0.99 first to get a working version of javah. ECJ, the +development version of GNU Classpath, and the latest version of JamVM +make up the second stage JDK with which we can build the OpenJDK 6 +with the Icedtea 1.x build framework. We then build the more recent +JDKs Icedtea 2.x and Icedtea 3.x for OpenJDK 7 and 8, respectively.

    Moving on to JDK 9 and 10 is left as an exercise for the reader.

    This is the dependency graph of the bootstrap JDK as implemented in +GNU Guix:

    dependency graph of the bootstrap JDK in GNU Guix

    Unfortunately, most of the software needed for the bootstrap has been +abandoned. To ensure that the JDK can be built from sources without +the need for an existing installation of the OpenJDK we propose to +continue maintaining the links of this bootstrap chain.

    ← back to list of projects

    \ No newline at end of file diff --git a/site/projects/jvm-languages.html b/site/projects/jvm-languages.html new file mode 100644 index 0000000..ba52ffc --- /dev/null +++ b/site/projects/jvm-languages.html @@ -0,0 +1,14 @@ +Bootstrapping JVM languages

    Clojure

    The Clojure language is bootstrapped on GNU Guix.

    Clojure just did the right thing regarding bootstrappability. They have a +bootstrappabel build system (Ant), and they have their core in a bootstrappable +language (Java), that is just enough to build the parts of the Clojure complier +so that it can build its Clojure files.

    Groovy

    The Groovy language is bootstrapped on GNU Guix.

    Scala

    We do not know about a bootsrap path for Scala. Going down the dependency chain +of Scala proved to be futile, as the first pulished version of Scala depends +on proprietary software. Most probably the only way to do this, after a +thoughtful mapping of problem space, seems to be writing a bootstrap compiler +for Scala. Some preliminary work has already been done in that direction, but +it is not ready for publication yet. People interested bootstrapping Scala +are welcome to inquire on the +#bootstrappable IRC channel +on freenode.

    Kotlin

    We do not know about a bootstrap path for Kotiln. We are in the phase of +mapping the dependencies of Kotlin to get a plan to have it bootstrapped. +People interested in bootstrapping Kotlin are welcome to join in.

    ← back to list of projects

    \ No newline at end of file diff --git a/site/projects/mes.html b/site/projects/mes.html new file mode 100644 index 0000000..fd33d5c --- /dev/null +++ b/site/projects/mes.html @@ -0,0 +1,16 @@ +Working towards a source-based bootstrapping path to a GNU+Linux system]

    Reduced binary seed bootstrap (current status)

    Mes aims to create an entirely source-based bootstrapping path. +The target is to have GuixSD +bootstrap from a minimal, easily inspectable binary—that should be readable as +source—into something close to R6RS Scheme.

    As bootstrapping is presumably easiest and probably most fun with Scheme, the next step for Mes is mescc: +a C compiler/linker to bootstrap into GNU GCC and GNU Guile, via Tiny-CC.

    It currently has an interpreter written in C with garbage collector, +a library of loadable Scheme modules and test suite just barely enough to support a simple REPL and a +C compiler that can build TinyCC.

    The following the graph shows how in GuixSD GCC is removed from the bootstrap binary seed:

    This is the dependency graph of the bootstrap as implemented in +GNU Guix:

    dependency graph of the bootstrap in GNU Guix

    --The nodes having elliptical shape are the static bootstrap binaries bundled into +--a single tarball, we show them to make implicit dependencies clear. +-- +--The nodes having red text are development only dependecies, they can be safely +--dropped once the bootstrap is stabilized.

    It is also possible to create a similar bootstrap path for other distributions, +as showcased by Nix on the Reproducible Build Summit.

    Build GCC 4.7 with a smaller compiler

    GCC is a complex beast and a binary of it is often used to bootstrap the whole system. +Version 4.7 is the last version of GCC to not require a C++ compiler. +This project aims to build GCC version 4.7 with a simple C compiler such as +TinyCC.

    ← back to list of projects

    \ No newline at end of file diff --git a/site/who.html b/site/who.html new file mode 100644 index 0000000..2e260f6 --- /dev/null +++ b/site/who.html @@ -0,0 +1,4 @@ +Contact

    This project was started at the 2016 Reproducible Builds Summit in Berlin, + where people involved with various GNU+Linux distributions and BSDs discussed the state of software reproducibility.

    To contact us please send email to the bootstrappable mailing list + or join the #bootstrappable IRC channel on freenode. + The mailing list archive is publicly accessible.

    To subscribe to the mailing list send an email with "subscribe" in the subject to bootstrappable-request@freelists.org.

    \ No newline at end of file diff --git a/static/css/screen.css b/static/css/screen.css index 24a7b03..4a30ec2 100644 --- a/static/css/screen.css +++ b/static/css/screen.css @@ -12,6 +12,10 @@ font-style: normal; } +html { + height: 100%; +} + html, body { font-family: "droid_serifregular", serif; text-rendering: optimizelegibility; @@ -30,10 +34,44 @@ html, body { @media all and (max-width:760px){html {font-size: 18px;}} body { - margin: 0 auto; } - body .elephly { + margin: 0 auto; + display:flex; + flex-direction: column; + min-height: 100%; +} + +body .elephly { background: #bdc0ac; } +nav#menu { + box-shadow: 0px 3px 8px #ccc; + margin-bottom: 1em; + background: #fff; } + +nav#menu ul { + list-type: none; + text-align: center; +} + +nav#menu ul li { + display: inline-block; + padding: 0.5em 1em; +} + +nav#menu a, nav#menu a:visited { + color: black; +} + +nav#menu a.active, a.active:hover { + color: #ff00ff; + background: none; +} + +/*nav#menu a:hover { + color: inherited; + background: none; +}*/ + #index { padding: 1rem; margin-left: 2rem; } @@ -41,9 +79,8 @@ body { margin-left: auto; margin-right: auto; margin-top: 0; - margin-bottom: 1em; + margin-bottom: 0; width: 100%; - box-shadow: 0px 3px 8px #ccc; background: #fff; text-align: center; } #banner-slim a, #banner a { @@ -57,6 +94,10 @@ body { padding-bottom: 0.3em; padding-top: 0.3em; } +#banner-slim a:hover { + background-color: inherit; +} + footer { background-color: #fff; box-shadow: 0px -3px 8px #ccc; @@ -72,7 +113,12 @@ footer { #index { text-align: center; }} +#page { + flex: 1; +} + /* drop caps */ + #page p:first-child:first-letter { font-size: 5em; float: left; diff --git a/static/graphs/gcc-mesboot0.dot b/static/graphs/gcc-mesboot0.dot new file mode 100644 index 0000000..bee4ee3 --- /dev/null +++ b/static/graphs/gcc-mesboot0.dot @@ -0,0 +1,89 @@ +digraph "Guix bag" { + + dpi=100 + "/gnu/store/gz3agxnnlgkafw2c8jnvk2hqmlh85pkc-guile-bootstrap-2.0.drv" [fontcolor = red] + +//HANDCRAFTED UNTIL HERE TO BE ABLE TO CUSTOMIZE + + "/gnu/store/mywrsxmbsz9k87z755mnymmpdjv0jvf1-gcc-mesboot0-2.95.3.drv" [label = "gcc-mesboot0@2.95.3", shape = box, fontname = Helvetica]; + "/gnu/store/mywrsxmbsz9k87z755mnymmpdjv0jvf1-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/fh33abhfvsdgdrg54m86yhmkihfp1g2j-binutils-mesboot0-2.20.1a.drv" [color = darkgoldenrod]; + "/gnu/store/mywrsxmbsz9k87z755mnymmpdjv0jvf1-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/52nz2cbswm4n91707gy8945h2s4jgvfb-gcc-core-mesboot-2.95.3.drv" [color = darkgoldenrod]; + "/gnu/store/mywrsxmbsz9k87z755mnymmpdjv0jvf1-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/rn88dllv6vh4mxwbr4v9wjmnl4ml3xs2-glibc-mesboot0-2.2.5.drv" [color = darkgoldenrod]; + "/gnu/store/mywrsxmbsz9k87z755mnymmpdjv0jvf1-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" [color = darkgoldenrod]; + "/gnu/store/mywrsxmbsz9k87z755mnymmpdjv0jvf1-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/qf1x4bvxg8ihbgmv57yyiwkj5y8zzmk0-diffutils-mesboot-2.7.drv" [color = darkgoldenrod]; + "/gnu/store/mywrsxmbsz9k87z755mnymmpdjv0jvf1-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/q8d60ln0dxjvqd2ymi1g6xyk3046m23n-linux-libre-headers-bootstrap-0.drv" [color = darkgoldenrod]; + "/gnu/store/mywrsxmbsz9k87z755mnymmpdjv0jvf1-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/vys62fkr9p3qfp9mc36456ffbpz24n60-make-mesboot0-3.80.drv" [color = darkgoldenrod]; + "/gnu/store/fh33abhfvsdgdrg54m86yhmkihfp1g2j-binutils-mesboot0-2.20.1a.drv" [label = "binutils-mesboot0@2.20.1a", shape = box, fontname = Helvetica]; + "/gnu/store/fh33abhfvsdgdrg54m86yhmkihfp1g2j-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/7lcpxky7sn4c9c86ywri6y3x2d4681iv-tcc-boot-0.9.27.drv" [color = peachpuff4]; + "/gnu/store/fh33abhfvsdgdrg54m86yhmkihfp1g2j-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" [color = peachpuff4]; + "/gnu/store/fh33abhfvsdgdrg54m86yhmkihfp1g2j-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/qf1x4bvxg8ihbgmv57yyiwkj5y8zzmk0-diffutils-mesboot-2.7.drv" [color = peachpuff4]; + "/gnu/store/fh33abhfvsdgdrg54m86yhmkihfp1g2j-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/vys62fkr9p3qfp9mc36456ffbpz24n60-make-mesboot0-3.80.drv" [color = peachpuff4]; + "/gnu/store/7lcpxky7sn4c9c86ywri6y3x2d4681iv-tcc-boot-0.9.27.drv" [label = "tcc-boot@0.9.27", shape = box, fontname = Helvetica]; + "/gnu/store/7lcpxky7sn4c9c86ywri6y3x2d4681iv-tcc-boot-0.9.27.drv" -> "/gnu/store/pa9s0y0dx6a60a72434syb1zfxgmqilr-mes-boot-0.18.drv" [color = red]; + "/gnu/store/7lcpxky7sn4c9c86ywri6y3x2d4681iv-tcc-boot-0.9.27.drv" -> "/gnu/store/kd9ly1185dn9z1mbkn0wd2r3fcv1bkw5-tcc-boot0-0.9.26-5.c7b3f59.drv" [color = red]; + "/gnu/store/7lcpxky7sn4c9c86ywri6y3x2d4681iv-tcc-boot-0.9.27.drv" -> "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" [color = red]; + "/gnu/store/pa9s0y0dx6a60a72434syb1zfxgmqilr-mes-boot-0.18.drv" [label = "mes-boot@0.18", shape = box, fontname = Helvetica]; + "/gnu/store/pa9s0y0dx6a60a72434syb1zfxgmqilr-mes-boot-0.18.drv" -> "/gnu/store/gd83makzwnb2aq1x0hylfsi8gaxln5js-bootstrap-mescc-tools-0.5.2.drv" [color = darkseagreen]; + "/gnu/store/pa9s0y0dx6a60a72434syb1zfxgmqilr-mes-boot-0.18.drv" -> "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" [color = darkseagreen]; + "/gnu/store/pa9s0y0dx6a60a72434syb1zfxgmqilr-mes-boot-0.18.drv" -> "/gnu/store/629yzay882kh1yhpqddps2psfhpjrk2q-bootstrap-mes-0.drv" [color = darkseagreen]; + "/gnu/store/pa9s0y0dx6a60a72434syb1zfxgmqilr-mes-boot-0.18.drv" -> "/gnu/store/gz3agxnnlgkafw2c8jnvk2hqmlh85pkc-guile-bootstrap-2.0.drv" [color = darkseagreen]; + "/gnu/store/gd83makzwnb2aq1x0hylfsi8gaxln5js-bootstrap-mescc-tools-0.5.2.drv" [label = "bootstrap-mescc-tools@0.5.2", shape = box, fontname = Helvetica]; + "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" [label = "bootstrap-binaries@0", shape = box, fontname = Helvetica]; + "/gnu/store/629yzay882kh1yhpqddps2psfhpjrk2q-bootstrap-mes-0.drv" [label = "bootstrap-mes@0", shape = box, fontname = Helvetica]; + "/gnu/store/gz3agxnnlgkafw2c8jnvk2hqmlh85pkc-guile-bootstrap-2.0.drv" [label = "guile-bootstrap@2.0", shape = box, fontname = Helvetica]; + "/gnu/store/kd9ly1185dn9z1mbkn0wd2r3fcv1bkw5-tcc-boot0-0.9.26-5.c7b3f59.drv" [label = "tcc-boot0@0.9.26-5.c7b3f59", shape = box, fontname = Helvetica]; + "/gnu/store/kd9ly1185dn9z1mbkn0wd2r3fcv1bkw5-tcc-boot0-0.9.26-5.c7b3f59.drv" -> "/gnu/store/pa9s0y0dx6a60a72434syb1zfxgmqilr-mes-boot-0.18.drv" [color = dimgrey]; + "/gnu/store/kd9ly1185dn9z1mbkn0wd2r3fcv1bkw5-tcc-boot0-0.9.26-5.c7b3f59.drv" -> "/gnu/store/gd83makzwnb2aq1x0hylfsi8gaxln5js-bootstrap-mescc-tools-0.5.2.drv" [color = dimgrey]; + "/gnu/store/kd9ly1185dn9z1mbkn0wd2r3fcv1bkw5-tcc-boot0-0.9.26-5.c7b3f59.drv" -> "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" [color = dimgrey]; + "/gnu/store/kd9ly1185dn9z1mbkn0wd2r3fcv1bkw5-tcc-boot0-0.9.26-5.c7b3f59.drv" -> "/gnu/store/629yzay882kh1yhpqddps2psfhpjrk2q-bootstrap-mes-0.drv" [color = dimgrey]; + "/gnu/store/kd9ly1185dn9z1mbkn0wd2r3fcv1bkw5-tcc-boot0-0.9.26-5.c7b3f59.drv" -> "/gnu/store/gz3agxnnlgkafw2c8jnvk2hqmlh85pkc-guile-bootstrap-2.0.drv" [color = dimgrey]; + "/gnu/store/qf1x4bvxg8ihbgmv57yyiwkj5y8zzmk0-diffutils-mesboot-2.7.drv" [label = "diffutils-mesboot@2.7", shape = box, fontname = Helvetica]; + "/gnu/store/qf1x4bvxg8ihbgmv57yyiwkj5y8zzmk0-diffutils-mesboot-2.7.drv" -> "/gnu/store/pa9s0y0dx6a60a72434syb1zfxgmqilr-mes-boot-0.18.drv" [color = blue]; + "/gnu/store/qf1x4bvxg8ihbgmv57yyiwkj5y8zzmk0-diffutils-mesboot-2.7.drv" -> "/gnu/store/7lcpxky7sn4c9c86ywri6y3x2d4681iv-tcc-boot-0.9.27.drv" [color = blue]; + "/gnu/store/qf1x4bvxg8ihbgmv57yyiwkj5y8zzmk0-diffutils-mesboot-2.7.drv" -> "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" [color = blue]; + "/gnu/store/qf1x4bvxg8ihbgmv57yyiwkj5y8zzmk0-diffutils-mesboot-2.7.drv" -> "/gnu/store/vys62fkr9p3qfp9mc36456ffbpz24n60-make-mesboot0-3.80.drv" [color = blue]; + "/gnu/store/vys62fkr9p3qfp9mc36456ffbpz24n60-make-mesboot0-3.80.drv" [label = "make-mesboot0@3.80", shape = box, fontname = Helvetica]; + "/gnu/store/vys62fkr9p3qfp9mc36456ffbpz24n60-make-mesboot0-3.80.drv" -> "/gnu/store/7lcpxky7sn4c9c86ywri6y3x2d4681iv-tcc-boot-0.9.27.drv" [color = blue]; + "/gnu/store/vys62fkr9p3qfp9mc36456ffbpz24n60-make-mesboot0-3.80.drv" -> "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" [color = blue]; + "/gnu/store/52nz2cbswm4n91707gy8945h2s4jgvfb-gcc-core-mesboot-2.95.3.drv" [label = "gcc-core-mesboot@2.95.3", shape = box, fontname = Helvetica]; + "/gnu/store/52nz2cbswm4n91707gy8945h2s4jgvfb-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/fh33abhfvsdgdrg54m86yhmkihfp1g2j-binutils-mesboot0-2.20.1a.drv" [color = darkseagreen]; + "/gnu/store/52nz2cbswm4n91707gy8945h2s4jgvfb-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/7lcpxky7sn4c9c86ywri6y3x2d4681iv-tcc-boot-0.9.27.drv" [color = darkseagreen]; + "/gnu/store/52nz2cbswm4n91707gy8945h2s4jgvfb-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" [color = darkseagreen]; + "/gnu/store/52nz2cbswm4n91707gy8945h2s4jgvfb-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/qf1x4bvxg8ihbgmv57yyiwkj5y8zzmk0-diffutils-mesboot-2.7.drv" [color = darkseagreen]; + "/gnu/store/52nz2cbswm4n91707gy8945h2s4jgvfb-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/vys62fkr9p3qfp9mc36456ffbpz24n60-make-mesboot0-3.80.drv" [color = darkseagreen]; + "/gnu/store/rn88dllv6vh4mxwbr4v9wjmnl4ml3xs2-glibc-mesboot0-2.2.5.drv" [label = "glibc-mesboot0@2.2.5", shape = box, fontname = Helvetica]; + "/gnu/store/rn88dllv6vh4mxwbr4v9wjmnl4ml3xs2-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/fh33abhfvsdgdrg54m86yhmkihfp1g2j-binutils-mesboot0-2.20.1a.drv" [color = blue]; + "/gnu/store/rn88dllv6vh4mxwbr4v9wjmnl4ml3xs2-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/52nz2cbswm4n91707gy8945h2s4jgvfb-gcc-core-mesboot-2.95.3.drv" [color = blue]; + "/gnu/store/rn88dllv6vh4mxwbr4v9wjmnl4ml3xs2-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" [color = blue]; + "/gnu/store/rn88dllv6vh4mxwbr4v9wjmnl4ml3xs2-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/qf1x4bvxg8ihbgmv57yyiwkj5y8zzmk0-diffutils-mesboot-2.7.drv" [color = blue]; + "/gnu/store/rn88dllv6vh4mxwbr4v9wjmnl4ml3xs2-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/kd7b9sba79s1l7hjdhav51gvci5ws4jy-mesboot-headers-0.18.drv" [color = blue]; + "/gnu/store/rn88dllv6vh4mxwbr4v9wjmnl4ml3xs2-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/vys62fkr9p3qfp9mc36456ffbpz24n60-make-mesboot0-3.80.drv" [color = blue]; + "/gnu/store/kd7b9sba79s1l7hjdhav51gvci5ws4jy-mesboot-headers-0.18.drv" [label = "mesboot-headers@0.18", shape = box, fontname = Helvetica]; + "/gnu/store/kd7b9sba79s1l7hjdhav51gvci5ws4jy-mesboot-headers-0.18.drv" -> "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" [color = cyan3]; + "/gnu/store/kd7b9sba79s1l7hjdhav51gvci5ws4jy-mesboot-headers-0.18.drv" -> "/gnu/store/q8d60ln0dxjvqd2ymi1g6xyk3046m23n-linux-libre-headers-bootstrap-0.drv" [color = cyan3]; + "/gnu/store/q8d60ln0dxjvqd2ymi1g6xyk3046m23n-linux-libre-headers-bootstrap-0.drv" [label = "linux-libre-headers-bootstrap@0", shape = box, fontname = Helvetica]; + +// HANDCRAFTED FROM HERE TO MAKE THE STATIC BOOTSTRAP BINARIES VISIBLE + + tar [fontname = Helvetica] + gzip [fontname = Helvetica] + bzip2 [fontname = Helvetica] + xz [fontname = Helevtica] + patch [fontname = Helevtica] + coreutils [fontname = Helvetica] + sed [fontname = Helvetica] + grep [fontname = Helvetica] + gawk [fontname = Helvetica] + bash [fontname = Helvetica] + + "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" -> tar + "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" -> gzip + "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" -> bzip2 + "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" -> xz + "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" -> patch + "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" -> coreutils + "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" -> sed + "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" -> grep + "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" -> gawk + "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" -> bash +} diff --git a/static/images/gcc-mesboot0.png b/static/images/gcc-mesboot0.png new file mode 100644 index 0000000..3c27655 Binary files /dev/null and b/static/images/gcc-mesboot0.png differ