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?
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
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.
Le calendrier de publication et la politique de support constituent une différence essentielle.
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.
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.
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.
Pour une liste complète des différences, veuillez consulter l'article source: Processus de développement JDK Oracle vs OpenJDK et Java
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`
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é.
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:.
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é.
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:
À 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.
Mise à jour: 25 août 2019
pour plus de détails Oracle-vs-openjdk
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.
É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:
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.