web-dev-qa-db-fra.com

Différences entre Oracle JDK et OpenJDK

REMARQUE: cette question date de 2014. À partir de Java 11, OpenJDK et Oracle JDK convergent.

Existe-t-il des différences cruciales entre Oracle et OpenJDK?

Par exemple, le garbage collection et les autres paramètres de la machine virtuelle Java sont-ils identiques?

Est-ce que GC fonctionne différemment entre les deux?

582
user1340582

OpenJDK et Oracle JDK sont tous deux créés et maintenus pour le moment par Oracle uniquement.

OpenJDK et Oracle JDK sont des implémentations de la même spécification Java transmise par le TCK (Java Technology Certification Kit).

La plupart des fournisseurs de JDK sont écrits sur OpenJDK en faisant quelques ajustements pour remplacer les composants propriétaires sous licence par des éléments plus performants ne fonctionnant que sur des SE spécifiques, sans casser la compatibilité TCK.

De nombreux fournisseurs ont implémenté la spécification Java et ont transmis TCK. Par exemple, IBM J9, Azul Zulu, Azul Zing et JDK Oracle.

Presque tous les JDK existants sont dérivés d'OpenJDK.

Comme beaucoup l'ont suggéré, l'attribution de licence est un changement entre les JDK. 

À partir de JDK 11, pour accéder à la prise en charge de longue date, Oracle JDK/Java SE nécessite désormais une licence commerciale. Vous devez maintenant faire attention au JDK que vous installez car le JDK Oracle sans abonnement pourrait ne plus fonctionner. la source

Ref: Liste des machines virtuelles Java

252
Venkateswara Rao

Pour Java 7, rien d’important. Le projet OpenJDK est principalement basé sur le code source HotSpot donné par Sun.

De plus, OpenJDK a été choisi pour être la implémentation de référence pour Java 7 et est maintenu par les ingénieurs Oracle.

Il y a une réponse plus détaillée de 2012 sur différence entre JVM, JDK, JRE et OpenJDK }, qui renvoie à un article de blog Oracle } _:

Q: Quelle est la différence entre le code source présent dans OpenJDK référentiel et le code que vous utilisez pour créer le JDK Oracle?

A: il est très proche - notre processus de génération pour les éditions JDK d'Oracle compile sur OpenJDK 7 en ajoutant seulement quelques éléments, comme le code de déploiement, qui inclut l'implémentation d'Oracle du plugin Java et de Java WebStart, ainsi que certains composants tiers à sources fermées, tels que Rasterizer graphique, certains composants tiers open source, tels que Rhino, et quelques morceaux ici et là, comme supplémentaire documentation ou polices tierces. Pour aller de l'avant, notre intention est de Open Source, tous les éléments du JDK Oracle, à l’exception de ceux que nous considérons des fonctionnalités commerciales telles que JRockit Mission Control (pas encore disponible dans Oracle JDK), et remplacer les composants tiers encombrés par des alternatives open source pour atteindre une parité plus étroite entre le code bases.

316
radai

Le calendrier de publication et la politique de support constituent une différence essentielle. 

OpenJDK

OpenJDK aura une release de fonctionnalité tous les 6 mois qui ne sera prise en charge que jusqu'à la prochaine release. Il s’agit essentiellement d’un flux continu de versions destinées aux développeurs. 

JDK Oracle

Le JDK Oracle s’adresse davantage à un public d’entreprises soucieux de la stabilité. Il est basé sur l’une des versions d’OpenJDK, mais est alors donné un support à long terme (LTS). Le JDK Oracle a des versions planifiées tous les 3 ans. 

 enter image description here

Source: https://www.Oracle.com/Java/java9-screencasts.html?bcid=5582439790001&playerType=single-social&size=events

74

Pour Java 8, Oracle JDK par rapport à OpenJDK, j’en déduis que:

  • OpenJDK est une implémentation open source de la plate-forme Java Standard Edition avec la contribution d'Oracle et de la communauté Java ouverte.

  • OpenJDK est distribué sous licence GPL v2, dans laquelle Oracle JDK est sous licence du contrat de licence de code binaire Oracle.

  • En fait, le processus de génération d’Oracle JDK est construit à partir du code source OpenJDK. Il n’ya donc pas de différence technique majeure entre Oracle JDK et OpenJDK . Hormis le code de base, Oracle JDK inclut l’implémentation de Java Plugin et Java WebStart par Oracle. Il inclut également des composants open source et sources fermés tiers tels que les rastériseurs graphiques et Rhino respectivement . OpenJDK Font Renderer et Oracle JDK Flight Recorder sont les principales différences notables entre Oracle JDK et OpenJDK.

  • Rockit était la machine virtuelle Oracle et, à partir de Java SE 7, HotSpot et JRockit ont été fusionnés en une seule machine virtuelle. Nous ne disposons donc plus que de la machine virtuelle JVM HotSpot fusionnée.
  • Il y a des cas où des personnes déclarent avoir eu des problèmes lors de l'exécution d'OpenJDK et que cela a été résolu lors du basculement vers Oracle JDK.
  • Twitter a son propre JDK.
  • Un logiciel comme Minecraft s'attend à utiliser Oracle JDK. En fait, avertit.

Pour une liste complète des différences, veuillez consulter l'article source: Processus de développement JDK Oracle vs OpenJDK et Java

24
45hook

Les machines virtuelles Oracle et OpenJDK sont identiques et possèdent les mêmes fonctionnalités du GC (à partir des dernières versions 10+). Avant qu'Oracle ne gère la machine virtuelle Java OpenJDK, il existait des différences concrètes qui rendaient cette ancienne machine virtuelle Openjdk presque inutilisable dans de nombreux environnements. Les JVM sont maintenant les mêmes.

Les JDK, qui incluent la JVM dans le kit, diffèrent par les licences, les versions et le programme de maintenance, ainsi que par les bibliothèques de logiciels incluses dans le JDK. Les différences cruciales pour moi signifient également des choses qui feraient que le code ne soit pas exécuté s'il n'était pas présent. Pas seulement des licences. 

diff --brief -r openjdk oraclejdk

De manière cruciale, les fichiers suivants sont manquants en plus de nombreux autres sur le JDK de Linux (donc si vous avez prétendu que le code ne fonctionnait pas sous OpenJDK et si Oracle jDK fonctionnait alors que vous utilisiez javafx, vous aviez raison)

Only in jdk-10.0.1/bin: javapackager
Only in jdk-10.0.1/bin: javaws
Only in jdk-10.0.1/bin: jcontrol
Only in jdk-10.0.1/bin: jmc
Only in jdk-10.0.1/bin: jweblauncher
Only in jdk-10.0.1/lib: ant-javafx.jar
Only in jdk-10.0.1/lib: deploy
Only in jdk-10.0.1/lib: deploy.jar
Only in jdk-10.0.1/lib: desktop
Only in jdk-10.0.1/lib: fontconfig.bfc
Only in jdk-10.0.1/lib: fontconfig.properties.src
Only in jdk-10.0.1/lib: fontconfig.RedHat.6.bfc
Only in jdk-10.0.1/lib: fontconfig.RedHat.6.properties.src
Only in jdk-10.0.1/lib: fontconfig.SuSE.11.bfc
Only in jdk-10.0.1/lib: fontconfig.SuSE.11.properties.src
Only in jdk-10.0.1/lib: fonts
Only in jdk-10.0.1/lib: javafx.properties
Only in jdk-10.0.1/lib: javafx-swt.jar
Only in jdk-10.0.1/lib: Java.jnlp.jar
Only in jdk-10.0.1/lib: javaws.jar
Only in jdk-10.0.1/lib: jdk.deploy.jar
Only in jdk-10.0.1/lib: jdk.javaws.jar
Only in jdk-10.0.1/lib: jdk.plugin.jar
Only in jdk-10.0.1/lib: jfr
Only in jdk-10.0.1/lib: libavplugin-53.so
Only in jdk-10.0.1/lib: libavplugin-54.so
Only in jdk-10.0.1/lib: libavplugin-55.so
Only in jdk-10.0.1/lib: libavplugin-56.so
Only in jdk-10.0.1/lib: libavplugin-57.so
Only in jdk-10.0.1/lib: libavplugin-ffmpeg-56.so
Only in jdk-10.0.1/lib: libavplugin-ffmpeg-57.so
Only in jdk-10.0.1/lib: libbci.so
Only in jdk-10.0.1/lib: libcmm.so
Only in jdk-10.0.1/lib: libdecora_sse.so
Only in jdk-10.0.1/lib: libdeploy.so
Only in jdk-10.0.1/lib: libfxplugins.so
Only in jdk-10.0.1/lib: libglassgtk2.so
Only in jdk-10.0.1/lib: libglassgtk3.so
Only in jdk-10.0.1/lib: libglass.so
Only in jdk-10.0.1/lib: libgstreamer-lite.so
Only in jdk-10.0.1/lib: libjavafx_font_freetype.so
Only in jdk-10.0.1/lib: libjavafx_font_pango.so
Only in jdk-10.0.1/lib: libjavafx_font.so
Only in jdk-10.0.1/lib: libjavafx_iio.so
Only in jdk-10.0.1/lib: libjfxmedia.so
Only in jdk-10.0.1/lib: libjfxwebkit.so
Only in jdk-10.0.1/lib: libnpjp2.so
Only in jdk-10.0.1/lib: libprism_common.so
Only in jdk-10.0.1/lib: libprism_es2.so
Only in jdk-10.0.1/lib: libprism_sw.so
Only in jdk-10.0.1/lib: librm.so
Only in jdk-10.0.1/lib: libt2k.so
Only in jdk-10.0.1/lib: locale
Only in jdk-10.0.1/lib: missioncontrol
Only in jdk-10.0.1/lib: oblique-fonts
Only in jdk-10.0.1/lib: plugin.jar
Only in jdk-10.0.1/lib: plugin-legacy.jar
Only in jdk-10.0.1/lib/security: blacklist
Only in jdk-10.0.1/lib/security: public_suffix_list.dat
Only in jdk-10.0.1/lib/security: trusted.libraries
Only in openjdk-10.0.1: man`
17
mars

Selon le blog Oracle, Oracle JDK Releases pour Java 11 et versions ultérieures

À partir de Java 11, Oracle fournira les versions JDK sous le code source ouvert GNU General Public License v2, avec l’exception Classpath (GPLv2 + CPE) , et sous une licence commerciale pour ceux qui utilisent le JDK Oracle en tant que faisant partie d'un produit ou d'un service Oracle, ou qui ne souhaitent pas utiliser de logiciel open source. Cette combinaison d’utilisation d’une licence open source et d’une licence commerciale remplace la licence historique “ BCL ”, qui associe des conditions commerciales gratuites et payantes.

Différentes versions sont fournies pour chaque licence, mais elles sont fonctionnellement identiques, à part quelques différences esthétiques et de conditionnement, décrites en détail ci-dessous.

De la BCL à la GPL

La licence de code binaire pour les technologies Oracle Java SE («BCL») est la licence principale pour les technologies Oracle Java SE depuis plus de 10 ans. La BCL permet l’utilisation sans frais de licence sous certaines conditions. Pour simplifier les choses, Oracle a lancé en fournissant des versions OpenJDK sous licence Open Source à partir de Java 9, en utilisant le même modèle de licence que la plate-forme Linux. Si vous êtes habitué à obtenir gratuitement des fichiers binaires Oracle Java SE, vous pouvez simplement continuer à le faire avec les versions OpenJDK d’Oracle disponibles à l’adresse jdk.Java.net . Si vous avez l'habitude d'obtenir des fichiers binaires Oracle Java SE dans le cadre d'un produit ou d'un service commercial d'Oracle, vous pouvez continuer à obtenir les versions JDK d'Oracle via My Oracle Support (MOS) et d'autres emplacements.

Fonctionnellement identique et interchangeable ...

JDK sous licence BCL d’Oracle contenait historiquement des «fonctionnalités commerciales» qui n’étaient pas disponibles dans les versions OpenJDK. Comme promis , cependant, au cours de l’année écoulée, Oracle a apporté ces fonctionnalités à la communauté OpenJDK, notamment:

À partir de Java 11, les versions Oracle JDK et OpenJDK seront essentiellement identiques.

... mais avec quelques différences cosmétiques et de conditionnement

Il reste un petit nombre de différences, certaines intentionnelles et esthétiques, et certaines simplement parce que plus de temps pour discuter avec les contributeurs à OpenJDK est justifié.

  • Oracle JDK 11 émet un avertissement lors de l'utilisation de l'option -XX: + UnlockCommercialFeatures, tandis que dans OpenJDK, cette option génère une erreur. Cette option n'a jamais fait partie d'OpenJDK et il ne serait pas logique de l'ajouter maintenant car il n'y a pas de fonctionnalités commerciales dans OpenJDK. Cette différence demeure afin de faciliter la migration des utilisateurs d'Oracle JDK 10 et versions antérieures vers Oracle JDK 11 et versions ultérieures. 
  • Oracle JDK 11 peut être configuré pour fournir des données de journal d'utilisation à l'outil « Advanced Management Console », qui est un produit Oracle commercial distinct. Nous collaborerons avec d’autres contributeurs OpenJDK pour discuter de l’utilité éventuelle de telles données d’utilisation dans OpenJDK dans les versions à venir. Cette différence reste principalement destinée à fournir une expérience cohérente aux clients Oracle jusqu'à ce que de telles décisions soient prises.
  • La commande javac --release se comporte différemment pour les cibles Java 9 et Java 10, car, dans ces versions, le JDK Oracle contenait des modules supplémentaires ne faisant pas partie des versions OpenJDK correspondantes:
    • javafx.base
    • javafx.controls
    • javafx.fxml
    • javafx.graphics
    • javafx.media
    • javafx.web
    • Java.jnlp
    • jdk.jfr
    • jdk.management.cmm
    • jdk.management.jfr
    • jdk.management.resource
    • jdk.packager.services
    • jdk.snmp

Cette différence demeure afin de fournir une expérience cohérente pour des types d'utilisation spécifiques. Ces modules sont maintenant disponibles séparément dans OpenJFX , sont maintenant dans OpenJDK et dans le JDK Oracle, car il s’agissait de fonctions commerciales qu'Oracle a contribué à OpenJDK (par exemple, Flight Recorder), ou ont été supprimés de Oracle JDK 11 ( par exemple, JNLP).La sortie des commandes Java --version et Java -fullversion distinguera les versions JDK Oracle des versions OpenJDK, de sorte que les équipes de support puissent diagnostiquer les problèmes éventuels. En particulier, l’exécution de Java --version avec une version JDK 11 d’Oracle se traduit par:.

  • Environnement d'exécution Java (TM) SE 18.9 (build 11 + 28)

Serveur 64 bits Java HotSpot (TM) VM 18.9 (version 11 + 28, mode mixte)

Et pour une construction OpenJDK 11:

Openjdk version "11" 2018-09-25

OpenJDK Runtime Environment 18.9 (build 11 + 28)

serveur OpenJDK 64 bits VM 18.9 (version 11 + 28, mode mixte)

Le kit de développement Oracle a toujours exigé que les fournisseurs cryptographiques tiers soient signés par un certificat connu. La structure de cryptographie dans OpenJDK possède une interface cryptographique ouverte, ce qui signifie qu'elle ne limite pas les fournisseurs pouvant être utilisés. Oracle JDK 11 continuera à nécessiter une signature valide et les versions Oracle OpenJDK continueront de permettre l'utilisation d'une signature valide ou d'un fournisseur de chiffrement tiers non signé.

  • The Oracle JDK has always required third party cryptographic providers to be signed by a known certificate. The cryptography framework in OpenJDK has an open cryptographic interface, meaning it does not restrict which providers can be used. Oracle JDK 11 will continue to require a valid signature, and Oracle OpenJDK builds will continue to allow the use of either a valid signature or unsigned third party crypto provider.
  • Oracle JDK 11 will continue to include installers, branding and JRE packaging for an experience consistent with legacy desktop uses. Oracle OpenJDK builds are currently available as Zip and tar.gz files, while alternative distribution formats are being considered.
9
Naresh Joshi

Vous trouverez dans cet article de blog une liste des dernières différences cosmétiques et de packaging entre Oracle JDK 11 et OpenJDK 11:

https://blogs.Oracle.com/Java-platform-group/Oracle-jdk-releases-for-Java-11-and-later

En bref:

  • Oracle JDK 11 émet un avertissement lors de l’utilisation de l’option -XX: + UnlockCommercialFeatures,
  • il peut être configuré pour fournir des données de journal d'utilisation à l'outil «Advanced Management Console», 
  • il a toujours exigé que les fournisseurs cryptographiques tiers soient signés par un certificat connu, 
  • il continuera à inclure les installateurs, la marque et les emballages JRE,
  • tandis que la commande javac --release se comporte légèrement différemment pour les cibles Java 9 et Java 10, et 
  • la sortie des commandes Java --version et Java -fullversion distinguera les versions JDK Oracle des versions OpenJDK.
7
Dalibor Topic
  1. Oracle publiera des versions tous les trois ans, tandis qu'OpenJDK sera publié tous les six mois.
  2. Oracle fournit un support à long terme pour ses versions. D'autre part, OpenJDK ne prend en charge les modifications d'une version que jusqu'à la publication de la version suivante.
  3. Oracle JDK était concédé sous licence selon les termes du contrat de licence de code binaire Oracle, alors qu'OpenJDK est doté de la version 2 de la licence publique générale (GNU GPL) GNU avec une exception de liaison.
  4. Le produit Oracle dispose des fonctionnalités Flight Recorder, Java Contrôle de mission et Partage de données de classe d'application, tandis qu'OpenJDK possède la fonctionnalité de rendu des polices. De plus, Oracle propose davantage d'options de récupération de place et de meilleurs rendus,
  5. Oracle JDK est entièrement développé par Oracle Corporation, tandis que OpenJDK est développé par Oracle, OpenJDK et la Java Community. Toutefois, les entreprises de premier plan telles que Red Hat, Azul Systems, IBM, Apple Inc., SAP AG prennent également une part active à son développement.

À partir de Java 11, vous constaterez un grand changement.

Oracle modifiera sa licence historique "BCL" en combinant une licence open source et une licence commerciale.

  • 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 génère une erreur.
  • JDK Oracle propose une configuration pour fournir des données de journal d'utilisation à l'outil "Advanced Management Console".
  • Oracle a toujours exigé que les fournisseurs cryptographiques tiers soient signés par un certificat connu, tandis que l'infrastructure de cryptographie dans OpenJDK possède 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 d'inclure les programmes d'installation, la stratégie de marque et les packages 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 Oracle des versions OpenJDK.


Mise à jour: 25 août 2019



enter image description here

pour plus de détails Oracle-vs-openjdk

2
Istiaque Hossain

Outre la différence évidente en matière de licences, la principale différence entre OpenJDK et OracleJDK 11 réside dans les mises à jour de stabilité et de performance.

Source: https://www.youtube.com/watch?v=Adv9--6IcQI&t=385

Tous les 6 mois, les deux bases de code seront synchronisées. Mais au cours de la période de 6 mois, OpenJDK ne recevra que les mises à jour de sécurité, tandis qu'OracleJDK recevra des mises à jour supplémentaires sur la stabilité et les performances.

Étant donné que les mises à jour n'apparaissent que tous les 3 mois pour OpenJDK et OracleJDK, cela signifie que vous manquez (au plus) 3 mois de correctifs jusqu'à la prochaine version majeure et la mise à niveau. Cependant, si vous choisissez de vous en tenir aux versions LTS, une licence commerciale commence à avoir plus de sens.

2
Gili

Également pour Java 8 et un critère de performance intéressant pour l'application Spring Boot REST réactive (non bloquante) hébergée sur différentes machines virtuelles par AMIS Technology Blog, publiée en novembre 2018 montrant que autres différences:

  • OpenJDK a une utilisation du processeur supérieure à OracleJDK,
  • OpenJDK a un temps de réponse légèrement inférieur à OracleJDK,
  • OpenJDK utilise plus de mémoire que OracleJDK,

Pour plus de détails, veuillez consulter l'article source.

Bien sûr, YMMV, ce n’est que l’un des points de repère.

0
Greg Dubicki