Для Java наступает эпоха перемен. Теперь версии JDK будут выпускать не по мере появления новых функциональных возможностей, а по расписанию. У такого подхода есть свои плюсы и минусы, но как такие перемены отразятся на JDK 8? Саймон Риттер, известный Java-евангелист, Java-чемпион и заместитель технического директора компании Azul Systems объясняет, почему «новая Java по расписанию» — это выбор между стабильностью, безопасностью и стоимостью.
К чему приведёт частый выпуск новых версий JDK - 1
В 2018 году мир Java ждут существенные перемены. Как и анонсировали в прошлом году, мы переходим к выпуску версий JDK по расписанию, вместо выпуска версий по мере появления новых функциональных возможностей. Это отличная новость, ведь теперь новые возможности будут включаться в выпуски по мере готовности, и разработчики будут получать к ним доступ гораздо быстрее. Выпуск JDK 10 запланирован на март, и мы уже вошли во вторую фазу исправления ошибок, так что все идёт в соответствии с планом. Запрос на спецификацию Java (JSR) уже находится в процессе активной разработки и доступен для открытого обсуждения. Уже есть даже предложения по улучшению JDK (JEP'ы), нацеленные на JDK 11. Складывается впечатление, что у Java дела обстоят замечательно.

Времена меняются

Однако с этим распорядком выхода версий связано немало других изменений, которые проявят себя в этом году, и могут оказаться далеко не такими приятными. За 22 с половиной года мы успели привыкнуть, что у Java, как платформы, есть три основополагающих свойства, связанные непосредственно со способом её поддержки.
  1. Стабильность. Ранее возможности, добавляемые вместе с новым выпуском JDK, хотя и были тщательно протестированы, требовали проверки в промышленной эксплуатации. Это помогало обнаружить недостатки, требующие исправлений. Чтобы пользователи могли продолжать работу со стабильными сборками во время тестирования новой, обновления всегда частично перекрывались по времени.

    Если взглянуть на несколько последних выпусков, начиная с JDK 6, мы увидим, что обновления для JDK 5 продолжали выходить на протяжении еще почти 3 лет (2 лет и 11 месяцев, если быть точным). С появлением JDK 7, общедоступные обновления для JDK 6 выходили на протяжении года и 9 месяцев. А обновления для JDK 7 выходили в течение 13 месяцев после выпуска JDK 8.


  2. Безопасность. Команды разработки и поддержки OpenJDK, компания Oracle, а до них – Sun Microsystems (компания-создатель Java, прим. ред.) всегда ставили безопасность платформы во главу угла. Как вы помните, Java была изначально предназначена для мобильных устройств (в частности, КПК Star7).



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


  3. Нулевая стоимость. Одна из самых замечательных черт Java – то, что она всегда была бесплатной платформой, еще даже до выпуска её в виде ПО с открытым исходным кодом в 2006 году. Существовали определенные ограничения на то, где можно использовать Java без лицензионных отчислений, но это всегда касалось мобильных и встроенных приложений, для десктопных клиентов и серверов предприятий актуальная версия Java всегда была бесплатной. Одно из уже проводимых в жизнь изменений в JDK – выпуск исполняемых файлов OpenJDK под лицензией GPLv2 с исключением "Classpath". Эта лицензия не налагает никаких ограничений на возможности развертывания среды выполнения Java.

Однако изменения в способе разработки и выпуска JDK требуют тщательного продумывания планов по миграции приложений на новые версии Java. При этом новом распорядке выхода версий по расписанию, усилия по обеспечению доступности обновлений для множества предыдущих выпусков могут оказаться неприемлемыми. Чтобы удовлетворить потребности двух несовместимых групп пользователей (тех, кто требует новые возможности побыстрее и тех, кому важнее долгосрочная стабильность), корпорация Oracle приняла решение перейти на модель долгосрочной поддержки (LTS). Конкретные версии JDK будут рассматриваться как LTS-выпуски, то есть будут получать обновления в течение трех лет. Все остальные, промежуточные, выпуски называются Feature-выпусками и получают обновления в течение лишь 6 месяцев. Для синхронизации с этой новой системой, JDK 8 было классифицировано как LTS-выпуск. Следующий выпуском будет JDK 11, запланированный на сентябрь 2018 г. Важнейшее изменение, привносимое этой новой моделью: обновления между выпусками больше не будут перекрываться по времени. Я специально выделил этой жирным курсивом, что это было совершенно ясно. Вот рисунок, демонстрирующий доступность обновлений для выпусков JDK вплоть до JDK 19.
К чему приведёт частый выпуск новых версий JDK - 2
На рис.: Java SE Lifecycle – 5+ Year timetable Public updates zero overlap ("support Cliff") Oracle Commercial Support Oracle Extended Commercial Support
Жизненный цикл Java SE – расписание на 5+ лет Общедоступные обновления нулевое перекрытие по времени Общедоступные исполняемые файлы от Oracle (без поддержки) Коммерческая поддержка Oracle Расширенная коммерческая поддержка Oracle
Прямое следствие этих изменений: платформа Java по-прежнему стабильна, безопасна и бесплатна, но теперь из этих трёх свойств необходимо выбрать два. В будущем, при развертывании Java, все три свойства одновременно не будут доступны.

Поясню немного подробнее

Допустим, вас заботит безопасность (так и должно быть), но вы не хотите тратить деньги. В этом случае вам нужно переходить на новые версии JDK сразу же после их выпуска. В случае, когда поддержка не перекрывается по времени (Feature- и LTS-выпуски), вам придется это делать, чтобы получить новые исправления безопасности. К сожалению, без перекрытия по времени, придется сразу переходить на выпуски JDK, которые еще не были протестированы в промышленной эксплуатации, так что вы потеряете былую стабильность. Другой вариант: можно выбрать стабильность при нулевой стоимости. Опять же, это возможно: все, что вам нужно делать, это продолжать использовать предыдущую версию LTS после выхода новой. Вы получаете привычную стабильность, ничего не должны платить, но "заплат" безопасности не получите, поскольку для этого выпуска они более не доступны. Наконец, если вам нужны стабильность и безопасность, придется заплатить. Вы можете продолжать использовать предыдущий LTS-выпуск, но доступ к исправлениям безопасности и ошибок будет доступен только по коммерческому контракту на поддержку.

И небольшой рекламный блок от автора:)

Компания Azul (моя компания) создала набор исполняемых файлов OpenJDK под маркой Zulu Enterprise, скомпонованный из исходного кода, протестированный при помощи тестов TCK/JCK и даже проанализированный с помощью разработанных нами утилит, чтобы убедиться в отсутствии повреждений открытого исходного кода вследствие неправильных заголовочных файлов. Мы предоставляем возможность бесплатного скачивания актуальной его версии, а также коммерческую поддержку для желающих. Мы недавно начали предлагать новый набор вариантов поддержки для Zulu, нацеленный на предоставление заказчикам максимальной гибкости. Мы хотим предоставить пользователям возможность такой миграции на новую версию JDK, которая подходила бы для потребностей их бизнеса и заказчиков. Для этого, мы предоставляем три варианта поддержки:
  1. Краткосрочная поддержка (short-term support, STS). STS предоставляет пользователям самый быстрый доступ к новым возможностям Java, с достаточной поддержкой для "гладкого" перехода на более новые выпуски JDK. Zulu Enterprise предоставляет для STS-выпусков доступ к исправлениям ошибок, обновлениям безопасности и другим исправлениям по мере необходимости ("поддержка промышленной эксплуатации") на 12 месяцев плюс 6 месяцев дополнительной поддержки, ориентированной на консультационную поддержку и помощь пользователям в миграции на более новую версию JDK ("расширенная поддержка"). Это составляет 18-месячный жизненный цикл.

  2. Среднесрочная поддержка (middle-term support, MTS). MTS-выпуски позволяют использовать в промышленной среде новые возможности, доступные в feature-выпусках, не дожидаясь нового LTS-выпуска. Azul планирует по одному MTS-выпуску в год между LTS-выпусками и обеспечивает поддержку промышленной эксплуатации на 18 месяцев после даты выпуска следующего общедоступного LTS. Это гарантирует перекрытие по времени и "гладкий" переход при развертывании в промышленной эксплуатации. После окончания поддержки промышленной эксплуатации предоставляется дополнительные 12 месяцев расширенной поддержки.

  3. Долгосрочная поддержка (long-term support, LTS). Она предоставляется для выпусков, которые сообщество разработчиков OpenJDK рассматривает как LTS, и обеспечивает 8-летнюю поддержку промышленной эксплуатации с дополнительными двумя годами расширенной поддержки.
Вот еще один рисунок, чтобы было понятнее.
К чему приведёт частый выпуск новых версий JDK - 3
На рис.: Java SE Lifecycle – 5+ Year timetable Oracle Publicly available binaries (unsupported) Oracle Commercial Support Oracle Extended Commercial Support Azul Zulu Production Commercial Support Azul Zulu Extended (Passive) Commercial Support
Жизненный цикл Java SE – расписание на 5+ лет Общедоступные исполняемые файлы от Oracle (без поддержки) Коммерческая поддержка Oracle Расширенная коммерческая поддержка Oracle Коммерческая поддержка промышленной эксплуатации от Azul Zulu Расширенная (пассивная) коммерческая поддержка от Azul Zulu
Если вы сейчас используете JDK 8 без коммерческого контракта на поддержку и обеспечиваете стабильность и безопасность своей системы за счет общедоступных обновлений, вам имеет смысл задуматься о том, что вы будете делать, начиная с сентября. Azul стремиться помочь вам в этом, так что не стесняйтесь обратиться к нам, если вам нужна поддержка.

Выводы

В этом году меняется несколько аспектов платформы Java, большая часть – к лучшему. Более быстрый доступ к новым возможностям, выпуск под открытой лицензией таких утилит, как Flight Recorder и Mission Control, выпуск исполняемых файлов OpenJDK под лицензией GPLv2 с исключением "Classpath". Печальная правда, однако, заключается в том, что привычная щедрая бесплатная поддержка платформы Java уходит в прошлое. Java по-прежнему стабильна, безопасна и бесплатна. Какие два из этих трёх качеств наиболее важны для вас и ваших пользователей?
К чему приведёт частый выпуск новых версий JDK - 4

Об авторе

Саймон Риттер – заместитель технического директора компании Azul Systems. Саймон занимается IT-бизнесом с 1984 года и имеет степень бакалавра наук по физике Брюнельского университета в Великобритании.

Саймон попал в Sun Microsystems в 1996 году и проводил время как за разработкой Java, так и консультациями. С 1999 года он занимался демонстрацией Java-технологий разработчикам, с упором как на базовую платформу Java, так и клиентские и встроенные приложения. Сейчас, в компании Azul Systems, он продолжает помогать людям лучше понимать Java и продукты Azul для JVM. Вы можете подписаться на него в Twitter: @speakjava.