1.4 Weiterentwicklung und Verluste
1.4.1 Die Entwicklung von Java und seine Zukunftsaussichten
Vor 20 Jahren sprachen zwei große Pluspunkte für Java: die Einfachheit im Vergleich zum Vorgänger C++ und das Fehlen von »gefährlichen« syntaktischen Konstrukten. So schrieb einer der Sprachväter, James Gosling (der nach der Übernahme von Sun durch Oracle das Unternehmen verließ), schon 1997:
»Java ist eine Arbeitssprache. Sie ist nicht das Produkt einer Doktorarbeit, sondern eine Sprache für einen Job. Java fühlt sich für viele Programmierer sehr vertraut an, denn ich tendiere stark dazu, Dinge zu bevorzugen, die schon oft verwendet wurden, statt Dingen, die eher wie eine gute Idee klangen.«[ 32 ](Im Original: »Java is a blue collar language. It’s not PhD thesis material but a language for a job. Java feels very familiar to many different programmers because I had a very strong tendency to prefer things that had been used a lot over things that just sounded like a good idea.« (https://www.win.tue.nl/~evink/education/avp/pdf/feel-of-java.pdf) )
Der Wunsch nach einer einfachen Sprache besteht bis heute, allerdings ist in den letzten 20 Jahren viel passiert und Java deutlich komplexer geworden. Bedeutende Sprachänderungen gab es in Java 5 (also etwa zehn Jahre nach der Einführung von Java) und in Java 8. Das Modulsystem in Java 9 bringt ebenfalls neue Herausforderungen.
Bei der Dreifaltigkeit der Java-Plattform – 1. Java als Programmiersprache, 2. den Standardbibliotheken und 3. der JVM als Laufzeitumgebung – lässt sich erkennen, dass es große Bewegung bei den unterschiedlichen Programmiersprachen auf der Java-Laufzeitumgebung gibt. Es zeichnet sich ab, dass Java-Entwickler weiterhin in Java entwickeln werden, aber eine zweite Programmiersprache auf der JVM zusätzlich nutzen. Das kann JavaScript, Groovy, Kotlin, Scala, Jython, JRuby oder eine andere JVM-Sprache sein. Dadurch, dass die alternativen Programmiersprachen auf der JVM aufsetzen, können sie alle Java-Bibliotheken nutzen und daher Java als Programmiersprache in einigen Bereichen ablösen. Dass die alternativen Sprachen auf die üblichen Standardbibliotheken zurückgreifen, funktioniert reibungslos, allerdings ist der umgekehrte Weg, dass etwa Scala-Bibliotheken aus Jython heraus genutzt werden, (noch) nicht standardisiert. Bei der .NET-Plattform klappt das besser, und hier ist es wirklich egal, ob man C#- oder VB.NET-Klassen deklariert oder nutzt.
Als die Übernahme von Sun vor der Tür stand, zeigte Oracle sich sehr engagiert gegenüber den Sun-Technologien. Nach der Übernahme 2010 wandelte sich das Bild etwas, und Oracle sorgte eher für negative Schlagzeilen, etwa als es die Unterstützung für OpenSolaris einstellte, MySQL zurückfuhr und als Gefahr für die eigene Datenbank betrachtete und als es OpenOffice erst spät an Apache übergab (als sich LibreOffice schon verselbstständigt hatte). Auch was die Informationspolitik und Unterstützung von Usergroups angeht, verhält sich Oracle ganz anders als Sun. Durch die Klage gegen Google wegen Urheberrechtsverletzungen in Android machte sich Oracle auch keine Freunde. Android gilt als Beweis, dass Java auf dem Client tatsächlich erfolgreich ist. Als Sicherheitslücken in Java entdeckt wurden, machte das Unternehmen ebenfalls keine gute Figur. Insgesamt dürfte auf einer Bewertung folgende Einschätzung zu finden sein: »Oracle hat sich bemüht, den Anforderungen gerecht zu werden.«
Fast 10 Jahre nach der Übernahme gibt es neue radikale Änderungen. Erstmals entfernte Oracle Teile der Java SE-Bibliothek, wie CORBA-Unterstützung, JAXB, JAX-RS (Webservices), Applets, Java Web Start und JavaFX, auch die JavaScript-Engine ist mittlerweile verschwunden. Damit ist die bisher heilige Abwärtskompatibilität aufgegeben – Java 14 kann nicht in jedem Fall ältere Java-Software ausführen.
Ein weiter Schock ist die Kommerzialisierung. Oracle bringt mit dem Oracle JDK alle halbe Jahre ein neues Release heraus, das jedoch nur für »development, testing, prototyping or demonstrating purposes« genutzt werden darf, also nicht mehr kommerziell; für eine kommerzielle Nutzung fallen Gebühren an.[ 33 ](http://www.oracle.com/technetwork/java/eol-135779.html) Da das Oracle JDK allerdings nur eine Java SE-Implementierung von vielen ist, gibt es Alternativen, wie das OpenJDK.
1.4.2 Features, Enhancements (Erweiterungen) und ein JSR
Java wächst von Version zu Version, sodass es regelmäßig größere Zuwächse bei den Bibliotheken gibt sowie wohlproportionierte Änderungen an der Sprache und minimale Änderungen an der JVM. Änderungen an der Java SE-Plattform werden in Features und Enhancements kategorisiert. Ein Enhancement ist dabei eine kleine Änderung, die nicht der Rede wert ist – etwa dass eine kleine Funktion wie isEmpty() bei der Klasse String hinzukommt. Diese Erweiterungen bedürfen keiner großen Abstimmung und Planung und werden von Oracle-Mitarbeitern einfach integriert.
Features dagegen sind in Bezug auf den Aufwand der Implementierung schon etwas Größeres. Oder aber die Community erwartet diese Funktionalität dringend – das macht sie deutlich, indem sie einen Feature-Request auf Oracles Website platziert und viele für dieses Feature stimmen. Eine weitere Besonderheit ist, wie viele dieser Features geplant werden, denn oftmals entsteht ein JSR (Java Specification Request), der eine bestimmte Reihenfolge bei der Planung vorschreibt. Die meisten Änderungen an den Bibliotheken beschreibt ein JSR, und es gibt mittlerweile Hunderte von JSRs, wie die Seite https://jcp.org/en/jsr/overview zeigt.
In der Anfangszeit war die Implementierung gleichzeitig die Spezifikation, aber mittlerweile gibt es für einen Java-Compiler, die JVM und diverse Bibliotheken eine beschreibende Spezifikation. Das gilt auch für Java als Gesamtes. Java SE ist eine Spezifikation, die zum Beispiel das Oracle JDK und OpenJDK realisiert – frühere Alternativen wie Apache Harmony[ 34 ](http://harmony.apache.org. Seit Ende 2011 »retired«, also »in Pension« und somit tot. ) oder GNU Classpath[ 35 ](http://www.gnu.org/s/classpath. Seit Anfang 2009 keine neue Version mehr. Da das OpenJDK wie auch GNU Classpath unter der GPL-Lizenz steht, gibt es keine Notwendigkeit mehr für eine weitere Java SE-Implementierung unter der GPL. ) sind beendet. Das Oracle JDK (kurz JDK) basiert auf dem OpenJDK, und das OpenJDK steht unter der GPL-Lizenz. Das OpenJDK für Windows und Linux ist die Referenzimplementierung und definiert somit den Standard. (Das ist dann wichtig, wenn eben gewisse Eigenschaften doch nicht dokumentiert sind.) Die Java SE 14 Platform wird im JSR 389 beschrieben[ 36 ](https://www.jcp.org/en/jsr/detail?id=389).
1.4.3 Applets
Es ist nicht untertrieben, dem Web eine Schlüsselposition bei der Verbreitung von Java zuzuschreiben. Populär wurde Java Mitte der 1990er-Jahre durch Applets – Java-Programme, die ein Browser ausführt. Eine HTML-Datei referenzierte das Applet, es bekam auf der Webseite einen Platz zugewiesen, und der Browser holte sich eigenständig die Klassendateien und Ressourcen über das Netz und führte sie in der JVM aus.
Im Laufe der Zeit ging die Bedeutung der Java-Applets immer weiter zurück, und das lag an der Sprache, die ebenfalls 1995 erschien: JavaScript. Java-Applets brachten erstmals Dynamik und bewegte Grafik in die bis dahin statischen Webseiten, doch als dann die Webstandards CSS (1996) und SVG auftauchten (2001), setzten immer mehr Webentwickler auf eine Kombination von JavaScript mit diesen Standards. Denn Java-Applets haben, genauso wie Flash oder Silverlight, alle ein Problem: Sie benötigen ein Browser-Plugin. Das macht sie unattraktiv für Unternehmen, da im Internet kein Kunde ausgeschlossen werden soll. Früher, als die Webstandards noch nicht so weit entwickelt waren, brachten Flash und Silverlight Dynamik auf die Webseite, doch heute sind aufwendige Webanwendungen mit JavaScript und HTML5/CSS3 realisierbar. Auch Microsoft stoppte bei Silverlight 5 die Entwicklung und bevorzugt nun Lösungen auf der Basis von JavaScript + HTML5 + CSS3, insbesondere für mobile Endgeräte, da den Redmondern klar ist, dass es nie Silverlight auf dem iPhone oder Android geben wird.[ 37 ](Mit https://xamarin.com/platform gibt es interessante Ansätze. ) Adobe selbst beginnt mit Konvertern von Flash nach HTML5/CSS3/JavaScript und zeigt damit auch die Zukunft auf.
Es ist lange her, dass die frühen Browser Netscape und Internet Explorer eine JVM integrierten – irgendwann haben die Hersteller die Java-Laufzeitumgebung entfernt. Eine Zeit lang lieferte Oracle das Java Plug-in (in dieser Schreibweise) aus, um die eigene JVM in den Browser zu integrieren. Moderne Browser unterstützen das Java Plug-in jedoch nicht mehr. Wegen fehlender Unterstützung in den Browsern – und den guten Webstandards – markierte Oracle in Java 9 Applets als veraltet und entfernte sie komplett in Java 10. Java Web Start war eine Alternative ähnlich den Applets, mit der sich Programme aus dem Internet laden ließen, allerdings ist auch Java Web Start ab Java 11 nicht mehr integriert.
1.4.4 JavaFX
Rich Internet Applications (RIA) sind grafisch anspruchsvolle Webanwendungen, die in der Regel Daten aus dem Internet beziehen. Viele Jahre beherrschte Adobe Flash hier fast zu 100 % das Feld, und Microsoft spielte mit Silverlight zeitweilig mit. Auch Oracle wollte aus strategischen Gründen das Feld nicht den Mitbewerbern überlassen. Als sich abzeichnete, dass Applets zu unflexibel für komplexe GUI-Anwendungen und unbeliebt sind, veröffentlichte Oracle nach längerer interner Projektphase Ende 2008 die JavaFX-Plattform. JavaFX ist ein ganz neuer GUI-Stack und komplett von Swing und AWT entkoppelt.
In der ersten JavaFX-Version gehörte die Programmiersprache JavaFX Script mit dazu, doch ab Version JavaFX 2 hat Oracle die Richtung geändert: JavaFX ist nun eine pure Java-Bibliothek, und die eigenwillige Programmiersprache JavaFX Script ist Vergangenheit. Mit Skriptsprachen auf der Java-VM ist jedoch ein vergleichbares »Feeling« gewährleistet.
Eine Zeit lang sah es so aus, als ob JavaFX den GUI-Stack AWT/Swing beerben könnte. Swing ist eine GUI-Bibliothek, die schon seit Java 1.2 (1998) zum Standard gehört, doch seit 10 Jahren keine nennenswerten Features mehr bekommen hat, es werden aber regelmäßig Bugs gefixt. Doch nach dem anfänglichen Hype um JavaFX hat Oracle viele Entwickler abgezogen und JavaFX auf das Abstellgleis geschoben. Für Oracle spielen Desktop-Technologien keine Rolle mehr, weshalb sich Oracle 2018 ganz von JavaFX verabschiedet hat: Ab Java 11 ist JavaFX nicht mehr integriert. Oracle hat JavaFX in das Projekt OpenJFX (https://wiki.openjdk.java.net/display/OpenJFX/Main) überführt, wo es als Open-Source-Projekt weiterentwickelt wird – ein Mirror ist https://github.com/teamfx. Für JavaFX-Fans ist das eher ein Vorteil als ein Nachteil, denn eine Entkopplung ermöglicht eine flexiblere Weiterentwicklung; OpenJFX ist dann ein Modul wie jedes andere auch.