"Pragmatischer Kompromiss" zur Behandlung interner APIs im JDK 9

Oracle lenkt ein: Java 9 behält sun.misc.Unsafe

Hartmut Schlosser

© Shutterstock.com/Fernando Sanchez Cortes

Die kontroverse Debatte um die Entfernung interner APIs aus JDK 9 hat ein vorläufiges Ende gefunden: Wie Java-Plattform-Leiter Mark Reinhold auf der OpenJDK-Mailing-Liste mitteilt, sollen Teile des sun-misc-Unsafe-Pakets, für welche keine offiziell unterstützte Alternative bereit gestellt werden kann, auch weiterhin im JDK 9 verfügbar bleiben.

Zunächst erkennt Reinhold an, dass zahlreiche populäre Bibliotheken von internen APIs wie sun-misc.Unsafe Gebrauch machen, um Methoden aufzurufen, die sonst nur schwer bis gar nicht außerhalb des JDK zu implementieren sind. Die bisher präferierte Lösung, Unsafe per Default zu deaktivieren und nur über einen Kommandozeilen-Flag verfügbar zu machen, wird deshalb verworfen.

Die Lösung, die Reinhold stattdessen vorschlägt, besteht aus einem Dreischritt:

  • Gibt es eine offiziell unterstützte Alternative im JDK 8 für das entsprechende API, wird das API im JDK 9 gekapselt und ist damit nicht mehr von außerhalb zugänglich.
  • Gibt es keine solche Alternative im JDK 8, wird das kritische API im JDK 9 nicht gekapselt, sodass es weiterhin verfügbar bleibt.
  • Gibt es eine unterstützte Alternative im JDK 9, wird das kritische API als „deprecated“ markiert und im JDK 10 gekapselt oder gar entfernt.

Die kritischen internen APIs, die weiterhin im JDK 9 zugänglich bleiben sollen, sind im JEP 260 aufgeführt. Dort sind momentan folgende APIs gelistet:

  • misc.Cleaner
  • misc.{Signal,SignalHandler}
  • misc.Unsafe (The functionality of many of the methods in this class is now available via variable handles (JEP 193).)
  • reflect.Reflection::getCallerClass (The functionality of this method may be provided in a standard form via JEP 259.)
  • reflect.ReflectionFactory

Noch können Vorschläge unterbreitet werden, weitere APIs auf diese Liste zu setzen. Als Begründung dafür sollen Use Cases aus der Praxis sowie Einschätzungen der Auswirkungen auf Entwickler und Anwender abgegeben werden.

Pragmatischer Kompromiss

Erste Reaktionen auf diesen Vorschlag sind positiv. Protagonisten der Unsafe-Debatte wie Christoph Engelbert (Hazelcast) und Martijn Verburg (jClarity) zeigen sich erleichtert.

Verburg kommentiert:

+1 to this – it’s a really good compromise.

Engelbert kündigt an, für das sun.misc.Unsafe API in den nächsten Tagen weitere Use Cases zusammenzustellen, die die Liste der auch im JDK 9 verfügbaren APIs erweitern könnte. Ansonsten stimmt er der von Reinhold vorgegebenen Marschroute zu:

I really appreciate this step, it is the perfect way. Unsafe has to disappear but with a good migration path and I think this compromise will achieve exactly that.

Nichtsdestotrotz werden im JDK 9 die meisten der internen APIs im Rahmen des Projekt Jigsaw in Module gekapselt werden, sodass sie nicht mehr von außerhalb zugänglich sein werden. Wie Mark Reinhold ausführt, soll dadurch die Integrität der Plattform verbessert werden, da viele der internen APIs Sicherheits-kritische Operationen ermöglichen.

 This change will improve the integrity of the platform, since many of these internal APIs define privileged, security-sensitive operations. In the long run it will also reduce the costs borne by the maintainers of the JDK itself and by the maintainers of libraries and applications that, knowingly or not, make use of these non-standard, unstable, and unsupported internal APIs.

 Aufmacherbild: Birthday-anniversary cake with red candles showing Nr. 9 von Shutterstock.com / Urheberrecht: Fernando Sanchez Cortes

Verwandte Themen:

Geschrieben von
Hartmut Schlosser
Hartmut Schlosser
Content-Stratege, IT-Redakteur, Storyteller – als Online-Teamlead bei S&S Media ist Hartmut Schlosser immer auf der Suche nach der Geschichte hinter der News. #java #eclipse #devops #machinelearning #seo. Zum Lächeln bringen ihn kreative Aktionen, die den Leser bewegen. @hschlosser
Kommentare

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
4000
  Subscribe  
Benachrichtige mich zu: