projects: Break out page about JDK bootstrapping.

This commit is contained in:
Ricardo Wurmus 2018-12-12 16:32:40 +01:00
parent 388215daee
commit 14c778af61
No known key found for this signature in database
GPG Key ID: 197A5888235FACAC
4 changed files with 58 additions and 13 deletions

View File

@ -3,9 +3,10 @@
(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 [Maintaining the Java bootstrap])
(p [The Java Development Kit (JDK) is written in Java. The JDK can be bootstrapped from C++ with Jikes, JamVM, GNU Classpath and older versions of the IcedTea build system for the OpenJDK. See the ,(anchor "Guix sources for an implementation" "https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/java.scm#n82") of this bootstrap chain. Most of the software needed for the bootstrap unfortunately has been abandoned.])
(p [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 bootstrap chain.])
(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.

43
pages/projects/java.md Normal file
View File

@ -0,0 +1,43 @@
title: 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](https://gnu.org/software/guix):
![dependency graph of the bootstrap JDK in GNU Guix](/images/jdk-bootstrap.png)
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](/projects.html)

View File

@ -167,43 +167,44 @@ a {
strong {
font-weight: bold; }
div.page {
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 {
div#page {
margin-left: 4rem;
margin-right: 4rem; }}
@media only screen and (min-width: 1024px) {
div.page {
div#page {
margin-left: auto;
margin-right: auto; }}
div.page ul {
div#page ul {
max-width: 32rem; }
div.page p {
div#page p {
margin-bottom: 0;
text-align: justify;
max-width: 32rem; }
div.page p img, div#page p video {
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 {
div#page p.back {
margin-top: 1.5rem;
width: 50%; }
div.page blockquote {
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 {
div#page img.full {
width: 100%;
margin-top: 0.5rem;
margin-bottom: 1rem;
@ -216,7 +217,7 @@ div.page {
display: block;
-moz-border-radius: 15px;
border-radius: 15px; }
div.page img.stretch {
div#page img.stretch {
width: 100%; }
p + p, div.figure + p {

Binary file not shown.

After

Width:  |  Height:  |  Size: 401 KiB