Verschillen tussen Oracle JDK en OpenJDK

1. Inleiding

In dit artikel zullen we de verschillen tussen Oracle Java Development Kit en OpenJDK onderzoeken. We bekijken ze eerst even en maken dan een vergelijking. Daarna zien we een lijst met andere JDK-implementaties.

2. Oracle JDK en Java SE-geschiedenis

JDK (Java Development Kit) is een softwareontwikkelingsomgeving die wordt gebruikt bij het programmeren van Java-platforms. Het bevat een complete Java Runtime Environment, een zogenaamde private runtime. De naam kwam van het feit dat het meer tools bevat dan de stand-alone JRE, evenals de andere componenten die nodig zijn voor het ontwikkelen van Java-applicaties.

Oracle raadt ten zeerste aan om de term JDK te gebruiken om te verwijzen naar de Java SE (Standard Edition) Development Kit (er zijn ook Enterprise Edition- en Micro Edition-platforms).

Laten we eens kijken naar de geschiedenis van Java SE:

  • JDK Beta - 1995
  • JDK 1.0 - januari 1996
  • JDK 1.1 - februari 1997
  • J2SE 1.2 - december 1998
  • J2SE 1.3 - mei 2000
  • J2SE 1.4 - februari 2002
  • J2SE 5.0 - september 2004
  • Java SE 6 - december 2006
  • Java SE 7 - juli 2011
  • Java SE 8 (LTS) - maart 2014
  • Java SE 9 - september 2017
  • Java SE 10 (18.3) - maart 2018
  • Java SE 11 (18.9 LTS) - september 2018
  • Java SE 12 (19.3) - maart 2019

Let op: de cursief gedrukte versies worden niet langer ondersteund.

We kunnen zien dat de belangrijkste releases van Java SE ongeveer om de twee jaar kwamen tot Java SE 7. Het duurde vijf jaar om van Java SE 6 over te stappen en daarna nog eens drie om Java SE 8 te bereiken.

Sinds Java SE 10 kunnen we elk half jaar nieuwe releases verwachten. Niet alle releases zijn echter LTS-releases (Long-Term-Support). Als resultaat van het releaseplan van Oracle zullen de LTS-productreleases slechts om de drie jaar plaatsvinden.

Java SE 11 is de nieuwste LTS-versie en Java SE 8 ontvangt tot december 2020 gratis openbare updates voor niet-commercieel gebruik.

Deze ontwikkelingskit kreeg zijn huidige naam nadat Oracle Sun Microsystems in 2010 had gekocht. Daarvoor was de naam SUN JDK, en het was de officiële implementatie van de programmeertaal Java.

3. OpenJDK

OpenJDK is een gratis en open-source implementatie van de Java SE Platform Edition. Het werd oorspronkelijk uitgebracht in 2007 als resultaat van de ontwikkeling die Sun Microsystems in 2006 startte.

We moeten zeker benadrukken dat de OpenJDK is een officiële referentie-implementatie van een Java Standard Edition sinds versie SE 7.

Aanvankelijk was het alleen gebaseerd op de JDK 7. Maar, sinds Java 10 is de open-source referentie-implementatie van het Java SE-platform de verantwoordelijkheid van het JDK-project. En, net als voor de Oracle, zal het JDK-project ook elke zes maanden nieuwe feature-releases opleveren.

We moeten opmerken dat er vóór dit langlopende project JDK Release-projecten waren die één functie uitbrachten en vervolgens werden stopgezet.

Laten we nu eens kijken naar de OpenJDK-versies:

  • OpenJDK 6-project - gebaseerd op JDK 7, maar aangepast om een ​​open-source versie van Java 6 te bieden
  • OpenJDK 7-project - 28 juli 2011
  • OpenJDK 7u-project - dit project ontwikkelt updates voor Java Development Kit 7
  • OpenJDK 8-project - 18 maart 2014
  • OpenJDK 8u-project - dit project ontwikkelt updates voor Java Development Kit 8
  • OpenJDK 9-project - 21 september 2017
  • JDK-projectrelease 10 - 20 maart 2018
  • JDK-projectversie 11 - 25 september 2018
  • JDK-projectversie 12 - Stabilisatiefase

4. Oracle JDK versus OpenJDK

In dit gedeelte zullen we ons concentreren op de belangrijkste verschillen tussen Oracle JDK en OpenJDK.

4.1. Vrijgaveschema

Zoals we al zeiden, Oracle zal om de drie jaar releases uitbrengen, terwijl OpenJDK wordt om de zes maanden uitgebracht.

Oracle biedt langdurige ondersteuning voor zijn releases. Aan de andere kant ondersteunt OpenJDK de wijzigingen aan een uitgave alleen totdat de volgende versie wordt vrijgegeven.

4.2. Licenties

Oracle JDK is gelicentieerd onder de Oracle Binary Code License Agreement, terwijl OpenJDK heeft de GNU General Public License (GNU GPL) versie 2 met een koppelingsuitzondering.

Er zijn enkele implicaties voor licenties bij het gebruik van het Oracle-platform. Openbare updates voor Oracle Java SE 8 die na januari 2019 zijn uitgebracht, zijn niet beschikbaar voor zakelijk, commercieel of productiegebruik zonder een commerciële licentie, zoals Oracle heeft aangekondigd. OpenJDK is echter volledig open source en kan vrij worden gebruikt.

4.3. Prestatie

Er is geen echt technisch verschil tussen de twee aangezien het bouwproces voor de Oracle JDK is gebaseerd op dat van OpenJDK.

Als het om prestaties gaat, Dat van Oracle is veel beter wat betreft reactievermogen en JVM-prestaties. Het legt meer nadruk op stabiliteit vanwege het belang dat het hecht aan zijn zakelijke klanten.

OpenJDK zal daarentegen vaker releases afleveren. Hierdoor kunnen we problemen met instabiliteit tegenkomen. Op basis van feedback van de community weten we dat sommige OpenJDK-gebruikers prestatieproblemen hebben ondervonden.

4.4. Kenmerken

Als we functies en opties vergelijken, zullen we zien dat de Het Oracle-product heeft Flight Recorder, Java Mission Control en Application Class-Data SharingKenmerken, terwijl OpenJDK heeft de functie Font Renderer.

Ook, Oracle heeft meer Garbage Collection-opties en betere renderers.

4.5. Ontwikkeling en populariteit

Oracle JDK is volledig ontwikkeld door Oracle Corporation terwijl de OpenJDK is ontwikkeld door Oracle, OpenJDK en de Java-gemeenschap. De eersteklas bedrijven zoals Red Hat, Azul Systems, IBM, Apple Inc. en SAP AG nemen ook actief deel aan de ontwikkeling ervan.

Zoals we kunnen zien op de link uit de vorige paragraaf, als het gaat om de populariteit bij de beste bedrijven die Java Development Kits gebruiken in hun tools, zoals Android Studio of IntelliJ IDEA, Vroeger had Oracle JDK meer de voorkeur, maar beiden zijn overgestapt op de op OpenJDK gebaseerde JetBrains-builds.

Aan de andere kant bieden grote Linux-distributies (Fedora, Ubuntu, Red Hat Enterprise Linux) OpenJDK als de standaard Java SE-implementatie.

5. Veranderingen sinds Java 11

Zoals we kunnen zien in de blogpost van Oracle, zijn er enkele belangrijke wijzigingen die beginnen met Java 11.

Allereerst, Oracle zal zijn historische "BCL" -licentie wijzigen met een combinatie van een open source GNU General Public License v2, met de Classpath Exception (GPLv2 + CPE) en commerciële licentie wanneer u de Oracle JDK gebruikt als onderdeel van een Oracle-product of -service, of wanneer open source software niet welkom is.

Elke licentie heeft verschillende builds, maar die zullen functioneel identiek zijn met slechts enkele cosmetische en verpakkingsverschillen.

Ook traditioneel "commerciële functies" zoals Flight Recorder, Java Mission Control en Application Class-Data Sharing, evenals de Z Garbage Collector, zijn nu beschikbaar in OpenJDK. Daarom Oracle JDK- en OpenJDK-builds zijn in wezen identiek vanaf Java 11 en hoger.

Laten we eens kijken naar de belangrijkste verschillen:

  • De Oracle-kit voor Java 11 geeft een waarschuwing weer bij gebruik van de -XX: + UnlockCommercialFeatures optie, terwijl in OpenJDK builds deze optie resulteert in een fout
  • Oracle JDK biedt een configuratie om gebruiksloggegevens te leveren aan de "Advanced Management Console" -tool
  • Oracle heeft altijd vereist dat externe cryptografische providers worden ondertekend met een bekend certificaat, terwijl het cryptografieframework in OpenJDK een open cryptografische interface heeft, wat betekent dat er geen beperking is met betrekking tot welke providers kunnen worden gebruikt
  • Oracle JDK 11 zal installatieprogramma's, branding en JRE-verpakkingen blijven bevatten, terwijl OpenJDK-builds momenteel beschikbaar zijn als zip en tar.gz bestanden
  • De javac -release commando gedraagt ​​zich anders voor de Java 9- en Java 10-doelen vanwege de aanwezigheid van enkele extra modules in de release van Oracle
  • De output van de java –versie en java -fullversion commando's zullen Oracle's builds onderscheiden van OpenJDK-builds

6. Andere JDK-implementaties

Laten we nu snel kijken naar andere actieve Java Development Kit-implementaties.

6.1. Gratis en open source

De volgende implementaties, in alfabetische volgorde, zijn open source en gratis te gebruiken:

  • AannemenOpenJDK
  • Amazon Corretto
  • Azul Zulu
  • Bck2Brwsr
  • CACAO
  • Codenaam One
  • DoppioJVM
  • Eclipse Open J9
  • GraalVM CE
  • HaikuVM
  • HotSpot
  • Jamiga
  • JamVM
  • Jelatine JVM
  • Jikes RVM (Jikes Research Virtual Machine)
  • JVM.go
  • leJOS
  • Maxine
  • Multi-OS-engine
  • RopeVM
  • uJVM

6.2. Eigen implementaties

Er zijn ook auteursrechtelijk beschermde implementaties:

  • Azul Zing JVM
  • CEE-J
  • Excelsior JET
  • GraalVM EE
  • Imsys AB
  • JamaicaVM (aicas)
  • JBlend (Aplix)
  • MicroJvm (IS2T - industriële slimme softwaretechnologie)
  • OJVM
  • PTC Perc
  • SAP JVM
  • Waratek CloudVM voor Java

Samen met de actieve implementaties die hierboven zijn vermeld, kunnen we de lijst met inactieve implementaties en een korte beschrijving van elke implementatie zien.

7. Conclusie

In dit artikel hebben we ons gericht op de twee populairste Java Development Kits van vandaag.

We hebben ze eerst allemaal beschreven en vervolgens de meest opvallende verschillen daartussen benadrukt. Vervolgens hebben we speciale aandacht besteed aan de veranderingen en verschillen sinds Java 11. Ten slotte hebben we andere actieve implementaties opgesomd die vandaag beschikbaar zijn.