Über dem Java-Himmel hängen momentan finstere Wolken; manche prognostizieren gar den baldigen Untergang der Sprache in der Bedeutungslosigkeit, andere Analysten wie beispielsweise RedMonk zeichnen ein deutlich optimistischeres Bild. Da ich momentan beruflich in der Java-Welt tätig bin, mache ich mir natürlich auch meine Gedanken - und letzterer Artikel hat mich dazu gebracht, selbigste hier aufzuschreiben.
Kurz zum Hintergrund: Spätestens seit dem Kauf von Sun durch Oracle stehen die Zeichen auf Sturm. Oracle hat sich meiner Meinung nach wie ein Elefant im Porzellanladen der Community benommen; das gilt sowohl für Java-Projekte (wie gerade jüngst beim Verwürfnis Hudson vs. Jenkins), aber auch für nicht-Java-Programme wie OpenOffice vs. LibreOffice. Auch die Entwicklung der Sprache selbst ist - gelinde gesagt - im Umbruch: Mit der Übernahme von Sun verließen einige Koryphäen wie Java-Erfinder James Gosling ihren neuen Chef, und im Dezember kehrte die Apache-Foundation dem Java Community Process (JCP) den Rücken - aus Protest gegen Oracles Herrschaft nach Gutsherrenart. Gerade über letzteres schlugen die Wellen hoch, und manche Analysten sehen hiermit den JCP endgültig am Ende.
Die Kritik am JCP - dem Gremium, welches die Sprache und ihre Bibliotheken spezifiziert - ist aber nicht neu: Seit langem wird eine fehlende wirkliche Community-Integration und ein sehr träges Vorwärtskommen kritisiert: Blickt man auf die Spezifikation von Java 7 und Java 8, so darf man auf lang gewünschte Features wie Closures noch bis (mindestens) Ende 2012 warten - Features, die in vielen anderen Sprachen seit langem Standard sind. Hier wurde Java in vielen Punkten von anderen Sprachen wie C# (oder gar PHP!) rechts überholt.
Wie geht es nun mit Java weiter? Ich teile die Meinung von RedMonk, daß Java sicherlich nicht von heute auf morgen verschwinden wird - zu viele große Player sitzen fest im Java-Sattel. IBM hat sich mit Oracle bereits strategisch arrangiert; was aus dem juristischen Geplänkel zwischen Oracle und Google wird, bleibt abzuwarten. Jedenfalls ist Googles Android eine ebenfalls nicht zu vernachlässigende Größe für den Grad der Bedeutung der Sprache Java.
Was ich jedoch nicht glaube ist, daß es sang- und klanglos weitergeht wie bisher - auch wenn die Grafiken der Analyse von RedMonk dies vermuten lassen könnten, spiegeln diese Zahlen doch nur den Zustand vor dem Apache-JCP-Beben wieder. Außerdem argumentiert RedMonk selbst, daß es einen dramatischen Unterschied zwischen dem, was eine Firma an Technologien tatsächlich einsetzt und dem, was die IT-Entscheider denken, was sich im Einsatz befindet - und die Stellenanzeigen, welche RedMonk in ihrer Statistik anführt, werden typischerweise auf Initiative der Entscheider, und nicht der Techniker hin geschrieben.
Meiner Meinung nach muß man zwei Dinge voneinander getrennt betrachten: Zum einen die Sprache Java selbst, zum anderen die Java Virtual Machine (JVM). Der Sprache Java merkt man ihr Alter von 15 Jahren und das träge Vorankommen des JCP deutlich an. Um diesem Defizit zu begegnen, entwickeln sich aber schon seit einigen Jahren alternative Sprachen (bzw. Compiler), welche ebenfalls Bytecode für die JVM erzeugen: Als Beispiel seien hier Scala, Groovy und Clojure sowie die JVM-Adaptionen Jython (Python), JRuby (Ruby) und Erjang (Erlang) genannt. Der Vorteil solcher Sprachen: Sie alle können auf den (extrem reichhaltigen) Fundus an Java-Bibliotheken zurückgreifen und sind somit "abwärtskompatibel"; in vielen Fällen ist sogar ein weitgehender Austausch von Klassen und Objekten untereinander möglich (beispielsweise kann man in Groovy nicht nur auf Java-Bibliotheken zugreifen, sondern auch umgekehrt in Java-Code Groovy-Klassen verwenden, als wären diese in Java geschrieben). Diese Kompatibilität macht auch ihren Einsatz "unter dem Radar" der oberen Entscheider einfach.
Es herrscht also eine polyglotte Vielfalt an modernen Sprachen auf der JVM. Egal, ob der Ursprung dieser Sprachen reine Experimentierfreude oder die Unzufriedenheit mit der Sprache Java an sich war - das langsamere Vorankommen und die Unsicherheiten, die durch Oracles Verhalten entstanden sind, geben ihnen weiter Rückenwind. Damit hat die Sprache Java neben der Konkurrenz durch alternative Sprachen wie C# auch deutliche "in-house"-Konkurrenz.
Ich nehme deshalb an, daß die Bedeutung von alternativen Sprachen auf der JVM weiter deutlich zunehmen wird; es dürfte für Java schwierig werden, den im Laufe der letzten Jahre verlorenen Boden wieder gutzumachen. Die JVM als grundlegende Runtime hingegen dürfte Bestand haben; nicht zuletzt die Abstimmung zwischen Oracle und IBM (welche einen der bekanntesten Just-in-Time-Compiler für die JVM entwickelt) dürfte hier eine solide Basis bilden.
Zu guter Letzt noch ein wenig Kaffeesatzlesen und heftiges Mutmaßen (ich bin kein Java-Bytecode-Experte, deswegen ist dies hier nur Bauchgefühl): Auch für den Fall, daß es zu irgendwelchen Patentklagen von Oracle gegen ein Opensource-JVM-Projekt käme, gäbe es Auswege: Die JVM ist schließlich nicht die einzige existente virtuelle Maschine. Die entsprechenden Compiler müßten "nur" anderen Bytecode generieren - was natürlich Entwicklungsaufwand wäre, aber durchaus im Bereich des Möglichen liegen dürfte. Daß man auch andere virtuelle Maschinen einsetzen kann, beweist beispielsweise Googles Android mit der Dalvik Engine.
Mein persönliches Fazit: Die Java-Welt wird sicher nicht schlagartig obsolet oder zum "Pflegefall" wie manche Cobol-Anwendungen aus der IT-Steinzeit. Die Sprache Java hat aber starke, abwärtskompatible Konkurrenz - ich halte die Chance für relativ hoch, daß die Sprache in den nächsten Jahren an Stellenwert verliert und vom Platzhirsch zum "Par Inter Pares" oder gar zur Legacy-Sprache absteigt. Wer heute neu in die Java-Welt einsteigt, muß auch ein Augenmerk auf Newcomer wie Groovy oder Scala legen.