1 |
It seems there has been some confusion over the naming of the ebuilds |
2 |
for OpenJDK/IcedTea |
3 |
support within Gentoo, so, at Petteri's request, this e-mail aims to |
4 |
clear things up and hopefully |
5 |
alleviate some of these issues. |
6 |
|
7 |
Understanding the naming really involves understanding the development |
8 |
of OpenJDK so far. |
9 |
The release of Sun's reference implementation of the Java SE platform |
10 |
was completed in May 2007, |
11 |
and this codebase was known as OpenJDK. This basically represents the |
12 |
current state of what |
13 |
will eventually become Java 1.7 or JDK7, the contents of which are |
14 |
still unknown as there is no |
15 |
JSR for this platform as yet. The platform specification does not |
16 |
include the plugin or webstart support, |
17 |
so, given the state of this code, it was not included. On initial |
18 |
release, about 4% of the code base |
19 |
was also missing, having to be replaced by proprietary binary plugs |
20 |
from one of the proprietary Sun JDKs. |
21 |
Thus, although we were much closer to a complete Free JDK, there were |
22 |
three major issues remaining: |
23 |
|
24 |
* The released code was for 1.7, not the 1.6 release actually in use, |
25 |
and it couldn't be certified as Java(TM). |
26 |
* The code couldn't be built Freely, preventing its use in Fedora, |
27 |
Debian and Ubuntu. |
28 |
* The plugin and webstart support which users would expect from a JDK |
29 |
were missing. |
30 |
|
31 |
Two of these issues were quickly solved by hackers at Red Hat who |
32 |
started the IcedTea project. This provided |
33 |
a way of building OpenJDK using existing Free Java runtimes such as |
34 |
GCJ and provided replacements for the |
35 |
encumbrances using code from GNU Classpath. gcjwebplugin was also |
36 |
modified to provide plugin support |
37 |
against Sun's applet code rather than GNU Classpath's, and the |
38 |
existing NetX project continued its development |
39 |
as part of IcedTea, providing webstart support. Resulting binaries |
40 |
shipped as a package named 'icedtea' in |
41 |
Fedora Core 8. |
42 |
|
43 |
Over time, OpenJDK and IcedTea continued to develop. Sun provided |
44 |
replacements for some of the encumbrances, |
45 |
mainly in the area of Java2D such as font and renderer support, and |
46 |
cryptography. IcedTea was kept up to date with |
47 |
each new OpenJDK cooked build, by modification of the existing |
48 |
patches. This continues today, with the latest |
49 |
IcedTea release being 1.7. Ebuilds for both 1.7 and the live |
50 |
Mercurial repository are held in java-experimental, as |
51 |
they provide a snapshot of 1.7 development rather than a completed JDK |
52 |
aimed at the user. |
53 |
|
54 |
In early 2008, Sun began the OpenJDK6 project to provide a Free 1.6 |
55 |
implementation, and allowed external developers |
56 |
(notably Red Hat) access to the Java Compatibility Kit (JCK) so that |
57 |
the resulting builds could be demonstrated to be |
58 |
compatible with the existing proprietary JDK6 builds provided by Sun. |
59 |
OpenJDK6 was created, not from the proprietary |
60 |
JDK6 tree (which would require another legal review on the epic scale |
61 |
already undertaken for the JDK7 code), but by |
62 |
taking the OpenJDK tree and removing new features added by Sun developers. |
63 |
|
64 |
The issues with building the code and the encumbrances remained with |
65 |
OpenJDK6 so a matching IcedTea6 tree was launched |
66 |
to provide the same level of support to the new code base. It is a |
67 |
build of IcedTea6 from Fedora that recently passed the JCK, |
68 |
finally proving that a certifiable Free JDK implementation can exist. |
69 |
Getting to this point was non-trivial, as the base of OpenJDK |
70 |
and then additional patching by IcedTea meant that the codebase was |
71 |
quite distinct from the proprietary JDK6 being shipped by |
72 |
Sun, notably with some of the Free replacements for the encumbrances |
73 |
being completely different code from the proprietary version |
74 |
in JDK6. |
75 |
|
76 |
In the java overlay, we currently have an ebuild for IcedTea6 1.2. |
77 |
This matches the name of the upstream project and version. There |
78 |
is also a live build in experimental, and 1.3 is likely to become |
79 |
available in the next few weeks. On IRC, some have expressed dislike |
80 |
for this naming, preferring including terms like 'OpenJDK' and the |
81 |
cooked build on which it is based. This is further confused by the |
82 |
binary builds in Fedora, Debian and Ubuntu now being called 'OpenJDK'. |
83 |
This isn't because they just felt like changing the name. |
84 |
Use of the 'OpenJDK' name is subject to the OpenJDK trademark license |
85 |
and requires fulfilling certain conditions, including the codebase |
86 |
being almost completely based on the tree from Sun. |
87 |
|
88 |
In Gentoo, we work at the source level in general, whereas the |
89 |
approach of Fedora, Debian and Ubuntu is from one of a binary package. |
90 |
With OpenJDK and IcedTea, this presents some differences. The most |
91 |
prominent is the use of the trademark license. With a binary |
92 |
build, the distro developer knows what is in the binary and whether it |
93 |
qualifies to be called OpenJDK. The source from which these binaries |
94 |
are built is still IcedTea6, as may be demonstrated via executing |
95 |
'java -version'. With Gentoo, the presence of USE flags and local |
96 |
settings |
97 |
mean that we don't know what will result from the ebuild in binary |
98 |
form. Some builds will be roughly equivalent to the builds in Fedora, |
99 |
Debian |
100 |
and Ubuntu, but some may not. There is functionality in IcedTea, such |
101 |
as the ability to use CACAO instead of HotSpot, that would mean |
102 |
the resulting binary does not qualify to be called OpenJDK (such |
103 |
packages are called cacao-oj6 in Debian and Ubuntu for example). |
104 |
|
105 |
More practically, we need to be able to track bugs and issues with |
106 |
ebuilds easily. IcedTea6 1.2 is a known quantity. It uses a certain |
107 |
cooked build of OpenJDK6 and a certain set of patches. Moving to a |
108 |
new build drop is non-trivial requiring patches to be added, dropped |
109 |
or updated. IcedTea is more than simply a build harness and the |
110 |
resulting binary is different from what would be obtained from a pure |
111 |
OpenJDK source base. In addition to the OpenJDK source tree, it |
112 |
includes (as of the current Mercurial tree): |
113 |
|
114 |
* 81 patches to the source code, including one to allow the build to |
115 |
run with ecj + GNU Classpath. Not all of these are applied |
116 |
to every build, but the majority are. |
117 |
* Gary Benson's zero assembler support which allows OpenJDK to be used |
118 |
on ppc, ppc64, arm, mips, m68k, ia64, etc. |
119 |
* Webstart support in the form of NetX |
120 |
* Plugin support from gcjwebplugin (IcedTea plugin is coming soon with |
121 |
LiveConnect support) |
122 |
* Support for building using the CACAO VM instead of HotSpot (again |
123 |
for other architecture support) |
124 |
* Gary Benson's platform-independent JIT called Shark based on LLVM |
125 |
* VisualVM support |
126 |
* Javascript support via Rhino |
127 |
|
128 |
In addition, there is always the option that someone may wish to |
129 |
provide an ebuild that just builds the OpenJDK |
130 |
or OpenJDK6 tree. Note that one thing already being considered among |
131 |
the IcedTea developers is how to add the IcedTea version to |
132 |
the java -version output because the lack of this is causing issues |
133 |
with reporting bugs. By naming our ebuilds using the IcedTea schema, |
134 |
and directly relating to our upstream codebase, we have already solved |
135 |
this issue in Gentoo. Naming it OpenJDK would not reflect |
136 |
what is being installed or the upstream being used. |
137 |
|
138 |
For those who hate the aboration of having the version number as part |
139 |
of the package name, note that this is intended to be short-lived. |
140 |
As the discussion above implies, the OpenJDK6 tree is a stop-gap, |
141 |
created to fulfill the need for a complete implementation now. |
142 |
When 1.7 is released, IcedTea will become the primary JDK again and |
143 |
IcedTea6 will cease development. At present, most of the |
144 |
maintenance work for OpenJDK6/IcedTea6 is being done by the IcedTea |
145 |
hackers; Sun only have Joe Darcy working on this. Their |
146 |
concentration is on 1.7. Thus, we should really note our appreciation |
147 |
of this work by naming the IcedTea project rather than |
148 |
hiding it under the name OpenJDK. |
149 |
|
150 |
When IcedTea6 hits the main tree, most of this will become irrelevant |
151 |
anyway, as the virtual dependency should just do the right |
152 |
thing and pull in IcedTea6. I don't intend IcedTea or any of the live |
153 |
builds to go into the main tree, but are there for those who wish to |
154 |
experiment. |
155 |
|
156 |
Hope that clarifies things, |
157 |
-- |
158 |
Andrew :-) |
159 |
|
160 |
Support Free Java! |
161 |
Contribute to GNU Classpath and the OpenJDK |
162 |
http://www.gnu.org/software/classpath |
163 |
http://openjdk.java.net |
164 |
|
165 |
PGP Key: 94EFD9D8 (http://subkeys.pgp.net) |
166 |
Fingerprint: F8EF F1EA 401E 2E60 15FA 7927 142C 2591 94EF D9D8 |