OpenJDK ( Open Java Development Kit ) — это бесплатная и открытая реализация Java Platform, Standard Edition (Java SE). [2] Это результат усилий Sun Microsystems, начатых в 2006 году. Реализация лицензирована в соответствии с GNU General Public License 2 с исключением привязки , предотвращающим попадание компонентов, связанных с Java Class Library, под условия лицензии GPL. OpenJDK — это официальная эталонная реализация Java SE, начиная с версии 7, и является самым популярным дистрибутивом JDK. [3] [4] [5]
На конференции JavaOne 2006 компания Sun объявила , что Java станет программным обеспечением с открытым исходным кодом, [6] [7] а 25 октября 2006 года на конференции Oracle OpenWorld Джонатан Шварц заявил, что компания намерена объявить об открытии исходного кода базовой платформы Java в течение 30–60 дней. [8]
Sun выпустила виртуальную машину Java HotSpot и компилятор как свободное программное обеспечение под лицензией GNU General Public License 13 ноября 2006 года, пообещав, что остальная часть JDK (включая Java Runtime Environment ) будет размещена под лицензией GPL к марту 2007 года, «за исключением нескольких компонентов, которые Sun не имеет права публиковать в исходном виде под лицензией GPL». [9] По словам сторонника свободного программного обеспечения Ричарда Столлмана , это положит конец «ловушке Java», привязке к поставщику , которая, как он утверждает, применяется к Java и программам, написанным на Java. [10]
После своего обещания выпустить Java Development Kit (JDK), основанный почти полностью на свободном и открытом исходном коде в первой половине 2007 года, [11] Sun выпустила полный исходный код Java Class Library под лицензией GPL 8 мая 2007 года, за исключением некоторых ограниченных частей, которые были лицензированы Sun третьими лицами, и Sun не смогла повторно лицензировать их под GPL. [12] В список обремененных частей было включено несколько основных компонентов графического пользовательского интерфейса Java (GUI). Sun заявила, что планирует заменить оставшиеся проприетарные компоненты альтернативными реализациями и сделать библиотеку классов полностью бесплатной.
При первоначальном выпуске в мае 2007 года 4% библиотеки классов OpenJDK оставались проприетарными. [13] К моменту появления OpenJDK 6 в мае 2008 года оставалось менее 1% ( реализация SNMP , [14] которая не является частью спецификации Java), [15] что позволило собрать OpenJDK без каких-либо двоичных плагинов. [14] Требование двоичного плагина было позднее исключено из OpenJDK 7 как часть b53 в апреле 2009 года. [16]
Это стало возможным в течение первого года благодаря работе Sun Microsystems и сообщества OpenJDK. Каждое обременение [17] либо выпускалось как бесплатное и открытое программное обеспечение , либо заменялось альтернативой. Начиная с декабря 2010 года, все так называемые бинарные плагины были заменены на замены с открытым исходным кодом , что сделало весь JDK открытым исходным кодом, а бинарные плагины больше не нужны. [18]
5 ноября 2007 года Red Hat объявила о соглашении с Sun, подписав широкое соглашение о сотрудничестве с Sun (которое охватывает участие во всех проектах Sun по разработке свободного и открытого программного обеспечения всеми инженерами Red Hat) и лицензионное соглашение Sun OpenJDK Community Technology Compatibility Kit (TCK) (которое предоставляет компании доступ к тестовому набору, определяющему, соответствует ли проект на основе OpenJDK спецификации Java SE 6). [19]
Также в ноябре 2007 года была создана Porters Group на OpenJDK для содействия усилиям по переносу OpenJDK на различные архитектуры процессоров и операционные системы . Проект портирования BSD под руководством Курта Миллера и Грега Льюиса и проект портирования Mac OS X (основанный на BSD) под руководством Лэндона Фуллера выразили заинтересованность в присоединении к OpenJDK через Porters Group. По состоянию на январь 2008 года оба являются частью обсуждений в списке рассылки. Еще один проект, ожидающий формализации в Porters Group, — это Haiku Java Team под руководством Брайана Варнера. [20]
В декабре 2007 года Sun перенесла контроль версий OpenJDK из TeamWare в Mercurial (а позднее в Git и GitHub ) в рамках процесса его выпуска для сообществ с открытым исходным кодом . [21] [22]
OpenJDK имеет сравнительно строгие процедуры принятия вкладов кода: каждый предложенный вклад должен быть рассмотрен другим коммиттером OpenJDK, а участник должен подписать Соглашение Sun/Oracle Contributor Agreement (SCA/OCA). [23] Предпочтительно, чтобы также был тест jtreg [24], демонстрирующий, что ошибка была исправлена. Первоначально процесс отправки внешних патчей был медленным [25] и до сентября 2008 года коммиты в кодовую базу делали только инженеры Sun. [26] Процесс улучшился, и с 2010 года [обновлять]простые патчи и бэкпорты из OpenJDK 7 в OpenJDK 6 могут выполняться в течение часов, а не дней. [27]
В 2011 году впервые был выпущен неофициальный порт OpenJDK 6.0 на OS/2. [28] Этот порт включен в производную от OS/2 ArcaOS . [29]
25 сентября 2013 года Microsoft и Azul Systems объединились для создания Zulu, [30] сборки OpenJDK для пользователей облака Windows Azure. Zulu доступен для бесплатной загрузки с сайта сообщества Zulu.org. Также можно получить Zulu на Amazon Web Services [31] через Canonical's Juju Charm Store, [32] Docker Hub, [33] и репозитории Azul Systems. Azul вносит исправления ошибок и улучшения в проект OpenJDK и имеет в штате несколько коммиттеров проекта. [34] Red Hat оставила руководство OpenJDK 6 в начале 2017 года, и затем это перешло к Azul Systems. [35] [36]
С апреля 2016 года на GitHub в проекте ojdkbuild [37] имеются неподдерживаемые общественные сборки OpenJDK для Microsoft Windows , которые выпускаются в ногу с обновлениями для Oracle JDK. Начиная со сборки 8u151, MSI-установщик предлагает дополнительный компонент для использования Java Web Start на основе проекта IcedTea-Web .
В 2020 году был выпущен порт OpenJDK 8 на OpenVMS на платформе Itanium . [38]
Количество внешних вкладов в OpenJDK растет с момента начала проекта. OpenJDK 11, выпущенный в сентябре 2018 года, получил 20% внешних исправлений [39] и принес 17 новых JEP (функций), из которых 3 были предоставлены сообществом. А именно, JEP 315: «Улучшение внутренних функций Aarch64» (предоставлено BellSoft), JEP 318: «Epsilon: A No-Op Garbage Collector» (предоставлено Red Hat) и JEP 331: «Профилирование кучи с низкими накладными расходами» (предоставлено Google). [40]
11 октября 2010 года IBM , крупнейший участник проекта Apache Harmony , решила присоединиться к Oracle в проекте OpenJDK, фактически переместив свои усилия с Harmony на OpenJDK. [41] [42] Боб Сьютор, глава отдела Linux и открытого исходного кода IBM, написал в блоге, что «IBM перенесет свои усилия по разработке с Apache Project Harmony на OpenJDK». [43]
12 ноября 2010 года Apple Inc. (всего через три недели после прекращения поддержки собственного порта Java Runtime [44] ) и Oracle Corporation анонсировали проект OpenJDK для Mac OS X. Apple предоставит большую часть ключевых компонентов, инструментов и технологий, необходимых для реализации Java SE 7 в Mac OS X, включая 32- и 64-разрядную виртуальную машину Java на базе HotSpot, библиотеки классов, сетевой стек и основу для нового графического клиента. [45]
11 января 2011 года был создан проект Mac OS X Port на OpenJDK, и Apple сделала первый публичный вклад кода в проект. Первоначальный вклад Apple был построен на порте OpenJDK BSD . [46]
В июле 2011 года SAP AG объявила, что SAP официально присоединилась к проекту OpenJDK. [47]
Проект OpenJDK производит ряд компонентов: наиболее важными из них являются виртуальная машина ( HotSpot ), библиотека классов Java и компилятор Java ( javac ).
Плагин веб-браузера и Web Start , которые являются частью Oracle Java , не включены в OpenJDK. Sun ранее указывала, что попытается открыть исходный код этих компонентов, но ни Sun, ни Oracle этого не сделали. [48] Единственными доступными в настоящее время бесплатными плагинами и реализациями Web Start по состоянию на 2016 год [обновлять]являются те, которые предоставлены IcedTea . [ требуется ссылка ]
OpenJDK 9+ поддерживает компиляцию AOT ( jaotc
) с использованием GraalVM (JEP 295). [49] Экспериментальный -XX:+EnableJVMCIProduct
флаг позволяет использовать Graal JIT (JEP 317). [50]
Первоначально OpenJDK был основан только на версии JDK 7 платформы Java. [51]
Начиная с JDK 10, усилия по созданию эталонной реализации платформы Java SE с открытым исходным кодом были перенесены в проект JDK. [52] В отличие от прошлых проектов выпуска JDK, которые выпустили только один релиз функции, а затем были прекращены, этот долгосрочный проект будет выпускать все будущие релизы функций JDK и будет выпускать релиз функции каждые шесть месяцев в соответствии со строгой, основанной на времени моделью. [53]
Поскольку Oracle больше не выпускает обновления для релизов с долгосрочной поддержкой (LTS) по разрешительной лицензии, другие организации начали публиковать собственные сборки, как на обычных, так и на долгосрочных условиях поддержки. [54] [55] [56] Многие дистрибутивы Linux предлагают собственные сборки через свой менеджер пакетов , включая Microsoft Windows .
Чтобы объединить OpenJDK в Fedora и других бесплатных дистрибутивах Linux , OpenJDK должен был быть собираемым с использованием только свободных программных компонентов. Из-за обремененных компонентов в библиотеке классов и неявных предположений в системе сборки, что JDK, используемый для сборки OpenJDK, был Sun JDK, это было невозможно. Чтобы добиться открытости, Red Hat начала проект IcedTea в июне 2007 года. [81] Он начал свою жизнь как гибрид OpenJDK/ GNU Classpath , который мог использоваться для начальной загрузки OpenJDK, заменяя обременения кодом из GNU Classpath. [82] [83]
5 ноября 2007 года Red Hat подписала как Соглашение участника Sun, так и Лицензию сообщества OpenJDK TCK . [84] Одним из первых преимуществ этого соглашения является более тесное соответствие проекту IcedTea, который объединяет Fedora , дистрибутив Linux, и JBoss , сервер приложений, технологии в среде Linux. IcedTea предоставила бесплатные программные альтернативы для нескольких оставшихся проприетарных разделов в проекте OpenJDK.
В мае 2008 года дистрибутивы Fedora 9 [15] [85] и Ubuntu 8.04 [86] включали IcedTea 6, полностью основанный на свободном и открытом исходном коде. [87] Fedora 9 была первой версией, поставляемой с IcedTea6, основанной на исходных кодах OpenJDK6 от Sun, а не OpenJDK7. Она также была первой версией, в которой для имени пакета использовался OpenJDK (через соглашение о товарном знаке OpenJDK [88] ) вместо IcedTea. [15] Ubuntu также первой упаковала IcedTea7 [89] до того, как позже перешла на IcedTea6. Пакеты для IcedTea6 были также созданы для Debian и включены в Lenny . 12 июля 2008 года Debian принял OpenJDK-6 в нестабильную ветку, [90] [91] а позже он был включен в стабильную ветку . [92] OpenJDK также доступен в openSUSE , [93] Red Hat Enterprise Linux и производных RHEL, таких как CentOS . [94]
В июне 2008 года Red Hat объявила, что упакованные двоичные файлы для OpenJDK на Fedora 9 , собранные с использованием IcedTea 6, прошли тесты Technology Compatibility Kit и могут претендовать на статус полностью совместимой реализации Java 6. [95] В июле 2009 года двоичная сборка IcedTea 6 для Ubuntu 9.04 прошла все тесты совместимости в Java SE 6 TCK . [96]
С августа 2008 года OpenJDK 7 можно использовать на macOS и других вариантах BSD . [97]
В Android Nougat OpenJDK заменил ныне прекращенный Apache Harmony в качестве библиотек Java в исходном коде мобильной операционной системы . Google находился в судебном споре с Oracle из-за претензий на нарушение авторских прав и патентов из-за использования повторных реализаций защищенных авторским правом API Java через Harmony. Заявив также, что это изменение было сделано для создания более согласованной платформы между Java на Android и другими платформами, компания признала, что переключение было мотивировано судебным иском, утверждая, что Oracle разрешила использовать код OpenJDK, лицензировав его по GPL. [98]
Фицсиммонс обновил исходные страницы заметок о выпуске Fedora 9, чтобы отразить, что Fedora 9 будет поставляться с OpenJDK 6 вместо реализации OpenJDK 7 в IcedTea. Fedora 9 (Sulphur) должна выйти в мае 2008 г.
перенесет свои усилия по разработке из Apache Project Harmony в OpenJDK. Для тех, кто хочет сделать то же самое, мы будем работать вместе, чтобы сделать переход максимально простым. IBM по-прежнему будет активно участвовать в других проектах Apache.
Oracle и Apple анонсировали проект OpenJDK для Mac OS X. Apple предоставит большую часть ключевых компонентов, инструментов и технологий, необходимых для реализации Java SE 7 на Mac OS X, включая 32- и 64-разрядную виртуальную машину Java на базе HotSpot, библиотеки классов, сетевой стек и основу для нового графического клиента. OpenJDK сделает технологию Java от Apple доступной разработчикам с открытым исходным кодом, чтобы они могли получить доступ и внести свой вклад.
очень рад сообщить вам, что сегодня мы сделали первый публичный вклад кода в проект OpenJDK для Mac OS X. Этот первоначальный вклад основывается на тяжелой работе над портом BSD и изначально имеет ту же функциональность. Сегодняшний вклад просто изменяет процесс сборки для создания универсального двоичного файла и создает пакет .jdk, который распознается настройками Java и логикой обнаружения JVM в Mac OS X.
очень рад, что с сегодняшнего дня SAP подписала Oracle Contributor Agreement (OCA). Это означает, что с немедленным вступлением в силу разработчики SAP JVM могут официально присоединиться к обсуждениям в различных списках рассылки OpenJDK и вносить исправления и улучшения в проект.
представляет новый инструмент под названием 'jaotc', который использует Graal в качестве бэкэнда (для генерации кода)
дала это обещание, и мы планируем его сдержать. Но за шесть месяцев с момента объявления в ноябре 2006 г. стало ясно, что сделать это гораздо сложнее, чем просто изменить лицензию и опубликовать исходный код.
{{cite web}}
: CS1 maint: бот: исходный статус URL неизвестен ( ссылка )