OpenJDK ( Open Java Development Kit ) — это бесплатная реализация платформы Java Standard Edition с открытым исходным кодом (Java SE). [2] Это результат усилий Sun Microsystems , начатых в 2006 году. Реализация лицензируется только под лицензией GPL-2.0 с исключением ссылок . Если бы не исключение для ссылок GPL, компоненты, связанные с библиотекой классов Java , подпадали бы под действие условий лицензии GPL. OpenJDK является официальной эталонной реализацией Java SE начиная с версии 7. [3] [4] [5]
Проект OpenJDK производит ряд компонентов: в первую очередь виртуальную машину ( HotSpot ), библиотеку классов Java и компилятор Java ( javac ).
Плагин веб-браузера и Web Start , являющиеся частью Oracle Java , не включены в OpenJDK. Ранее Sun заявляла, что попытается открыть исходный код этих компонентов, но ни Sun, ни Oracle этого не сделали. [6] Единственные доступные на данный момент бесплатные реализации плагинов и Web Start по состоянию на 2016 год [обновлять]— это те, которые предоставлены IcedTea . [ нужна цитата ]
OpenJDK 9+ поддерживает компиляцию AOT ( jaotc
) с использованием GraalVM (JEP 295). [7] Экспериментальный -XX:+EnableJVMCIProduct
флаг позволяет использовать Graal JIT (JEP 317). [8]
OpenJDK изначально был основан только на версии платформы Java JDK 7 . [9]
Начиная с JDK 10, усилия по созданию эталонной реализации платформы Java SE с открытым исходным кодом были перенесены в проект JDK. [10] В отличие от прошлых проектов выпуска JDK, в которых был выпущен только один выпуск функции, а затем прекращен, этот долгосрочный проект будет производить все будущие выпуски функций JDK и выпускать выпуск функции каждые шесть месяцев в соответствии со строгой моделью, основанной на времени. [11]
Поскольку Oracle больше не выпускает обновления для выпусков долгосрочной поддержки (LTS) по разрешительной лицензии, другие начали предлагать сборки. [12] [13] [14] Дистрибутивы Linux всегда предлагали свои собственные сборки, и Windows теперь также предлагает одну, которую можно установить с помощью диспетчера пакетов Windows . Например, чтобы установить OpenJDK 17:
winget install Microsoft.OpenJDK.17
Чтобы включить OpenJDK в Fedora и другие бесплатные дистрибутивы Linux , OpenJDK нужно было собирать с использованием только компонентов свободного программного обеспечения . Из-за обремененных компонентов в библиотеке классов и неявных предположений в системе сборки, что JDK, используемый для сборки OpenJDK, был Sun JDK, это было невозможно. Чтобы добиться открытости, Red Hat запустила проект IcedTea в июне 2007 года. [40] Он начал свою жизнь как гибрид OpenJDK/ GNU Classpath , который можно было использовать для начальной загрузки OpenJDK, заменяя обременения кодом из GNU Classpath. [41] [42]
5 ноября 2007 г. Red Hat подписала Соглашение с участником Sun и лицензию TCK сообщества OpenJDK . [43] Одним из первых преимуществ этого соглашения является более тесное соответствие с проектом IcedTea, который объединяет технологии Fedora , дистрибутива Linux, и JBoss , сервера приложений, в среде Linux. IcedTea предоставила альтернативы бесплатному программному обеспечению для нескольких оставшихся проприетарных разделов проекта OpenJDK.
В мае 2008 года дистрибутивы Fedora 9 [44] [45] и Ubuntu 8.04 [46] включали IcedTea 6, полностью основанную на бесплатном и открытом исходном коде. [47] Fedora 9 была первой версией, поставляемой с IcedTea6, основанной на исходниках OpenJDK6 от Sun, а не на OpenJDK7. Он также был первым, кто использовал OpenJDK в качестве имени пакета (согласно соглашению о товарных знаках OpenJDK) вместо IcedTea. [44] Ubuntu также сначала упаковала IcedTea7 [48] , а затем перешла на IcedTea6. Пакеты для IcedTea6 также были созданы для Debian и включены в Lenny . 12 июля 2008 года Debian принял OpenJDK-6 в нестабильной версии, [49] [50] , а позже был включен в стабильную версию . [51] OpenJDK также доступен в openSUSE , [52] Red Hat Enterprise Linux и производных RHEL, таких как CentOS . [53]
В июне 2008 года Red Hat объявила, что двоичные файлы OpenJDK в Fedora 9 , созданные с использованием IcedTea 6, прошли тесты Technology Compatibility Kit и могут претендовать на звание полностью совместимой реализации Java 6. [54] В июле 2009 года двоичная сборка IcedTea 6 для Ubuntu 9.04 прошла все тесты совместимости в Java SE 6 TCK . [55]
С августа 2008 года OpenJDK 7 можно использовать в macOS и других вариантах BSD . [56]
В Android Nougat OpenJDK заменил ныне прекращенную Apache Harmony в качестве библиотек Java в исходном коде мобильной операционной системы . Google находился в судебном споре с Oracle по поводу исков о нарушении авторских прав и патентов из-за использования повторных реализаций Java API, защищенных авторским правом, через Harmony. Заявив также, что это изменение призвано создать более согласованную платформу между Java на Android и другими платформами, компания признала, что это изменение было мотивировано судебным иском, утверждая, что Oracle разрешила использование кода OpenJDK, лицензируя его под лицензией GPL. . [57]
Sun объявила на JavaOne 2006 , что Java станет программным обеспечением с открытым исходным кодом, [58] [59] , а 25 октября 2006 года на конференции Oracle OpenWorld Джонатан Шварц заявил, что компания намерена объявить об открытом исходном коде ядра Java . Платформа в течение 30–60 дней. [60]
13 ноября 2006 года компания Sun выпустила виртуальную машину и компилятор Java HotSpot как бесплатное программное обеспечение под лицензией GNU General Public License , пообещав, что остальная часть JDK (включая среду выполнения Java ) будет переведена под лицензию GPL к марту 2007 года. , «за исключением нескольких компонентов, которые Sun не имеет права публиковать в исходном виде под лицензией GPL». [61] По мнению сторонника свободного программного обеспечения Ричарда Столлмана , это положит конец «ловушке Java», привязке к поставщику, которая, как он утверждает, применяется к Java и программам, написанным на Java. [62]
Следуя своему обещанию выпустить Java Development Kit (JDK), почти полностью основанному на бесплатном и открытом исходном коде, в первой половине 2007 года, [63] Sun 8 мая выпустила полный исходный код библиотеки классов Java под лицензией GPL. 2007, за исключением некоторых ограниченных частей, лицензия на которые была передана Sun третьими лицами, и Sun не смогла повторно лицензировать их по лицензии GPL. [64] В список обремененных частей были включены несколько основных компонентов графического пользовательского интерфейса (GUI) Java. Sun заявила, что планирует заменить оставшиеся проприетарные компоненты альтернативными реализациями и сделать библиотеку классов полностью бесплатной.
На момент первоначального выпуска в мае 2007 года 4% библиотеки классов OpenJDK оставались проприетарными. [65] К моменту появления OpenJDK 6 в мае 2008 года осталось менее 1% ( реализация SNMP , [66] которая не является частью спецификации Java), [44] что позволило собрать OpenJDK без каких-либо двоичных плагинов. [66] Требование двоичного подключения было позже исключено из OpenJDK 7 как часть b53 в апреле 2009 года. [67]
Это стало возможным в течение первого года благодаря работе Sun Microsystems и сообщества OpenJDK. Каждое обременение [68] либо выпускалось как бесплатное программное обеспечение с открытым исходным кодом , либо заменялось альтернативой. Начиная с декабря 2010 года все так называемые бинарные плагины были заменены аналогами с открытым исходным кодом , в результате чего весь JDK стал открытым, и бинарные плагины больше не нужны. [69]
5 ноября 2007 года Red Hat объявила о соглашении с Sun, подписав широкое соглашение с участниками Sun (которое охватывает участие всех инженеров Red Hat во всех проектах бесплатного программного обеспечения с открытым исходным кодом под руководством Sun) и пакет совместимости Sun OpenJDK Community Technology Compatibility Kit (TCK). ) Лицензионное соглашение (которое дает компании доступ к набору тестов, определяющему, соответствует ли проект на основе OpenJDK спецификации Java SE 6). [70]
Также в ноябре 2007 года была создана группа Porters Group для OpenJDK, чтобы помочь в портировании OpenJDK на различные процессорные архитектуры и операционные системы . Проект портирования BSD , возглавляемый Куртом Миллером и Грегом Льюисом, и проект портирования Mac OS X (на основе BSD), возглавляемый Лэндоном Фуллером, выразили заинтересованность в присоединении к OpenJDK через Porters Group. По состоянию на январь 2008 года оба участвуют в обсуждениях в списке рассылки. Еще один проект, ожидающий официального оформления в Porters Group, — это команда Haiku Java под руководством Брайана Варнера. [71]
В декабре 2007 года Sun перенесла контроль версий OpenJDK из TeamWare в Mercurial (а позже в Git и GitHub ) в рамках процесса выпуска его для сообществ с открытым исходным кодом . [72] [73]
OpenJDK имеет сравнительно строгие процедуры принятия вкладов в код: каждый предложенный вклад должен быть рассмотрен другим коммиттером OpenJDK, и участник должен подписать Соглашение участников Sun/Oracle (SCA/OCA). [74] Предпочтительно также иметь тест jtreg [75] , демонстрирующий исправление ошибки. Первоначально процесс подачи внешних исправлений был медленным [76] , и до сентября 2008 года изменения в кодовой базе выполнялись только инженерами Sun. [77] Процесс улучшился, и с 2010 года [обновлять]простые исправления и бэкпорты с OpenJDK 7 на OpenJDK 6 могут выполняться в течение нескольких часов, а не дней. [78]
В 2011 году был впервые выпущен неофициальный порт OpenJDK 6.0 на OS/2. [79] Этот порт включен в производную OS/2 ArcaOS . [80]
25 сентября 2013 года Microsoft и Azul Systems совместно создали Zulu, [81] сборку OpenJDK для пользователей облака Windows Azure. Zulu доступен для бесплатной загрузки на сайте сообщества Zulu.org. Также можно получить Zulu на Amazon Web Services [82] через магазин Canonical Juju Charm Store, [83] Docker Hub, [84] и репозитории Azul Systems. Azul вносит исправления ошибок и улучшения в проект OpenJDK и имеет в своем штате несколько коммиттеров проекта. [85] Red Hat отказалась от руководства OpenJDK 6 в начале 2017 года, и затем его взяла на себя Azul Systems. [86] [87]
С апреля 2016 года на GitHub в проекте ojdkbuild доступны неподдерживаемые сборки OpenJDK для Microsoft Windows , выпускаемые сообществом вместе с обновлениями для Oracle JDK. Начиная со сборки 8u151, установщик MSI предлагает дополнительный компонент для использования Java Web Start на основе проекта IcedTea-Web .
В 2020 году был выпущен порт OpenJDK 8 на OpenVMS на платформе Itanium . [88]
Количество внешних участников OpenJDK растет с момента создания проекта. OpenJDK 11, выпущенный в сентябре 2018 года, получил 20% внешних исправлений [89] и принес 17 новых JEP (функций), из которых 3 были предоставлены сообществом. А именно, JEP 315: «Улучшение встроенных функций Aarch64» (предоставлено BellSoft), JEP 318: «Epsilon: сборщик мусора без операций» (от Red Hat) и JEP 331: «Профилирование кучи с низкими накладными расходами» (предоставлено Google). . [90]
11 октября 2010 года IBM , крупнейший участник проекта Apache Harmony , решила присоединиться к Oracle в проекте OpenJDK, фактически переключив свои усилия с Harmony на OpenJDK. [91] [92] Боб Сутор, глава IBM по Linux и открытому исходному коду, написал в блоге, что «IBM перенесет свои усилия по разработке с Apache Project Harmony на OpenJDK». [93]
12 ноября 2010 года Apple Inc. (всего через три недели после прекращения поддержки собственного порта среды выполнения Java [94] ) и корпорация Oracle объявили о проекте OpenJDK для Mac OS X. Apple предоставит большую часть ключевых компонентов, инструментов и технологий, необходимых для реализация Java SE 7 в Mac OS X, включая 32-битную и 64-битную виртуальную машину Java на базе HotSpot, библиотеки классов, сетевой стек и основу для нового графического клиента. [95]
11 января 2011 года на OpenJDK был создан проект порта Mac OS X, и Apple впервые опубликовала код в этом проекте. Первоначальный вклад Apple был основан на порте OpenJDK BSD . [96]
В июле 2011 года SAP AG объявила, что SAP официально присоединилась к проекту OpenJDK. [97]
AOT представляет новый инструмент под названием «jaotc», который использует Graal в качестве бэкэнда (для генерации кода).
Sun дала это обещание, и мы планируем его сдержать. Но за шесть месяцев, прошедших с момента объявления в ноябре 2006 года, стало ясно, что сделать это гораздо сложнее, чем просто изменить лицензию и опубликовать исходный код.
Томас Фитцсиммонс обновил исходные страницы примечаний к выпуску Fedora 9, указав, что Fedora 9 будет поставляться с OpenJDK 6 вместо реализации OpenJDK 7 IcedTea. Fedora 9 (Sulphur) должна быть выпущена в мае 2008 года.
IBM перенесет свои усилия по разработке с Apache Project Harmony на OpenJDK. Для тех, кто хочет сделать то же самое, мы будем работать вместе, чтобы сделать переход максимально простым. IBM по-прежнему будет активно участвовать в других проектах Apache.
Сегодня Oracle и Apple объявили о проекте OpenJDK для Mac OS X. Apple предоставит большинство ключевых компонентов, инструментов и технологий, необходимых для реализации Java SE 7 в Mac OS X, включая 32-битную и 64-битную версию Java на базе HotSpot. виртуальная машина, библиотеки классов, сетевой стек и основа для нового графического клиента. OpenJDK сделает технологию Apple Java доступной разработчикам с открытым исходным кодом, чтобы они могли получить доступ к ней и внести свой вклад в эту работу.
Я очень рад сообщить вам, что сегодня мы сделали первый публичный вклад в код проекта OpenJDK для Mac OS X. Этот первоначальный вклад основан на тяжелой работе над портом BSD и изначально имеет ту же функциональность. Сегодняшний вклад просто изменяет процесс сборки для создания универсального двоичного файла и создает пакет .jdk, который распознается настройками Java и логикой обнаружения JVM в Mac OS X.
Я очень рад, что сегодня SAP подписала Соглашение с участником Oracle (OCA). Это означает, что с немедленным вступлением в силу разработчики SAP JVM смогут официально присоединиться к обсуждениям в различных списках рассылки OpenJDK и вносить исправления и улучшения в проект.