Разлики между Oracle JDK и OpenJDK

1. Въведение

В тази статия ще изследваме разликите между Oracle Java Development Kit и OpenJDK. Първо ще разгледаме набързо всеки от тях и след това ще направим сравнение. След това ще видим списък с други внедрения на JDK.

2. Oracle JDK и Java SE History

JDK (Java Development Kit) е среда за разработка на софтуер, използвана в програмирането на платформата Java. Той съдържа пълна среда за изпълнение на Java, така наречената частна среда за изпълнение. Името идва от факта, че съдържа повече инструменти от самостоятелния JRE, както и другите компоненти, необходими за разработване на Java приложения.

Oracle настоятелно препоръчва използването на термина JDK за позоваване на Java SE (Standard Edition) Development Kit (има също платформи Enterprise Edition и Micro Edition).

Нека да разгледаме историята на Java SE:

  • JDK Beta - 1995
  • JDK 1.0 - януари 1996 г.
  • JDK 1.1 - февруари 1997 г.
  • J2SE 1.2 - декември 1998 г.
  • J2SE 1.3 - май 2000 г.
  • J2SE 1.4 - февруари 2002 г.
  • J2SE 5.0 - септември 2004 г.
  • Java SE 6 - декември 2006 г.
  • Java SE 7 - юли 2011 г.
  • Java SE 8 (LTS) - март 2014 г.
  • Java SE 9 - септември 2017 г.
  • Java SE 10 (18.3) - март 2018 г.
  • Java SE 11 (18.9 LTS) - септември 2018 г.
  • Java SE 12 (19.3) - март 2019 г.

Забележка: версиите в курсив вече не се поддържат.

Можем да видим, че основните версии на Java SE излизат приблизително на всеки две години до Java SE 7. Отнема пет години, за да се премести от Java SE 6, и още три, за да достигне Java SE 8 след това.

От Java SE 10 можем да очакваме нови версии на всеки шест месеца. Не всички издания обаче ще бъдат издания с дългосрочна поддръжка (LTS). В резултат на плана за пускане на Oracle изданията на LTS ще се случват само на всеки три години.

Java SE 11 е най-новата LTS версия и Java SE 8 ще получава безплатни публични актуализации до декември 2020 г. за нетърговска употреба.

Сегашното си име този комплект за разработка получи, след като Oracle купи Sun Microsystems през 2010 г. Преди това името беше SUN JDK и беше официалното внедряване на езика за програмиране Java.

3. OpenJDK

OpenJDK е безплатна реализация на Java SE Platform Edition с отворен код. Първоначално е издаден през 2007 г. в резултат на разработката, която Sun Microsystems стартира през 2006 г.

Разбира се, трябва да подчертаем, че OpenJDK е официална референтна реализация на Java Standard Edition от версия SE 7 .

Първоначално той се базираше само на JDK 7. Но от Java 10 референтното изпълнение с отворен код на платформата Java SE е отговорност на проекта JDK . И точно както за Oracle, JDK Project също ще предоставя нови функции на всеки шест месеца.

Трябва да отбележим, че преди този дългогодишен проект, имаше JDK Release Projects, които пуснаха една функция и след това бяха прекратени.

Нека сега проверим версиите на OpenJDK:

  • Проект OpenJDK 6 - базиран на JDK 7, но модифициран, за да осигури версия на Java 6 с отворен код
  • Проект OpenJDK 7 - 28 юли 2011 г.
  • Проект OpenJDK 7u - този проект разработва актуализации на Java Development Kit 7
  • Проект OpenJDK 8 - 18 март 2014 г.
  • Проект OpenJDK 8u - този проект разработва актуализации на Java Development Kit 8
  • Проект OpenJDK 9 - 21 септември 2017 г.
  • Проект на JDK, издание 10 - 20 март 2018 г.
  • JDK проект, издание 11 - 25 септември 2018 г.
  • Публикация на проекта JDK 12 - Фаза на стабилизиране

4. Oracle JDK срещу OpenJDK

В този раздел ще се съсредоточим върху ключовите разлики между Oracle JDK и OpenJDK.

4.1. График на издаване

Както споменахме, Oracle ще издава издания на всеки три години, докато OpenJDK ще излиза на всеки шест месеца .

Oracle предоставя дългосрочна подкрепа за своите издания. От друга страна, OpenJDK поддържа промените в издание само до излизането на следващата версия.

4.2. Лицензи

Oracle JDK е лицензиран съгласно лицензионното споразумение за двоичен код на Oracle , докато OpenJDK има GNU General Public License (GNU GPL) версия 2 с изключение за свързване .

Има някои лицензионни последици при използването на платформата на Oracle. Публичните актуализации за Oracle Java SE 8, пуснати след януари 2019 г., няма да бъдат достъпни за бизнес, търговска или производствена употреба без търговски лиценз, както обяви Oracle. OpenJDK обаче е напълно отворен код и може да се използва свободно.

4.3. производителност

Няма реална техническа разлика между двете, тъй като процесът на изграждане на Oracle JDK се основава на този на OpenJDK .

Що се отнася до производителността, Oracle е много по-добра по отношение на отзивчивостта и производителността на JVM . Той поставя по-голям фокус върху стабилността поради важността, която придава на своите корпоративни клиенти.

За разлика от това OpenJDK ще доставя издания по-често. В резултат на това можем да срещнем проблеми с нестабилността. Въз основа на отзивите на общността знаем, че някои потребители на OpenJDK са срещали проблеми с производителността.

4.4. Характеристика

Ако сравним функции и опции, ще видим, че Oracle Продуктът има Flight Recorder, Java Mission Control, както и на приложения за споделяне на Клас-Data разполага , докато OpenJDK има функцията на шрифта Renderer .

Освен това Oracle има повече опции за събиране на боклук и по-добри визуализатори.

4.5. Развитие и популярност

Oracle JDK е напълно разработен от Oracle Corporation, докато OpenJDK е разработен от Oracle, OpenJDK и Java общността . Въпреки това, първокласните компании като Red Hat, Azul Systems, IBM, Apple Inc., SAP AG също вземат активно участие в неговото развитие.

Както можем да видим от връзката от предишния подраздел, що се отнася до популярността сред топ компаниите, които използват Java Development Kits в своите инструменти, като Android Studio или IntelliJ IDEA, Oracle JDK беше по-предпочитан, но и двете от тях са преминали към базирани на OpenJDK компилации JetBrains.

От друга страна, основните дистрибуции на Linux (Fedora, Ubuntu, Red Hat Enterprise Linux) предоставят OpenJDK като изпълнение по подразбиране на Java SE.

5. Промени от Java 11

Както виждаме в публикацията в блога на Oracle, има някои важни промени, започвайки с Java 11.

На първо място, Oracle ще промени историческия си лиценз „BCL“ с комбинация от GNU General Public License v2 с изключение на Classpath (GPLv2 + CPE) и търговски лиценз, когато използва Oracle JDK като част от продукт на Oracle или услуга или когато софтуерът с отворен код не е добре дошъл.

Всеки лиценз ще има различни компилации, но те ще бъдат функционално идентични само с някои козметични и опаковъчни разлики.

Също така традиционно „търговски функции“ като Flight Recorder, Java Mission Control и Application Class-Data Sharing, както и Z Garbage Collector, вече са достъпни в OpenJDK. Следователно компилациите на Oracle JDK и OpenJDK са по същество идентични от Java 11 нататък .

Нека проверим основните разлики:

  • Комплектът на Oracle за Java 11 излъчва предупреждение при използване на опцията -XX: + UnlockCommercialFeatures , докато при компилациите на OpenJDK тази опция води до грешка
  • Oracle JDK предлага конфигурация за предоставяне на данни от дневника на използването на инструмента „Advanced Management Console“
  • Oracle винаги е изисквал доставчици на криптография на трети страни да бъдат подписани от известен сертификат, докато криптографската рамка в OpenJDK има отворен криптографски интерфейс, което означава, че няма ограничение за това кои доставчици могат да се използват
  • Oracle JDK 11 ще продължи да включва инсталатори, брандиране и JRE опаковки, докато компилациите на OpenJDK понастоящем се предлагат като zip и tar.gz файлове
  • Командата javac –release се държи по различен начин за целите Java 9 и Java 10 поради наличието на някои допълнителни модули в изданието на Oracle
  • Изходът на командите java –version и java -fullversion ще различава компилациите на Oracle от компилациите OpenJDK

6. Други изпълнения на JDK

Нека сега да разгледаме набързо други активни внедрения на Java Development Kit.

6.1. Безплатен и с отворен код

Следните изпълнения, изброени по азбучен ред, са с отворен код и са безплатни за използване:

  • ПриемамOpenJDK
  • Amazon Corretto
  • Азул Зулу
  • Bck2Brwsr
  • CACAO
  • Кодово име едно
  • DoppioJVM
  • Eclipse OpenJ9
  • GraalVM CE
  • HaikuVM
  • HotSpot
  • Джамига
  • JamVM
  • Желатин JVM
  • Jikes RVM (виртуална машина на Jikes Research)
  • JVM.go
  • leJOS
  • Максин
  • Multi-OS Engine
  • Въже VM
  • uJVM

6.2. Патентовани изпълнения

Има и изпълнения, защитени с авторски права:

  • Azul Zing JVM
  • ЦИЕ-J
  • Excelsior JET
  • GraalVM EE
  • Imsys AB
  • Ямайка VM (aicas)
  • JBlend (Aplix)
  • MicroJvm (IS2T - Индустриална интелигентна софтуерна технология)
  • OJVM
  • PTC Perc
  • SAP JVM
  • Waratek CloudVM за Java

Заедно с активните внедрения, изброени по-горе, можем да видим списъка с неактивни внедрения и кратко описание на всяко изпълнение.

7. Заключение

В тази статия се фокусирахме върху двата най-популярни комплекта за разработка на Java днес.

Първо описахме всеки от тях и след това подчертахме най-забележителните разлики между тях. След това обърнахме специално внимание на промените и разликите от Java 11. Накрая изброихме други активни внедрения, които са налични днес.