Différences entre Oracle JDK et OpenJDK

1. Introduction

Dans cet article, nous explorerons les différences entre Oracle Java Development Kit et OpenJDK. Nous allons d'abord jeter un coup d'œil à chacun d'eux, puis faire une comparaison. Après cela, nous verrons une liste des autres implémentations JDK.

2. Historique Oracle JDK et Java SE

JDK (Java Development Kit) est un environnement de développement logiciel utilisé dans la programmation de plate-forme Java. Il contient un environnement Java Runtime complet, un runtime dit privé. Le nom vient du fait qu'il contient plus d'outils que le JRE autonome ainsi que les autres composants nécessaires au développement d'applications Java.

Oracle recommande vivement d'utiliser le terme JDK pour désigner le kit de développement Java SE (Standard Edition) (il existe également des plates-formes Enterprise Edition et Micro Edition).

Jetons un coup d'œil à l'histoire de Java SE:

  • JDK Bêta - 1995
  • JDK 1.0 - janvier 1996
  • JDK 1.1 - Février 1997
  • J2SE 1.2 - décembre 1998
  • J2SE 1.3 - mai 2000
  • J2SE 1.4 - Février 2002
  • J2SE 5.0 - septembre 2004
  • Java SE 6 - décembre 2006
  • Java SE 7 - juillet 2011
  • Java SE 8 (LTS) - Mars 2014
  • Java SE 9 - septembre 2017
  • Java SE 10 (18.3) - Mars 2018
  • Java SE 11 (18.9 LTS) - Septembre 2018
  • Java SE 12 (19.3) - Mars 2019

Remarque: les versions en italique ne sont plus prises en charge.

Nous pouvons voir que les principales versions de Java SE sont arrivées environ tous les deux ans jusqu'à Java SE 7. Il a fallu cinq ans pour passer de Java SE 6, et trois autres pour atteindre Java SE 8 par la suite.

Depuis Java SE 10, nous pouvons nous attendre à de nouvelles versions tous les six mois. Cependant, toutes les versions ne seront pas des versions LTS (Long-Term-Support). En raison du plan de publication d'Oracle, les versions du produit LTS n'auront lieu que tous les trois ans.

Java SE 11 est la dernière version LTS, et Java SE 8 recevra des mises à jour publiques gratuites jusqu'en décembre 2020 pour un usage non commercial.

Ce kit de développement tire son nom actuel après qu'Oracle a acheté Sun Microsystems en 2010. Avant cela, le nom était SUN JDK, et c'était l'implémentation officielle du langage de programmation Java.

3. OpenJDK

OpenJDK est une implémentation gratuite et open source de Java SE Platform Edition. Il a été initialement publié en 2007 à la suite du développement que Sun Microsystems a commencé en 2006.

Certes, il faut souligner que l' OpenJDK est une implémentation de référence officielle d'une Java Standard Edition depuis la version SE 7 .

Initialement, il était basé uniquement sur le JDK 7. Mais, depuis Java 10, l'implémentation de référence open source de la plateforme Java SE est sous la responsabilité du projet JDK . Et, tout comme pour Oracle, le projet JDK fournira également de nouvelles versions de fonctionnalités tous les six mois.

Nous devons noter qu'avant ce projet de longue date, il y avait des projets de version JDK qui ont publié une fonctionnalité, puis ont été interrompus.

Voyons maintenant les versions d'OpenJDK:

  • Projet OpenJDK 6 - basé sur JDK 7, mais modifié pour fournir une version open-source de Java 6
  • Projet OpenJDK 7 - 28 juillet 2011
  • Projet OpenJDK 7u - ce projet développe des mises à jour du kit de développement Java 7
  • Projet OpenJDK 8 - 18 mars 2014
  • Projet OpenJDK 8u - ce projet développe des mises à jour du kit de développement Java 8
  • Projet OpenJDK 9 - 21 septembre 2017
  • Sortie du projet JDK du 10 au 20 mars 2018
  • Sortie du projet JDK du 11 au 25 septembre 2018
  • Projet JDK version 12 - Phase de stabilisation

4. Oracle JDK contre OpenJDK

Dans cette section, nous nous concentrerons sur les principales différences entre Oracle JDK et OpenJDK.

4.1. Calendrier de sortie

Comme nous l'avons mentionné, Oracle fournira des versions tous les trois ans, tandis qu'OpenJDK sera publié tous les six mois .

Oracle fournit un support à long terme pour ses versions. D'autre part, OpenJDK prend en charge les modifications apportées à une version uniquement jusqu'à ce que la version suivante soit publiée.

4.2. Licences

Oracle JDK a obtenu une licence en vertu du contrat de licence Oracle Binary Code , tandis qu'OpenJDK a la licence publique générale GNU (GNU GPL) version 2 avec une exception de liaison .

Il y a des implications de licence lors de l'utilisation de la plate-forme Oracle. Les mises à jour publiques d'Oracle Java SE 8 publiées après janvier 2019 ne seront pas disponibles pour une utilisation professionnelle, commerciale ou de production sans licence commerciale, comme Oracle l'a annoncé. Cependant, OpenJDK est complètement open source et peut être utilisé librement.

4.3. Performance

Il n'y a pas de réelle différence technique entre les deux puisque le processus de construction d'Oracle JDK est basé sur celui d'OpenJDK .

En termes de performances, Oracle est bien meilleur en termes de réactivité et de performances JVM . Elle met davantage l'accent sur la stabilité en raison de l'importance qu'elle accorde à ses entreprises clientes.

OpenJDK, en revanche, fournira des versions plus souvent. En conséquence, nous pouvons rencontrer des problèmes d'instabilité. Sur la base des commentaires de la communauté, nous savons que certains utilisateurs d'OpenJDK ont rencontré des problèmes de performances.

4.4. traits

Si l' on compare les caractéristiques et options, nous allons voir que le produit Oracle a Flight Recorder, Java Mission de contrôle et de partage de classe Application Data dispose , alors que OpenJDK a la fonction de police Renderer .

En outre, Oracle propose plus d'options de récupération de place et de meilleurs moteurs de rendu.

4.5. Développement et popularité

Oracle JDK est entièrement développé par Oracle Corporation tandis que l' OpenJDK est développé par Oracle, OpenJDK et la communauté Java . Cependant, les entreprises de premier plan comme Red Hat, Azul Systems, IBM, Apple Inc., SAP AG participent également activement à son développement.

Comme nous pouvons le voir sur le lien de la sous-section précédente, en ce qui concerne la popularité auprès des principales entreprises qui utilisent des kits de développement Java dans leurs outils, tels qu'Android Studio ou IntelliJ IDEA, Oracle JDK était autrefois plus préféré, mais les deux d'entre eux sont passés aux versions JetBrains basées sur OpenJDK.

D'autre part, les principales distributions Linux (Fedora, Ubuntu, Red Hat Enterprise Linux) fournissent OpenJDK comme implémentation par défaut de Java SE.

5. Modifications depuis Java 11

Comme nous pouvons le voir dans l'article de blog d'Oracle, il y a quelques changements importants à partir de Java 11.

Tout d'abord, Oracle modifiera sa licence «BCL» historique avec une combinaison d'une licence publique générale GNU open source v2, avec l'exception Classpath (GPLv2 + CPE) et une licence commerciale lors de l'utilisation d'Oracle JDK dans le cadre d'un produit Oracle ou service, ou lorsque les logiciels open source ne sont pas les bienvenus.

Chaque licence aura des versions différentes, mais celles-ci seront fonctionnellement identiques avec seulement quelques différences cosmétiques et d'emballage.

En outre, les «fonctionnalités commerciales» traditionnelles telles que l'enregistreur de vol, le contrôle de mission Java et le partage de données de classe d'application, ainsi que le Z Garbage Collector, sont désormais disponibles dans OpenJDK. Par conséquent, les versions Oracle JDK et OpenJDK sont essentiellement identiques à partir de Java 11 .

Voyons les principales différences:

  • Le kit Oracle pour Java 11 émet un avertissement lors de l'utilisation de l' option -XX: + UnlockCommercialFeatures , alors que dans les versions OpenJDK, cette option entraîne une erreur
  • Oracle JDK propose une configuration pour fournir les données du journal d'utilisation à l'outil «Advanced Management Console»
  • Oracle a toujours exigé que les fournisseurs de cryptographie tiers soient signés par un certificat connu, tandis que le cadre de cryptographie dans OpenJDK a une interface cryptographique ouverte, ce qui signifie qu'il n'y a aucune restriction quant aux fournisseurs pouvant être utilisés.
  • Oracle JDK 11 continuera à inclure les programmes d'installation, la marque et le packaging JRE, tandis que les versions OpenJDK sont actuellement disponibles sous forme de fichiers zip et tar.gz
  • La commande javac –release se comporte différemment pour les cibles Java 9 et Java 10 en raison de la présence de certains modules supplémentaires dans la version d'Oracle
  • La sortie des commandes java –version et java -fullversion distinguera les versions d'Oracle des versions d'OpenJDK

6. Autres implémentations JDK

Jetons maintenant un coup d'œil rapide aux autres implémentations actives du kit de développement Java.

6.1. Gratuit et Open Source

Les implémentations suivantes, répertoriées par ordre alphabétique, sont open source et libres d'utilisation:

  • AdoptOpenJDK
  • Amazon Corretto
  • Azul Zulu
  • Bck2Brwsr
  • CACAO
  • Nom de code un
  • DoppioJVM
  • Eclipse OpenJ9
  • GraalVM CE
  • HaikuVM
  • Point chaud
  • Jamiga
  • JamVM
  • JVM Jelatine
  • Jikes RVM (machine virtuelle Jikes Research)
  • JVM.go
  • leJOS
  • Maxine
  • Moteur multi-OS
  • RopeVM
  • uJVM

6.2. Implémentations propriétaires

Il existe également des implémentations protégées par le droit d'auteur:

  • JVM Azul Zing
  • CEE-J
  • Excelsior JET
  • GraalVM EE
  • Imsys AB
  • JamaicaVM (aicas)
  • JBlend (Aplix)
  • MicroJvm (IS2T - Technologie logicielle intelligente industrielle)
  • OJVM
  • PTC Perc
  • SAP JVM
  • Waratek CloudVM pour Java

En plus des implémentations actives répertoriées ci-dessus, nous pouvons voir la liste des implémentations inactives et une brève description de chaque implémentation.

7. Conclusion

Dans cet article, nous nous sommes concentrés sur les deux kits de développement Java les plus populaires aujourd'hui.

Nous avons d'abord décrit chacun d'eux, puis souligné les différences les plus notables entre eux. Ensuite, nous avons porté une attention particulière aux changements et aux différences depuis Java 11. Enfin, nous avons répertorié d'autres implémentations actives disponibles aujourd'hui.