Java feiert 25. Jubiläum

19.05.2020

Am 23. Mai 1995 wurde Java erstmals offiziell der Öffentlichkeit vorgestellt. Damit feiert die Programmiersprache diese Woche Samstag ihr 25. Jubiläum. Zeit für einen Rückblick.

Feierlichkeiten

Für den 25. Geburtstag von Java hat sich Nicolai Parlog, Java-Guru und Autor von The Java Module System, etwas ganz besonderes ausgedacht:

25 Hours of Java

Ein 25-stündiger Livestram, mit namhaften Gästen wie Brian Goetz (Java Language Architect), der IntelliJ-Evangelistin Trisha Gee u.v.m.. Das Event startet am 23. Mai 2020 um 8:00 Uhr deutscher Zeit, und endet am 24. Mai um 9:00 Uhr. Falls ihr noch nichts anderes vorhabt, schaut mal rein… (zumindest hier in Süddeutschland soll es ja regnen ;-)

Die Anfänge

Ursprünglich wurde Java von einem Team unter James Gosling für Sun Microsystems entwickelt. Am 25. Mai 1995 wurde Java erstmals der Öffentlichkeit vorgestellt. Damals war es noch eine Alpha-Version. Bis zur Veröffentlichung von Release 1.0 sollte es dann noch bis Januar 1996 dauern. Den Durchbruch schaffte Java mit der Integration in den Netscape Navigator. Mit der Zeit etablierte sich die Sprache jedoch auf dem Gebiet der Serveranwendungen für Unternehmen. Desktop-Anwendungen spielten stets eine untergeordnete Rolle, da zur Ausführung eine Runtime-Engine (JRE) nötig ist. Dieser Aspekt erschwert die Auslieferung der Anwendungen für die Entwicklerseite, sowie die Ausführung beim Anwender – sofern keine JRE mitgeliefert wird.

Besonderheiten von Java waren und sind der Garbage Collector, der den Entwicklern das Speichermanagement abnimmt, sowie das Versprechen „write once, run anywhere“. Das bedeutet, dass ein kompiliertes Java-Programm auf unterschiedlichen Plattformen wie Windows, Unix, Linux etc. läuft, wenn eine entsprechende JRE vorhanden ist. Das Maskottchen von Java ist der „Duke“ (siehe links).

Der Name rührt daher, dass die Indonesische Insel Java ein Anbaugebiet für Kaffee ist, weshalb Kaffee in den USA umgangssprachlich auch „Java“ genannt wird. Ein passender Name, da Kaffee unter Entwicklern ja ein recht beliebtes Getränk sein soll… ;-)

Java im Lauf der Zeit

In den ersten Versionen gab es keine großen Änderungen an der Sprache selbst. Jedoch wurde kontinuierlich „unter der Haube geschraubt“, beispielsweise mit Fokus auf Performance, bei der Java seit jeher einen – im übrigen ungerechtfertigt – nicht allzu guten Ruf genoss. Auch die Standardbibliothek wurde nach und nach erweitert und so immer umfangreicher.

Dann kam im September 2004 mit Java 5 das erste Release mit vielen neuen Features wie Generics, Autoboxing, Enums und Annotations, für das die Entwickler sich etliche neue Sprachkonstrukte aneignen mussten.

Lagen die Zyklen für Major-Releases bis dahin bei 1-2 Jahren, vergingen zwischen Java 6 (Dezember 2006) und Java 7, welches im Juli 2011 erschien, sage und schreibe 4 1/2 Jahre! Das lag womöglich mitunter daran, dass mit dem Release auch Lambdas und die Modularisierung („Jigsaw“) kommen sollten, welche dann auf Java 8 respektive Java 9 verschoben wurden. In der Zwischenzeit, nämlich im Jahr 2010, wurde Sun von Oracle aufgekauft, womit Java in den Besitz des Datenbankriesen gelangte.

Sowohl Java 8 (März 2014) als auch Java 9 (September 2017) erschienen mit erheblichen Verspätungen, begründet durch die zu den ursprünglich geplanten Erscheinungsteminen noch nicht fertig gestellten Hauptfeatures. Aus diesem Grund entschied man sich, mit Java 9 auch einen neuen Releasezyklus einzuführen. Seitdem erscheinen neue Java-Versionen zu festen Terminen im Halbjahresabstand. Enthalten sind alle Features, die bis zum Releasedatum fertig gestellt sind. So müssen Entwickler nun nicht mehr lange auf neue Sprachfeatures warten, nur weil ein großes Feature sich verspätet. Da der Releasezyklus nun zu kurz ist für Vorabversionen, in denen die Community neue Features testen und Feedback dazu geben kann, wurden zudem die „Preview Features“ eingeführt. Diese sind in den Major-Versionen enthalten, müssen aber extra per Kommandozeilenparameter hinzugeschaltet werden. Preview Features sind noch nicht für den produktiven Gebrauch gedacht, weil sie sich bis zu ihrer finalen Version noch ändern oder wieder entfernt werden können.

Java 10 (März 2018) ist bekannt für var, das in Methoden statt der Typdeklaration verwendet werden kann, um den Code kürzer und somit lesbarer zu machen.

Java 11 (September 2018) ist eine LTS-Version mit verlängertem Support. Bezeichnend für diese Version ist, dass erstmals eine größere Anzahl von Features aus Java entfernt wurden (z.B. JavaFX, CORBA und die JavaEE-Module). Die zuvor in Java 9 eingeführte Modularisierung ermöglichte dies. Bisher war man es gewohnt, dass die Java-Macher großen Wert auf Rückwärtskompatibilität gelegt, und so gut wie nichts aus der Sprache entfernt hatten; es wurde lediglich die eine oder andere Methode bzw. Klasse als deprecated markiert. Mit Java 11 kam aber auch Neues hinzu, z.B. die Möglichkeit, java-Dateien direkt auf der Kommandozeile auszuführen, ohne diese erst kompilieren zu müssen.

Mit Java 12 (März 2019) kam die Feature-Preview für switch-Expressions, in Java 13 (September 2019) eine leicht angepasste Version der switch-Expressions-Preview, sowie eine Preview für Text Blocks.

Java 14 (März 2020), die derzeit aktuelle Version, beinhaltet u.a. die switch-Expressions im Standardumfang sowie Previews für Pattern matching für instanceof und aussagekräftigere NullPointerExceptions.

Die Sache mit der Lizenz

Auch hinsichtlich der Lizenzierung änderte sich so Einiges. Das Oracle JDK darf seit 2019 nicht mehr kostenlos für kommerzielle Zwecke in Produktionsumgebungen verwendet werden. Für das Oracle OpenJDK gilt das nicht, jedoch erscheinen Versionen mit Bug- und Securityfixes nur für die jeweils neuste Major-Version. Will man die jeweils aktuellen Fixes haben, ist man also gezwungen, entweder dafür zu bezahlen, oder halbjährlich auf ein neues Release zu migrieren. Dieser Umstand löste erhebliche Unsicherheiten in den Reihen der Java-Anwender aus. Doch die Community sprang ein, so dass in der Zwischenzeit einige kostenfreie Alternativen entstanden, wie z.B. AdoptOpenJDK, Amazon Corretto, oder das Redhat OpenJDK für CentOS.

Ausblick

So schnell dürfte mit Java noch nicht Schluss sein. Das riesige Ökosystem an Bibliotheken, Tools und Applikationsserver ist eine der größten Stärken der Sprache, die sich nach wie vor großer Beliebtheit erfreut. Und trotz einiger Kompromisse zugunsten der Abwärtskompatibilität haben die Macher von Java gezeigt, dass sie in der Lage sind, die Sprache an die Anforderungen moderner Softwareentwicklung anzupassen. So wurde beispielsweise die Flow-API als Grundlage für reaktive Anwendungen in Java 9 aufgenommen. Projekt Valhalla verspricht Value Objects und Generics für primitive Datentypen.  Mit GraalVM ist wird eine VM für polyglotte Anwendungen entwickelt, die zudem das Bauen nativer Images für die Ausführung in Container- bzw. Cloudumgebungen unterstützt. Und Project Loom soll leichtgewichtige „Virtual Threads“ (früher auch als „Fibers“ gehandelt) bringen.

Ich bin gespannt, wohin uns die Reise mit Java in den nächsten 25 Jahren noch so führt… ;-)

Zurück zur Übersicht

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*Pflichtfelder

*