ПРИМІТКА. Це питання з 2014 року. На Java 11 OpenJDK і Oracle JDK сходяться.
Чи є вирішальні відмінності між Oracle та OpenJDK?
Наприклад, чи збір сміття та інші параметри JVM однакові?
Чи працює GC по-різному між ними?
ПРИМІТКА. Це питання з 2014 року. На Java 11 OpenJDK і Oracle JDK сходяться.
Чи є вирішальні відмінності між Oracle та OpenJDK?
Наприклад, чи збір сміття та інші параметри JVM однакові?
Чи працює GC по-різному між ними?
Відповіді:
І OpenJDK, і Oracle JDK створені та підтримуються лише Oracle.
OpenJDK і Oracle JDK є реалізаціями тієї ж специфікації Java, яка передана TCK (Java Technology Certification Kit).
Більшість постачальників JDK написані поверх OpenJDK, зробивши декілька налаштувань [переважно для заміни ліцензованих фірмових частин / заміни на більш високопродуктивні елементи, які працюють лише на конкретних ОС] компонентів, не порушуючи сумісності TCK.
Багато виробників реалізували специфікацію Java та пройшли TCK. Наприклад, IBM J9, Azul Zulu, Azul Zing і Oracle JDK.
Майже кожен існуючий JDK походить від OpenJDK.
Як вважають багато хто, ліцензування - це зміна між JDK.
Починаючи з JDK 11 для доступу до довготривалої підтримки Oracle JDK / Java SE тепер буде потрібна комерційна ліцензія. Тепер вам слід звернути увагу на те, який JDK ви встановлюєте як Oracle JDK без підписки, може перестати працювати. джерело
Для Java 7 нічого важливого. Проект OpenJDK здебільшого базується на вихідному коді HotSpot, подарованому Sun.
Більше того, OpenJDK був обраний для еталонної реалізації для Java 7 і підтримується інженерами Oracle.
Є більш детальна відповідь з 2012 року про різницю між JVM, JDK, JRE та OpenJDK , яка посилається на допис у блозі Oracle :
Питання : Яка різниця між вихідним кодом, знайденим у сховищі OpenJDK, і кодом, який ви використовуєте для складання Oracle JDK?
Відповідь : Це дуже близько - наш процес збирання для Oracle JDK випускає складання на OpenJDK 7, додаючи лише пару фрагментів, як код розгортання, який включає в себе реалізацію Oracle Java Plugin та Java WebStart Oracle, а також деякий третій закритий джерело сторонні компоненти, такі як графічний растризатор, деякі сторонні компоненти з відкритим кодом, такі як Rhino, і кілька біт і фрагментів тут і там, як додаткова документація або сторонні шрифти. Просуваючись вперед, наш намір полягає в тому, щоб відкрити вихідний код усіх фрагментів JDK Oracle, за винятком тих, які ми вважаємо комерційними функціями, такими як управління місією JRockit (ще не доступний в JDK Oracle), і замінити обтяжені сторонні компоненти компонентами з відкритим кодом для досягнення більш тісного паритету між базами коду.
Ключова відмінність в майбутньому - це графік випуску та політика підтримки.
OpenJDK буде випускати функцію кожні 6 місяців, яка підтримується лише до наступного випуску функції. По суті це суцільний потік випусків, орієнтований на розробників.
JDK Oracle орієнтований більше на аудиторію підприємства, яка цінує стабільність. Він заснований на одному з випусків OpenJDK, але йому надається довгострокова підтримка (LTS). Oracle JDK має заплановані випуски кожні 3 роки.
Для Java 8 , Oracle JDK проти OpenJDK я прийняв ключові відмінності:
OpenJDK - це реалізація платформи Java Standard Edition із відкритим кодом із внеском Oracle та відкритої спільноти Java.
OpenJDK випускається під ліцензією GPL v2, де Oracle JDK ліцензований відповідно до Ліцензійної угоди Oracle Binary Code.
Власне, процес збирання Oracle JDK будується з вихідного коду OpenJDK. Тож немає великої технічної різниці між Oracle JDK і OpenJDK. Крім базового коду, Oracle JDK включає в себе реалізацію Java Plugin та Java WebStart Oracle. Сюди також входять сторонні закриті джерела та компоненти з відкритим кодом, такі як графічний растризатор та Rhino відповідно. OpenJDK Font Renderer і Oracle JDK Flight Recorder - помітні основні відмінності між Oracle JDK і OpenJDK.
Повний список відмінностей див. У статті-джерелі: Oracle JDK vs OpenJDK та Java JDK Process Development
JVM Oracle і OpenJDK однакові і мають однакові функції GC (як і в останніх версіях 10+). До управління Oracle OpenVDK JVM існували конкретні відмінності, які зробили старий Openjdk JVM майже непридатним у багатьох середовищах. Тепер JVM ті самі.
JDK, які включають JVM як частину комплекту, відрізняються графіком ліцензування, випуску та обслуговування та бібліотеками програмного забезпечення, що входять до JDK. Принципові відмінності для мене також означають речі, які змусили б код не працювати, якщо його немає. Не тільки ліцензування.
diff --brief -r openjdk oraclejdk
Принципово важливо, що наступні файли відсутня на додаток до ряду інших в JDK Linux (так що, якщо ви "заявили", що код не працює на OpenJDK і зробив це в OracleJDK, коли ви використовували javafx, тоді ви були правильні):
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`
diff
?
За даними блогу oracle, Oracle JDK випускає для Java 11 та новіших версій
Починаючи з Java 11, Oracle надаватиме випуски JDK під відкритим кодом GNU General Public License v2, за винятком Classpath (GPLv2 + CPE) та під комерційну ліцензію для тих, хто використовує Oracle JDK як частину продукту чи послуги Oracle, або які не бажають використовувати програмне забезпечення з відкритим кодом. Це поєднання використання ліцензії з відкритим кодом та комерційної ліцензії замінює історичну ліцензію BCL , яка мала поєднання безкоштовних та платних комерційних умов.
Для кожної ліцензії будуть надаватися різні складання, але ці склади функціонально ідентичні, окрім деяких косметичних та упаковкових відмінностей, детально описаних нижче.
Від BCL до GPL
Ліцензія двійкового коду для Oracle Java SE технологій ( «BCL») є основною ліцензія на технологію Oracle Java SE протягом більше десяти років. BCL дозволяє використовувати без ліцензійних платежів за певних умов. Щоб спростити справи в майбутньому, Oracle почав надавати ліцензії OpenJDK з відкритим кодом, що і для Java 9, використовуючи ту ж ліцензійну модель, що і платформу Linux. Якщо ви звикли безкоштовно отримувати бінарні файли Oracle Java SE, ви можете просто продовжувати робити це за допомогою збірок OpenJDK Oracle, доступних на jdk.java.net . Якщо ви звикли отримувати бінарні файли Oracle Java SE як частину комерційного продукту чи послуги від Oracle, ви можете продовжувати отримувати випуски Oracle JDK через My Oracle Support (MOS) та інші місця.
Функціонально однакові та взаємозамінні ...
Ліцензована BCL JDK, що має ліцензію BCL, історично містила "комерційні особливості", які не були доступні у версіях OpenJDK. Як було пообіцяно , за останній рік Oracle внесли ці функції до спільноти OpenJDK, включаючи:
Таким чином, з Java 11 в майбутньому, Oracle JDK будує, а збірки OpenJDK будуть по суті ідентичними.
... все ж з деякими косметичними та упаковковими відмінностями
Залишається невелика кількість розбіжностей, деякі навмисні та косметичні, а деякі просто тому, що гарантовано більше часу для обговорення з учасниками OpenJDK.
Ця різниця залишається для того, щоб забезпечити послідовний досвід використання конкретних видів спадщини. Ці модулі тепер доступні окремо як частина OpenJFX , тепер вони є і в OpenJDK, і в Oracle JDK, оскільки вони були комерційними особливостями, які Oracle сприяли OpenJDK (наприклад, Flight Recorder), або були вилучені з Oracle JDK 11 (наприклад, JNLP) .
java 11 2018-09-25
Java (TM) SE Runtime Environment 18.9 (збірка 11 + 28)
64-бітний сервер VM 18.9 Java HotSpot (TM) (збірка 11 + 28, змішаний режим)
А для складання OpenJDK 11:
openjdk версія "11" 2018-09-25
OpenJDK середовище виконання 18.9 (збірка 11 + 28)
64-бітний сервер OpenJDK VM 18.9 (збірка 11 + 28, змішаний режим)
Перелік небагатьох відмінностей у косметиці та упаковці між Oracle JDK 11 та OpenJDK 11 можна знайти в цьому дописі в блозі:
https://blogs.oracle.com/java-platform-group/oracle-jdk-releases-for-java-11-and-later
Коротко:
З Java 11 переходьте до великої зміни
Oracle змінить свою історичну ліцензію BCL комбінацією з відкритим кодом та комерційною ліцензією
Оновлення: 25 серпня-2019
для більш детальної інформації oracle-vs-openjdk
Крім очевидної різниці в ліцензуванні, основна відмінність між OpenJDK та OracleJDK 11 - це стабільність та оновлення продуктивності.
Джерело: https://www.youtube.com/watch?v=Adv9--6IcQI&t=385
Кожні 6 місяців дві бази коду будуть синхронізовані. Але протягом 6-місячного вікна OpenJDK отримуватиме лише оновлення безпеки, тоді як OracleJDK отримає додаткові оновлення стабільності та продуктивності.
Зважаючи на те, що оновлення випусків відбувається лише кожні 3 місяці для OpenJDK і OracleJDK, це означає, що ви не вистачаєте на (щонайбільше) виправлення на 3 місяці, поки не вийде наступний великий реліз, і ви оновите оновлення. Однак якщо ви вирішите дотримуватися випусків LTS, комерційна ліцензія починає мати більше сенсу.
Також для Java 8 було опубліковано цікавий орієнтир продуктивності для реактивного (не блокуючого) додатка Spring Boot REST, який розміщений на різних JVMs від технологій Blog Blog AMIS, який показує, що серед інших відмінностей:
Для детальної інформації дивіться статтю-джерело.
Звичайно, YMMV, це лише один із орієнтирів.
Я розумію, що Oracle JDK не можна використовувати у виробництві, тому я не можу на законних підставах використовувати його (без оплати) для веб-додатків, які я будую для своєї компанії. Мені доводиться використовувати OpenJDK. Будь ласка, виправте мене, якщо я помиляюся! З цієї статті .
Починаючи з Java 11, Oracle JDK обмежується розробкою та тестуванням середовищ. JDK Oracle можуть використовуватися у виробництві лише у тому випадку, якщо ви купуєте комерційну підтримку. Натомість Oracle безкоштовно надаватиме Java-версії на основі OpenJDK, які можна використовувати у виробництві. Але для офіційного JDK Oracle справжня дорожня карта виглядатиме так:
ОНОВЛЕННЯ: Я помиляюся. Я можу користуватися Oracle JDK безкоштовно, але не оновлюю безпеку після 6 годин, і нам доведеться взяти на себе ризик. Подивіться вищезазначений розділ статті "Що означає новий поїзд для випуску для моєї компанії?".