Modularisierung in Java 8 noch nicht endgültig verworfen

Laut Mark Reinhold, dem bei Oracle maßgeblich verantwortlichen Ingenieur für die Java-Entwicklung, ist mit einer Entscheidung in etwa einem Monat zu rechnen. Vieles spricht aber erst für die Implementierung eines standardisierten Modulsystems in Java 9.

In Pocket speichern vorlesen Druckansicht 62 Kommentare lesen
Lesezeit: 4 Min.
Von
  • Harald M. Genauck

Eigentlich sollte Jigsaw schon in dem im letzten Jahr verabschiedeten Java 7 Einzug halten. Das OpenJDK-Projekt mit dem Ziel, ein standardisiertes Modulsystem für die Java Standard Edition (Java SE) zu entwerfen und zu implementieren, schaffte es aber dann doch nicht in das Release: Oracle hatte die Community hinsichtlich der Modularisierung auf die nächste Version vertröstet, um die Veröffentlichung von Java 7 nicht noch länger aufzuschieben. Doch vor einigen Wochen äußerste Mark Reinhold, der bei Oracle maßgeblich verantwortliche Ingenieur für die Java-Entwicklung, Bedenken, ob die bisherige Entwicklung schon weit genug fortgeschritten sei, um die an die Technik gestellten Anforderungen rechtzeitig bis zum nächsten Sommer, wenn Java 8 erscheinen soll, umsetzen zu können.

Wie Reinhold jetzt berichtet, sei die Entscheidung über die Einführung der Modularisierung in Java 8 beziehungsweise über eine Verzögerung noch nicht abschließend getroffen worden, man könne aber in etwa einem Monat damit rechnen. Die Community sei in zwei etwa gleich große Lager gespalten. Der eine Teil befürworte eine Aufteilung der Einführung des Jigsaw-Konzepts in mehreren Schritten, der andere plädiere für eine Verschiebung.

Eine Aufteilung etwa in eine Einführung des Modulsystems in Java 8 und in eine eigentliche Modularisierung der Plattform erst später in Java 9 komme allerdings nicht in Frage. Die Gefahr grundlegender Fehlentwicklungen sei zu groß und eine spätere Korrektur schwerwiegender Design-Fehler kaum akzeptabel. Für ein Zwischenrelease mit dem Modulsystem, etwa als ein Java 8.5 veröffentlicht, hätte Oracle dagegen trotz des erheblich gestiegenen Engagements, des Zuwachses an Mitarbeitern und der wachsenden Beteiligung vieler Leute und Organisationen in der OpenJDK-Community nicht genügend Ressourcen zur Verfügung.

Die Ursache dafür, dass das Projekt noch nicht reif genug für eine Einführung in Java 8 sei, begründet Reinhold zunächst einmal in der anfänglich mangelnden Unterstützung durch Sun. Während der Phase der Übernahme von Sun durch Oracle sei das Projekt vorübergehend auf Eis gelegt und erst nach der Fertigstellung von Java 7 mit der Einstellung weiterer Entwickler reaktiviert worden.

Außerdem käme hinzu, dass die Aufgabenstellung anspruchsvoll sei. Als recht monolithisch gewachsenes Softwaresystem sei die JDK-Codebasis tief mit der API und den Implementierungsebenen verwachsen. Trotz aller Anstrengungen bisher, die Abhängigkeiten so weit wie möglich zu eliminieren, seien noch einige Stolpersteine aus dem Weg zu räumen. Natürlich müsse auch die Kompatibilität zu den bisherigen Releases gewahrt werden.

Derzeit sei das Meiste der Kernbestandteile des Modulsystems in groben Zügen erstellt sowie kompilierbar und laufe in der Runtime. Dazu sei die Java-Programmiersprache um Moduldeklarationen sowie um eine Struktur für modulare Code-Bäume und entsprechende Klassenbäume erweitert worden. Die Definition eines effizienten Formats für die Moduldateien und eine vorläufige API gäbe es ebenfalls schon. Die Aufteilung des JDKs und der Java SE API in einen Satz kohärenter Module sei damit auf einem guten Wege.

Anregungen wie die, der Einfachheit halber gleich auf Maven mit seinem existierenden Build-Modulsystem aufzusetzen, verwirft Reinhold, da dieses keinerlei Unterstützung für eine Modularität zur Laufzeit böte. Das Komponentensystem OSGi ließe sich auch nicht adaptieren, da es Reinholds Meinung nach trotz seines vorhandenen modularen Konzepts und des Lifecycle-Modells samt dynamischer Service-Registrierung für anspruchsvolle Anwendungen nicht interessant genug für eine Standardisierung als Teil der Java-SE-Plattform sei. Außerdem sei OSGi in seiner Modularität lediglich auf das Packing, das Deployment und auf die Ausführungsebene beschränkt. Da es somit strikt erst auf der Java-SE-Plattform aufsetze, könne es daher nicht die Modularisierung der Plattform selber leisten.

Befürchtungen, dass sich Maven und OSGi mit der Einführung eines Modulsystems in der Java-Plattform erübrigen könnten, zerstreut Reinhold. Es werde großer Wert darauf gelegt, dass das Modulsystem bestens mit Maven zusammenspielen werde. Ebenso müsse die Unterstützung von OSGi erhalten bleiben. Gegebenenfalls notwendige Anpassungen würden momentan im OpenJDK-Projekt Penrose evaluiert. (ane)