Programmiersprache mit Potenzial

Kotlin – oder doch lieber Java?

| Autor / Redakteur: Filipe Martins & Anna Kobylinska / Stephan Augsten

Wer macht bei den Entwicklern das Rennen, Kotlin oder Java?
Wer macht bei den Entwicklern das Rennen, Kotlin oder Java? (Bild gemeinfrei: Fotis Fotopoulos / Unsplash)

Statisch typisiert, Cloud-nativ, JVM-kompatibel: Die Softwareschmiede JetBrains möchte mit Kotlin das bessere Java erfunden haben. Tatsächlich ist Kotlin die am schnellsten wachsende Programmiersprache und (laut einer Umfrage von RedMonk) eine der 20 beliebtesten überhaupt.

Für viele Entwickler ist Kotlin binnen kürzester Zeit zu einer der bevorzugten Sprache aufgestiegen, auch weil Google ihr wohlgesonnen ist: Der kalifornische Suchriese sieht in Kotlin eine Möglichkeit, das Android-Ökosystem von Oracles Einflüssen zu befreien.

Bereits seit nahezu einem Jahrzehnt tobt zwischen den beiden Rivalen Google und Oracle ein erbitterter Gerichtskrieg um die lizenzfreie Nutzung von Java-APIs in Android. Aus Sicht Oracles soll sich Google in Android OS an den Urheberrechten von Java SE vergriffen haben. Google erachtet Java APIs als nicht urheberrechtlich schutzwürdig und Oracles Klage als gegenstandslos, da man die jenen APIs zugrundeliegenden Methoden patentneutral repliziert habe.

Mitte November hat das oberste Gericht der Vereinigten Staaten zugestimmt, der Klage endlich Gehör zu schenken. Die Anhörung soll bereits im März 2020 stattfinden. Ein Urteil zugunsten von Oracle könnte das Fundament manchen Softwareimperiums erschüttern. Machte Google das Rennen, würde dies allgemein als ein Sieg von Open Source gewertet. Bis dahin erstarrt die Softwarebranche in gebannter Erwartungshaltung.

Die Zeit bleibt aber natürlich nicht stehen. Google und JetBrains tüfteln schon länger gemeinsam unter der Schirmherrschaft der Kotlin Foundation (kotlinlang.org) an der Java-Alternative. Im Mai dieses Jahres (2019) stieg Kotlin sogar ganz offiziell zur bevorzugten Android-Sprache auf.

Googles IDE, Android Studio, baut ja ebenfalls auf JetBrains-Code auf, es bleibt also alles in der Familie. Auch JetBrains eigene IDE AppCode basiert auf dem IntelliJ IDEA-Unterbau; dank der Parallelen zu Android Studio soll AppCode plattformübergreifende Entwicklerproduktivität fördern. AppCode ist zu 100 Prozent interoperabel mit Xcode, benötigt jedoch Apples IDE u.a. für die Gestaltung des GUI. Es wird ernst.

Oracle JDK vs OpenJDK

Java gilt seit jeher als die Sprache der Wahl für seriöse Software der Enterprise-Klasse. Doch mit der explodierenden Popularität mobiler Apps und skalierbarer Microservices steigen vor allem die Anforderungen an das Entwicklungstempo. Für viele kleinere und mittlere Projekte bedeutet Java einfach zu viel des Guten. Die Lernkurve ist steil, Shortcuts gibt es keine.

Dies ist auch bei Oracle angekommen, ab der Version 11 nimmt der Anbieter den Enterprise-Markt verstärkt ins Visier und gibt das Tempo im Sechsmonatsrhythmus vor. Das JDK ist nur noch Entwicklungshäusern mit einem bezahlten Support-Vertrag vorbehalten. Die übrige Gemeinde muss sich mit der quelloffenen Edition der Java-Laufzeitumgebung, OpenJDK, und dem Community-Support zufriedengeben – oder eben auf Kotlin umstellen.

Bisher standen der völligen Ebenbürtigkeit von Oracle JDK und OpenJDK vor allem lizenzrechtliche Gründe im Wege. Offenbar will Oracle die Unterschiede zwischen den beiden Implementierungen ausmerzen. Der konsequente Verzicht auf Abhängigkeiten des Oracle JDK von proprietären Implementierungen und Tools kommt diesem Ziel jedenfalls näher. So hat beispielsweise der quelloffene Pisces-Fork Marlin als Standard-Rasterizer sowohl seinen direkten Vorläufer als auch den proprietären Ductus-Rasterizer ab der Version 9 des JDKs abgelöst.

Die Angleichung von Oracle JDK an OpenJDK erlaubt es der Java-Schmiede, aus dem Gedankengut der Open-Source-Gemeinde nach Lust und Laune zu schöpfen und gleichzeitig den kostenfreien Support an Freiwillige „auszulagern“. Ersteres scheint nötig zu sein, seit sich der Geistesvater der Sprache, James Gosling, von Oracle abgeseilt hatte. Aktuell arbeitet er für den Oracle-Rivalen AWS.

Wer eine langzeitstabile Plattform nutzen wollte, konnte sich in der Vergangenheit auf kostenfreie LTS-Releases von Oracle verlassen. Laut der Oracle Java-Roadmap ist JDK 11 zurzeit die einzige LTS-Version und diese ist nun kostenpflichtig. Sie gewährleistet bezahlten Premier-Support bis September 2023 (und Extended Support bis September 2026). Der Zeitraum ist an sich nicht schlecht. Enterprise-Entwickler bekommen so etwas Luft zum Atmen.

Kleinere Softwareschmieden haben sich schon lange neu arrangieren müssen. Viele setzen eben auf Kotlin. Während sich Java-Entwickler seit dem JDK 11 auf regelmäßige und manchmal umwälzende Änderungen einstellen müssen, bringt Kotlin das Versprechen einer langfristig stabilen Roadmap bei überschaubaren Kosten mit sich. Für kleinere Entwicklungsschmieden ist die Kombination von unschätzbarem Wert.

Auf rauer See: Marinestützpunkt Kotlin

Kotlin unterstützt sowohl objektorientierte als auch funktionale Programmierung und bringt so diese beiden Welten an einen Tisch. Dank der vollständigen Interoperabilität mit Java lassen sich beide Sprachen in einem gemeinsamen Projekt miteinander kombinieren. So sind Java-Frameworks in Kotlin nutzbar und umgekehrt.

Kotlin kompiliert sich wahlweise zu JavaScript, Bytecode für Oracles JVM oder neuerdings Native. Kotlin/Native unterstützt iOS (arm32, arm64, simulator x86_64), MacOS (x86_64), Android (arm32, arm64), Windows (mingw x86_64, x86), Linux (x86_64, arm32, MIPS, MIPS little endian, Raspberry Pi) und nicht zuletzt WebAssembly.

Diese willkommene Flexibilität bietet Entwicklern eine hohe „Investitionssicherheit“ für den Zeitaufwand. Für bestehende Java-Entwickler hält letzterer sich übrigens in Grenzen. Mit dem Java-to-Kotlin-Converter lässt sich Java-Code für die Android-Plattform in Kotlin-Code umwandeln.

Satte 92 Prozent der aktiven Kotlin-Entwickler hätten zuvor ja auch in Java gecodet, enthüllte JetBrains auf der Basis der Umfrage „State of Kotlin 2019“. Offenbar ist die Umstellung für viele Devs eine Einbahnstraße. Nur noch 86% aktiver Kotlin-Entwickler schreiben weiterhin in Java, gut sechs Prozent der ehemaligen Java-Entwickler sollen Oracles Sprache bereits endgültig den Rücken gekehrt haben.

Aber was ist denn nun so spannend an Kotlin, was Java nicht bieten kann? Eine gute Frage. Kotlin besticht gegenüber Java mit einer Vielzahl dringend benötigter Features. Dazu zählen:

  • null-Absicherung zum Schutz vor NPEs (NullPointer-Exceptions)
  • Funktionen höherer Ordnung und leistungsstarke Lambdas
  • direkte View-Bindung anhand der XML-Identifikatoren
  • Koroutinen
  • Typ-Aliasnamen
  • Destrukturierung von Deklarationen
  • Unterstützung durch Android Studio, IntelliJ IDEA, Eclipse (mit dem Kotlin Plugin für Eclipse), Atom (mit dem Kotlin Plugin für Atom), Sublime Text (mit dem Kotlin Plugin for Sublime TEXT) u.a.
  • Unterstützung für Multiplattformprojekte
  • Smartcasts und viele andere

Kotlin ist im Übrigen nach einer russischen Insel benannt, die sich strategisch im östlichen Teil des Golfs von Finnland am Meereseingang nach St. Petersburg befindet. Der Namensvetter der Java-Alternative beheimatet zivile Einrichtungen für den Hochwasserschutz der Metropole St. Petersburg und einen strategischen Marinestützpunkt namens Kronstadt.

Die Analogie soll die Bedeutung von robustem Programmiercode als einen konzeptionellen Grundstein von Software verdeutlichen. Getreu den historischen Wurzeln ihres Namens legt die Sprache Kotlin einen gesteigerten Wert auf die Robustheit von Code.

Zu den Highlights von Kotlin zählt unter anderem die null-Absicherung durch nullbare und nicht-nullbare Referenztypen. Kotlins Typisierung zielt darauf ab, die Gefahr von Nullreferenzen, einer der häufigsten Fallstricke vieler Programmiersprachen, mit einem Feature namens null safety zu neutralisieren.

Sechs von zehn Kotlin-Entwicklern (62 Prozent) nutzen die Java-Alternative in ihren mobilen Apps, während die übrigen vier von zehn (genau 41 Prozent) an Back-End-Projekten für das Web tüfteln. Kotlin 1.4 soll im kommenden Jahr wesentliche Performance-Verbesserungen und eine neue Compiler-Implementierung mit einer API für Erweiterungen mitbringen.

Ein „Swift für Android“?

Mobile Entwickler müssen bisher schweren Herzens das bewährte DRY-Prinzip (kurz für „Don’t Repeat Yourself“) ignorieren. Sollte eine mobile App auf mehr als einer Plattform laufen, müssen die betroffenen Entwickler Teile der Logik mehrfach implementieren.

Mit Kotlin Multiplatform (KMP) bastelt die Kotlin Foundation an einem Feature, mit dem die nativen UIs jeder unterstützten Zielplattform gemeinsamen Code aufrufen können. KMP ist ein logischer Schritt auf dem Weg hin zur höheren Portabilität des App-Code zwischen iOS und Android OS. Ob Apple da unbedingt mitspielt, steht auf einem anderen Blatt.

Für die Unterstützung von Cross-Plattform-Tools kann sich Apple traditionell bekannterweise nicht erwärmen. Die Gewährleistung von Kompatibilität steht in Cupertino offenbar nicht auf der Prioritätenliste. Das Unternehmen hatte kürzlich sogar die eigene Entwicklergemeinde aus Teilen der Funktionalität von Xcode in der Version 11.2 ausgeschlossen. Wer seine IDE auf jene Version voreilig aktualisierte und danach seine Anwendungen über den App Store bereitstellen wollte, war gezwungen, die Veröffentlichung der finalen Version 11.2.1 von Xcode (Build 11B53) abzuwarten.

In puncto Kompatibilität ist mit Apple auch langfristig nicht gut Kirschen essen. Mit dem Projekt Kalamata hat sich Cupertino zum Ziel gesetzt, Intels CISC-Chiparchitektur den Rücken zu kehren. Alle Systeme, von der Apple Watch über das iPhone, iPad, Apple TV bis hin zu Laptops und der Mac Pro-Familie sollen in Zukunft Apple-eigene ARM-Chips in RISC-Architektur nutzen. iOS-Entwickler müssen sich warm anziehen, auf sie kommen wieder „interessante“ Zeiten zu.

Ob Kotlin mit Apples halsbrecherischem Innovationstempo langfristig Schritt halten kann, wird sich erst noch zeigen. Kotlin 1.4 soll jedenfalls ein neues multiplattformfähiges Library-Format namens KLib (kurz für Kotlin Library) mitbringen. Das Format hatte sich bereits in Kotlin/Native bewährt (Kotlin/Native ist das LLVM-Backend zum Übersetzen von Kotlin-Code in plattformnative Binaries, die eine VM nicht voraussetzen).

Fazit

Eine neue Programmiersprache einfach mal eben aus dem Boden zu stampfen ist keine leichte Aufgabe. Der IDE-Schmiede JetBrains gelang es mit Googles offizieller Rückendeckung. Kotlin eröffnet Android-Entwicklern eine neue Welt an Möglichkeiten: weniger Code, mehr Resultate.

Die vollständige Interoperabilität mit Java erleichtert die Integration und erzwingt nicht den Verzicht auf bewährte Java-Bibliotheken. Dieses klassische Erfolgsrezept, gepaart mit der Simplizität von Kotlin, scheint sich zu bewähren. Das Java-Ökosystem bleibt im Enterprise-Bereich Oracles vorerst weiterhin unangefochtene Spielwiese. Doch das Wachstum dürfte sich fortan vorrangig in Kotlin abspielen.

Kommentare werden geladen....

Kommentar zu diesem Artikel

Der Kommentar wird durch einen Redakteur geprüft und in Kürze freigeschaltet.

Anonym mitdiskutieren oder einloggen Anmelden

Avatar
Zur Wahrung unserer Interessen speichern wir zusätzlich zu den o.g. Informationen die IP-Adresse. Dies dient ausschließlich dem Zweck, dass Sie als Urheber des Kommentars identifiziert werden können. Rechtliche Grundlage ist die Wahrung berechtigter Interessen gem. Art 6 Abs 1 lit. f) DSGVO.
  1. Avatar
    Avatar
    Bearbeitet von am
    Bearbeitet von am
    1. Avatar
      Avatar
      Bearbeitet von am
      Bearbeitet von am

Kommentare werden geladen....

Kommentar melden

Melden Sie diesen Kommentar, wenn dieser nicht den Richtlinien entspricht.

Kommentar Freigeben

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

Freigabe entfernen

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

copyright

Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Kontaktieren Sie uns über: support.vogel.de/ (ID: 46287898 / Programmiersprachen)