Что такое OpenJDK

Что такое OpenJDK:


Февраль 24, 2022


Почему он эффективен и как с ним работать

OpenJDK — это среда разработки языка Java, созданного 26 лет назад. В мире, где каждый год появляются новые технологии, четверть века — это солидный возраст. А самому проекту OpenJDK, в рамках которого развивается Java, в этом году исполнится 15 лет. По логике, Java давно уже должны были оттеснить на задний план более современные решения, однако он до сих пор остается одним из самых популярных языков. В чем секрет?

В этой статье мы постараемся дать ответ на этот вопрос, разберем процесс непрерывного улучшения OpenJDK, поговорим о разработке ПО с открытым исходным кодом и узнаем, что делает Java уникальным языком программирования.

В чем секрет успеха Java и OpenJDK?

Рождение проекта OpenJDK

История Java началась в 1991 г., когда инженеры Sun Microsystems решили создать язык, свободный от ограничений C и C++ и предлагающий более понятные API. Прототип получил название Oak, но затем был переименован в Java.

В 1994 г. Java стала доступна для скачивания, а первый публичный релиз состоялся в 1995 г. и практически сразу получил поддержку в популярном тогда веб-браузере Netscape.

В 2006 г. Sun опубликовала исходный код виртуальной машины и компилятора Java HotSpot под лицензией GNU General Public License. В 2007 г. появился проект OpenJDK, в рамках которого версии Java 6 и 7 уже были выпущены с почти полностью открытым исходным кодом. В период с 2006 по 2008 гг. остававшиеся ранее закрытыми части кода Java постепенно были открыты полностью.

На данный момент код OpenJDK находится в свободном доступе. Над развитием проекта работает обширное сообщество, сосредоточенное вокруг компании Oracle. Существует множество дистрибутивов OpenJDK, включая Liberica JDK от BellSoft, исходный код которой тоже доступен каждому в соответствии с опенсорсным подходом к разработке ПО.

Принцип работы и преимущества OpenJDK

Создатели Java преследовали несколько целей:

  • Сделать Java простым и понятным объектно-ориентированным языком.
  • Обеспечить повышенную надежность и безопасность.
  • Организовать Java как архитектурно-нейтральный язык благодаря возможности портирования JVM на любую платформу.
  • Приложения, написанные на Java, должны обладать высокой производительностью.

Именно благодаря этим принципам OpenJDK сохраняет популярность, поэтому давайте подробно рассмотрим каждый их них и узнаем, как они влияют на жизнь разработчиков и конечных пользователей.

Java — архитектурно-нейтральный язык, а JVM портируется на любую платформу

Код Java не зависит от архитектуры: правильно написанное приложение запустится на любом устройстве: от ПК до современной микроволновки. Это стало возможным благодаря ключевому компоненту Java — JVM (Java Virtual Machine), среде исполнения приложений.

Обычно языки программирования компилируют код приложения в машинный код, уникальный для каждой платформы. Компилятор Java работает по-другому: он создает особый Java байткод, выполняемый Java Virtual Machine, которая может быть установлена в любой системе.

JVM, в свою очередь, использует динамический компилятор, компилирующий код во время исполнения приложения.

Такой подход позволяет запускать один и тот же код на разных платформах, практически без изменений. Таким образом, следуя инструкциям, вы можете написать программу один раз и запускать ее везде. Поэтому если вы когда-либо хотели поиграть в Тетрис на сенсорном экране вашей микроволновки, именно Java поможет вам легко этого добиться!

А если говорить серьезно, подход «напиши один раз, запускай везде» устраняет проблему совместимости ваших приложений с разными архитектурами, ОС, драйверами или аппаратным обеспечением. Просто используйте виртуальную машину, предназначенную для конкретной платформы. У современных Java дистрибутивов широкий диапазон конфигураций, который постоянно дополняется новыми вариантами.

Java — простой и понятный объектно-ориентированный язык

В наше время Java уже не может похвастаться самым простым синтаксисом. Однако в скором будущем появится много новых фич (статья на английском языке), которые упростят написание и разбор кода на Java. И все же на момент создания синтаксис Java был гораздо более понятным, чем у других языков программирования. Спецификация языка Java (Java Language Specification) — это набор правил, обеспечивающих соответствие всех инноваций одному стандарту и принципам Java. Все API совместимы друг с другом и со спецификацией Java, поэтому вы не только можете писать собственный код, не беспокоясь о совместимости, но и использовать код других разработчиков. Кроме того, в Java постоянно появляются новые технологии, такие как pattern matching for switch и Vector API, упрощающие написание кода.

Java связана с повышенной надежностью и безопасностью

Поскольку OpenJDK — это опенсорсный проект, любой разработчик может проверить код на предмет уязвимостей или улучшить его безопасность. Таким образом, новые обнаруженные уязвимости своевременно устраняются в рамках ежеквартальных CPU (Critical Patch Update) релизов. В случае Liberica JDK, наша команда техподдержки вносит внеплановые патчи безопасности.

А учитывая широкий выбор инструментов для мониторинга безопасности, таких как сканеры безопасности, вы можете быть уверены, что любые попытки нарушить безопасность ваших приложений обернутся провалом.

Приложения на Java высокопроизводительны

Существует много способов повышения производительности OpenJDK приложений. Например, компиляторы внутри JVM оптимизируют код для достижения пиковой производительности. Если для вас более важно время запуска, используйте технологию нативного образа GraalVM, которая упаковывает приложения вместе с рантаймом в один исполняемый бинарный файл.

Свяжитесь с нашими инженерами, чтобы узнать, почему Java идеально подходит для ваших разработок.

Как развивается OpenJDK

OpenJDK как космодром для запуска ракет в открытый космос

Язык программирования можно сравнить с космодромом, с которого запускают ракеты-носители. Разработчики, создающие приложения (ракеты) ожидают от инфраструктуры слаженной и бесперебойной работы. Любая ошибка в работе среды исполнения может привести к тому, что приложение (даже написанное идеально) не запустится, и компания понесет серьезные убытки.

Итак, почему же разработчики отдают предпочтение OpenJDK? Потому что это космодром, обслуживаемый профессионалами из надежной и обширной команды.

Давай узнаем, как именно ведутся работы в OpenJDK.

Процесс обновления OpenJDK

Разработка OpenJDK ведется в нескольких направлениях:

  • устранение багов;
  • внедрение новых фич и подготовка устаревших фич к удалению;
  • развитие проектов параллельно с основной ветвью.

Давайте рассмотрим все три пункта подробнее.

Устранение багов

Сейчас разработка OpenJDK ведется в GitHub, поэтому процесс в основном автоматизирован и протекает гораздо быстрее, чем раньше.

Для того, чтобы сообщить о баге, разработчик OpenJDK заводит баг в багтрекере и описывает обнаруженную ошибку, которой затем присваивается номер. Если у него нет аккаунта, то он передает информацию о баге разработчику, который может завести баг.

Если разработчик хочет устранить баг, он создает форк (копию) репозитория. В этом форке он исправляет необходимую часть кода. После успешного тестирования разработчик создает pull request для интеграции изменений из локального репозитория.

Затем проводится тестирование изменений, и в случае удовлетворительных результатов они внедряются в основную ветвь OpenJDK и применяются в следующем релизе.

Такая система позволяет любому разработчику внести вклад в поиск и устранение багов.

Внедрение новых фич и подготовка устаревших фич к удалению

Новые фичи обычно внедряются поэтапно.

Сначала разработчики предлагают фичу в виде черновика JEP (draft). Член Управляющего совета, лид OpenJDK, решает, стоит ли брать эту фичу в работу.

После утверждения draft обновляют, внося необходимое описание и план базовой реализации, и таким образом он становится JEP (JDK Enhancement Proposal, предложение об улучшении JDK). JEP проходит множество процедур перед окончательным внедрением.

Процесс включения новой фичи аналогичен процессу исправления багов и ведется в форках проекта на GitHub. Этот процесс может растянуться на длительный срок, так как новые функции вводятся постепенно. В режиме Preview акцент делается на семантике и синтаксисе, в режиме Incubator вносят изменения в API. Фича может находиться в режиме preview или incubator в течение максимум трех релизов перед окончательным внедрением. Это позволяет разработчикам протестировать новую функцию и посмотреть, как она работает в коде, чтобы не нарушить работу приложений. Обычно после двух previews или incubators новую функцию либо добавляют в релиз в итоговой форме, либо удаляют, если ее расценили как небезопасную, концептуально неправильную или непроизводительную.

Проекты вне основной ветви

Некоторые проекты, оказывающие существенное влияние на функционирование Java, разрабатываются за пределами основной ветви. В случае успешного завершения они сливаются с основным проектом и значительно меняют язык, но чтобы довести их до совершенства, требуется много времени. При необходимости разработчики могут самостоятельно внедрить их в используемый ими билд OpenJDK в текущем незаконченном состоянии для использования в своих приложениях. Со временем эти проекты становятся JEP и включаются в следующий релиз.

Изменения спецификации

Изменения спецификаций предлагаются и разрабатываются в формате JSR, Java Specification Request (запрос на изменение спецификации Java). Эти изменения подвергаются обзору и выносятся на голосование в Исполнительном комитете, в который входят компании и люди, определяющие направление усовершенствования технологий Java. BellSoft тоже входит в состав комитета (страница на английском языке) вместе с такими компаниями, как Alibaba, Amazon, IBM, Intel и Oracle.

График релизов

В рамках OpenJDK выходит три вида релизов:

  • Ежеквартальный CPU релиз, о котором мы упоминали выше. Он предназначен для своевременного устранения проблем безопасности и включает в себя исправления уязвимостей и багов.
  • Функциональный релиз — номерной релиз с новыми фичами, предназначенный для их тестирования. Благодаря этому релизу разработчики могут поэкспериментировать с новым функционалом, подготовить приложения к удалению фич, помеченных как устаревшие, и спланировать дальнейшую работу.
  • LTS (Long Term Support) релиз с долгосрочной поддержкой. Это тоже номерной релиз, в котором внедрены полностью протестированные изменения, и он поддерживается вендорами дольше всего. Такие релизы обычно используются для разработки и запуска приложений в корпоративной среде.

До выхода Java 9 в 2017 г., мажорный релиз иногда приходилось ждать до пяти лет. Сейчас Oracle придерживается нового графика выпуска JDK, в соответствии с которым LTS релизы выходят раз в два года. Java 17 — последняя LTS-версия на данный момент, а следующей будет Java 21 в сентябре 2023 г.

Новые билды Liberica JDK выходят одновременно с другими популярными дистрибутивами.

Почему open source лучше проприетарных решений

Нужно помнить, что OpenJDK — проект open source. Почему это так важно? Потому что все продукты с закрытым исходным кодом — это, по сути, черные ящики. Чисто теоретически, могут ли они быть безопаснее? Да. Но так же в теории они могут содержать большое количество уязвимостей, о которых никому не известно. Или никому, кроме хакеров, использующих баги для кражи денег или информации.

В случае с open source, это невозможно. Вы всегда знаете, что работает, а что нет и почему. Конечно, злоумышленники исследуют код, но то же самое делают и тысячи разработчиков и специалистов по информационной безопасности! Все обнаруженные уязвимости быстро устраняются. Все криптографические алгоритмы и инструменты безопасности можно протестировать. Open source — это то, к чему пришла ИТ-индустрия за несколько десятков лет, поэтому опенсорсная разработка успела себя зарекомендовать. Java — яркий тому пример.

И еще кое-что. Если вы думаете, что можете улучшить OpenJDK — никто не может вам помешать это сделать!

Из этого рождается следующий вопрос.

Почему в OpenJDK столько поставщиков и дистрибутивов?

Многие компании создают собственные сборки OpenJDK на базе исходного кода, включая BellSoft, поставляющую Liberica JDK. Почему существует столько поставщиков и чем они различаются?

Ответ прост: функционалом, безопасностью и поддержкой. Все Java Development Kits, включая Oracle Java SE, основаны на OpenJDK. Все они могут обрабатывать код Java надлежащим образом, и в нормальных условиях они работают примерно одинаково. Различия становятся заметны, когда что-то идет не так.

Если вы, используя OpenJDK в корпоративных разработках, столкнулись с проблемой, с ней должны разобраться эксперты. Для этого вам нужно либо выделить команду разработчиков специально для поддержания стабильности OpenJDK, что стоит немалых денег, либо обратиться за помощью к третьей стороне. В случае OpenJDK вам нужно пройти все описанные выше этапы для устранения бага или направить запрос и ждать ответа.

Поставщики дистрибутивов как раз и нужны для того, чтобы оказывать поддержку своим клиентам. Некоторые делают это оперативно и эффективно, в случае с другими приходится долго общаться с менеджерами и юристами, из-за чего вы теряете время и деньги. Мы в BellSoft предоставляем экспертную поддержку и выдаем SLA по запросу в течение часа. Мы также поддерживаем старые версии Java, включая версии 6 и 7.

Еще одно преимущество сборок OpenJDK, включая Liberica JDK, заключается в дополнительной повышенной безопасности и производительности, благодаря чему ваши приложения максимально защищены.

Если у вас остались вопросы касательно Liberica JDK, скачайте технический документ, перейдя по ссылке ниже. В нем содержится подробная информация о нашем дистрибутиве.

Заключение

OpenJDK — это мощная платформа для разработки приложений, и с годами она становится только лучше!

Присоединяйтесь к огромному сообществу разработчиков, ежедневно использующих Java в своей работе. Все мы трудимся над улучшением языка, а это лучшая гарантия того, что Java будет процветать еще много лет.

Author image

Дмитрий Чуйко

Старший инженер по производительности BellSoft

 Twitter

 LinkedIn

BellSoft LTD info@bell-sw.com BellSoft LTD logo Liberica Committed to Freedom 199 Obvodnogo Kanala Emb. 190020 St. Petersburg RU +7 812-336-35-67 BellSoft LTD 199 Obvodnogo Kanala Emb. 190020 St. Petersburg RU +7 812-336-35-67 BellSoft LTD 111 North Market Street, Suite 300 CA 95113 San Jose US +1 702 213-59-59