Viva Java Libre: Ohne großen Rummel

Dalibor Topic

Im November feiert das OpenJDK-Projekt sein zweijähriges Jubiläum. Am 13. November 2006 wurden als erste Bestandteile von OpenJDK die Hotspot JVM und der Javac Compiler unter der GPL veröffentlicht. Seitdem hat sich, ohne allzu großen Rummel, einiges getan.

Open Source Java war lange Zeit ein Reizthema in der Java-Community. In wüsten Diskussionen befürchtete man, dass Java und Open Source gar nicht zusammenpassen, böse Leute die Java-Plattform bis zur Unkenntlichkeit spalten oder gar die GPL die Java-Welt verschlingen würde. Dann kam OpenJDK, und Stück für Stück wurde Open Source Java ein Teil der Normalität, mit diversen Projekten und einer stetigen Flut an Linux-Paketen.

OpenJDK-Kolumne

Teil 1: Ohne großen Rummel

Teil 2: OpenJDK-Innovationen und mehr

Damit es soweit kommen konnte, war zuerst eine Menge an Vorarbeit notwendig. Ein „normales“ JDK besteht nämlich nicht nur aus Code von Sun Microsystems, sondern auch von anderen, wie ein Blick in die THIRDPARTYLICENSEREADME-Datei in einer Java-SE-6-Installation zeigt. Dazu kommt proprietärer Code, der für die Verwendung im JDK von Sun lizenziert wurde. Um diesen Code auch für die Verwendung in OpenJDK und die Veröffentlichung unter der GPL frei zu bekommen, musste verhandelt werden. Damit sich dadurch die Veröffentlichung von Java SE 6 nicht verzögerte, entschied man sich, diese Arbeit am Codezweig für Java SE 7 zu machen.

In den meisten Fällen waren diese Verhandlungen erfolgreich, sodass OpenJDK ein halbes Jahr nach Hotspot und Javac bei der JavaOne 2007 auch den Rest des JDK unter der GPL veröffentlichen konnte – bis auf einige wenige Ausnahmen, bei OpenJDK Encumbrancies (d.h. Altlasten), bei denen die Rechteinhaber noch nicht überzeugt waren. Es waren zwar nur vier Prozent des gesamten Codes, aber es war klar, dass sie schleunigst ersetzt werden mussten. Damit fiel der Startschuss für die Community, diese Altlasten zu beseitigen.

Kampf den Altlasten

Die Aufgabe nahm etwa ein Jahr in Anspruch. Teilweise konnte Sun die Rechteinhaber doch noch überzeugen, ihren Code freundlicherweise für OpenJDK unter der GPL zur Verfügung zu stellen. Teilweise gelang das jedoch nicht, und die Altlasten wurden entweder durch neuen Code von Sun oder durch die Community beseitigt. Die Community steuerte z.B. eine Neuimplementierung des Software-Synthesizers für Java Sound bei. Bei der JavaOne 2008 konnte man schließlich bekanntgeben, dass die Altlasten bis auf ca. 60k einer SNMP-Implementierung endgültig Geschichte im OpenJDK 6 sind. Da die API hinter SNMP jedoch nicht Teil der Java-SE-6-Spezifikation ist, kann man den OpenJDK-6-Code nehmen und es erfolgreich durch die Java-SE-6-Kompatibilitätstests jagen.

Eine kleine Abstammungslehre

Wie bereits erwähnt, fanden die Aufräumarbeiten am Codezweig für Java SE 7 statt, der dann zu OpenJDK wurde. Da sich Java SE 7 noch in Entwicklung befindet und damit noch keine stabile Plattform zur Verfügung steht, hatte man ein kleines Problem. Was Linux-Distributionen wie Fedora und Ubuntu eigentlich brauchten, war eine Open-Source-Ausgabe von Java SE 6. Die ganze Vorarbeit für OpenJDK aber noch einmal auf der Basis von Java SE 6 zu wiederholen, machte keinen Sinn. Daher entschied man sich, von OpenJDK 7 aus, an dem diese Vorarbeit abgeschlossen war, zurück in die Vergangenheit zu reisen. So entstand aus OpenJDK das OpenJDK-6-Projekt.

OpenJDK 6 traf sofort auf große Zustimmung bei den Linux-Distributionen. In den letzten Monaten seit der JavaOne ist es zum Stamm-JDK bei Fedora, Ubuntu und anderen Distributionen geworden. Als Installationspaket ist es in weiteren Distributionen verfügbar – von Debian über Gentoo zu Mandriva und natürlich auch OpenSUSE.

Damit die Distributoren auch die Kompatibilität ihrer Pakete mit Java SE 6 mit den entsprechenden Tests überprüfen können, hat Sun das Java Compatibility Kit (JCK) für Java SE 6 unter einem (für TCKs) recht liberalen OpenJDK Community TCK License Agreement bereitgestellt, für die Verwendung mit OpenJDK und davon abgeleiteten Projekten. Das JCK selbst ist nicht Open Source, es ist aber für interessierte OpenJDK-Entwickler und -Distributoren kostenlos erhältlich. Die OpenJDK Conformance Group hat dabei auch den Schleier des Geheimnisvollen, der bisher über der Benutzung des JCKs lag, weggefegt und die Dokumentation zum JCK veröffentlicht, damit man sich mit den Arbeitsabläufen vertraut machen kann, die für eine Zertifizierung als kompatible Java-SE-6-Implementierung notwendig sind. Wer also schon immer wissen wollte, wie das genau läuft mit dem JCK und den Kompatibilitätstests, kann jetzt genüsslich aus dem Vollen schöpfen.

Das JCK ist vor allem für Linux-Distributoren interessant, und das Fedora-Projekt hat bereits die Kompatibilitätstests für die OpenJDK-6-Pakete in Fedora 9 auf den x86- und amd64-Plattformen bestanden. Die dafür notwendigen Patches aus Fedora fließen regelmäßig in OpenJDK 6 ein. Damit wird es auch für andere Distributionen, die OpenJDK 6 ausliefern, einfacher, die Kompatibilitätstests zu bestehen.

Geschrieben von
Dalibor Topic
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.