Споры об актуальности Java продолжаются. Одни твердят о том, что она отживает свое и на смену приходят более усовершенствованные языки. Другие не соглашаются, ссылаясь на количество специалистов, которые из года в год выбирают Java своим профильным навыком. В любом случае, нельзя игнорировать тот факт, что большинство уже существующего программного обеспечения написаны на Java, да и заказчики, как внутренние, так и внешние, продолжают его использовать. В такой ситуации любые новые внедрения и глобальные новости о Java обходить стороной не стоит. Питер Верхас, ведущий разработчик и архитектор ПО в швейцарском офисе EPAM, поделился своим анализом того, какие изменения вводит Oracle и как это повлияет на нас с вами.
В последнее время в Java произошло много изменений, и похоже, что коренным образом изменилось то, как язык будет развиваться дальше. Хорошо, что в языке появляются новые возможности. Но это не единственные перемены. Oracle внесла существенные изменения в модель поддержки и цикл обновления версии Java, которые выпускает эта компания. Все это привело к возникновению большой путаницы, причиной которой стали перемены, дезинформация и непонимание. В этой статье я резюмирую все, что нужно знать пользователям о нововведениях, прежде чем они начнут верить в наступление апокалиптического конца Java-экосистемы.
Однако вначале нужно прояснить некоторые моменты.
Oracle владеет Java, но Java — это не Oracle. Исходный код Java выпущен в лицензии GPLv2.0 с classpath exception. На деле это означает, что кто угодно может использовать и вносить изменения в исходный код языка бесплатно. Есть только одна вещь, которую запрещено делать всем, включая Oracle: вносить изменения в код и публиковать его с закрытой исходной лицензией. Это означает, что коммерческое использование Java, только платной версии, юридически невозможно, даже если этого потребуют маркетинговые или бизнес-интересы Oracle. Но я все-таки технический специалист. Для того, чтобы разобраться с этим моментом на 100% лучше всего загрузить текст GPLv2-лицензии и проконсультироваться с юристом.
Oracle – не единственная компания, которая выпускает сборки Java и занимается поддержкой, есть много других вендоров. Конечно, Oracle, как основной игрок, инвестирующий больше всего в развитие языка и инструментов, является самой престижной коммерческой компанией по его поддержке.
Фактически, у Oracle нет эксклюзивных прав не только на исходный код Java. Процесс развития, изменения в определении Java, API – все это находится в руках Java Community Process, вступить в которое может каждый. Для частных лиц это и вовсе бесплатно. Членами этой группы являются такие компании, как Intel, IBM, Credit Suisse, Software AG, RedHat. Именно они определяют будущее Java, а не Oracle. И у них есть свое мнение, как мы могли видеть в прошлый раз, когда утверждение финальной версии JPMS происходило не совсем гладко.
После этого вступления, в котором мы определились с тем, что Oracle “владеет” Java, но не является Java, давайте посмотрим на те изменения в процедуре поддержки развития и дорожной карте Java, которые представила Oracle.
Oracle объявила, что, начиная с JDK11, Oracle JDK перестанет быть бесплатным. И поначалу это заявление пугает. То, чем мы привыкли пользоваться бесплатно, больше таковым не будет. На практике то, что “мы должны платить” почти логично. Но небольшое слово “почти” стоит там не зря. Если есть какой-то сервис, которым мы пользовались, и он перестал быть бесплатным, у нас есть две опции: платить, чтобы пользоваться дальше, или больше не пользоваться. Стоит ли и дальше использовать Oracle JDK или мы можем перейти на что-то другое? Вот в чем вопрос на самом деле.
Чтобы ответить на него, нужно понять, что из себя представляет Oracle JDK, и какие есть альтернативы. Другое существенное изменение касается циклов выхода новых версий и понятия долгосрочной поддержки (англ. — Long Term Support или LTS). Для начала мы обсудим изменения в цикле выхода новых версий, затем путаницу с Open JDK и в конце — структуру LTS.
Java появилась в 1996 году. Первые несколько версий Java выходили более или менее регулярно.
Однако, взглянув на диаграмму, мы видим, что версия Java 5.0 вышла с задержкой. Java 6 также не спешила за предыдущей версией, и самый большой перерыв был между Java 6 и Java 7. Даже после этого новые версии выпускались не очень часто. Java 8 получила много новых функций, но ценой этому были два года ожидания. Похожим образом обстояли дела с Java 9, которая хоть и претерпела еще больших изменений, но ждать себя заставила целые три года.
Проблема таких циклов выхода обновлений заключается в том, что язык, который сам по себе конкурирует на постоянно развивающемся рынке языков, не может представлять новые функции достаточно быстро. Если на развитие модульной системы уходит три года, то ничто не может ускорить процесс. Тем не менее, некоторые вещи, которые появились в Java 9 могли быть выпущены раньше. Но они попросту не могли попасть к разработчикам, так как более ранних релизов не было. Уже доступные функции должны были ждать появления самой медленно разрабатываемой в этом релизе функции. Это одна из проблем классической каскадной модели разработки.
Oracle решила двигаться в духе agile и делать версии каждые шесть месяцев. Начиная с сентября 2017 года, новые релизы Java можно ожидать в марте и сентябре. Если какая-то функция будет не готова к этим датам, ее перенесут в следующий релиз, но остальные по мере готовности будут попадать в свежайшие.
В целом, это нормально. С одной стороны, Java-сообщество и разработчики должны быть этому рады. С другой стороны, остается вопрос поддержки. Кто может поддерживать такое количество версий Java? Именно поэтому была представлена долгосрочная поддержка (LTS), о которой мы скоро поговорим. Но сначала еще надо прояснить, что же такое Oracle JDK и OpenJDK.
Вплоть до Java 9 существовал бинарный выпуск Java сборки Oracle (Sun Microsystems), который использовался в производственной среде большинством разработчиков и компаний. Эта бинарность была основана на открытом исходном коде Java и содержала некоторые улучшения – дополнительные корпоративные инструменты, такие как Java Flight Recorder, Java Mission Control и некоторые другие функции вроде Application Class-Data Sharing.
Сборка OpenJDK создавалась из открытого исходного кода Java, в котором никаких улучшений не было. Эту сборку Java использовали те, кто хотел поэкспериментировать со свойствами Java, изменить код или просто по каким бы то ни было причинам были приверженцами исходного открытого кода. Хотя вы должны были загрузить исходный код и скомпилировать его для себя.
Начиная с Java 9, Oracle стала предоставлять OpenJDK параллельно с Oracle JDK. Также компания анонсировала, что она хочет сократить разрыв между характеристиками, производительностью и стабильностью двух версий, и как только это произойдет, сделать Oracle JDK платной. На тот момент и OpenJDK, и Oracle JDK были доступны бесплатно как бинарные сборки от Oracle. Это были Java 9 и Java 10.
После выпуска Java 11 это прекратилось. OpenJDK по-прежнему доступна бесплатно, но Oracle JDK для производственных систем стала платной. Существенной разницы между двумя версиями больше нет. У коммерческой версии есть инсталлятор, в то время как у OpenJDK – только ZIP-файл. Есть и другие различия, но на них пользователям Java не стоит обращать внимание. Технически детализированный список отличий описан Дональдом Смитом, старшим директором управления продуктами в Oracle в этой статье.
Более того, Oracle JDK по-прежнему бесплатен для других, даже коммерческих пользователей. Oracle JDK можно свободно использовать для:
• разработки
• тестирования
• прототипирования
• демонстрации
Вы можете использовать OpenJDK для других целей или заплатить Oracle и использовать Oracle JDK и получить поддержку. Поддержка — это хорошо.
Переход на новый цикл выпуска версий через каждые полгода поднял вопрос поддержки. Никто не может поддерживать такое количество версий с выгодой для себя. Если вы установили Java 6 для своего приложения в 2007 году, вы можете получить поддержку от Oracle через 11 лет. Выпуск новых версий каждые полгода подразумевает поддержку 22 разных версий одновременно. Это стало бы тяжелым бременем для Oracle или любого другого вендора, который бы решил поддерживать все релизы.
Стратегия Oracle заключается в том, чтобы каждые три года определять один релиз, который получит долгосрочную поддержку. Первым таким релизом стал Java 11, и он будет поддерживаться вплоть до 2026 года. В течение этого времени в сентябре 2021 года также выйдет Java 17, которая получит долгосрочную семилетнюю поддержку, в соответствии с текущими планами. Все прочие, так называемые функциональные релизы, будут поддерживаться только до выхода следующей версии.
Обратите внимание, что поддержка распространяется только на Oracle JDK и только для тех, кто оплатил JDK и поддержку. Но не думайте, что вас бросили на произвол судьбы, если планируете использовать OpenJDK. Для нас ничего не изменилось. Если вы не платили за поддержку до этого, вы ее и так не получали. Если платили, то будете продолжать оплачивать и получите эту поддержку.
Вот ссылка на статью Oracle с прогнозами конца жизненного цикла для разных версий.
Будут ли выпущены новые версии для OpenJDK? Конечно. Ранее выходили обновления открытого исходного кода Java, в котором исправлялись ошибки, хотя гарантий того, что они будут выходить, не было. Это происходило просто потому, что в этом были заинтересованы все участники. В дальнейшем все останется по-старому, Java будет получать новые версии, новые сборки.
Я вижу три основные стратегии выбора, какую версию Java лучше установить:
Стратегии также можно комбинировать, устанавливая разные версии Java на разных машинах. Независимо от того, что вы выберете, вы можете загрузить бинарные версии предварительной сборки со следующих сайтов:
Хотя это не бинарная загрузка, но она тесно связана с загрузкой Oracle JDK – вы также можете посетить веб-сайт www.oracle.com/java/java-se-subscription.html, чтобы получить Oracle JDK и поддержку в одном пакете. Детальная информация о ценах доступна на www.oracle.com/us/corporate/pricing/price-lists/java-se-subscription-pricelist-5028356.pdf. Для нетерпеливых скопировал сюда информацию о ценах из официального Oracle FAQ:
“Стоимость десктопной версии составляет $2.50 за пользователя в месяц, или ниже при наличии многоуровневых скидок за объем. Дополнительную информацию смотрите в прейскуранте цен на подписку Oracle Java SE”.
Что же вам делать? Использовать OpenJDK или платить за Oracle JDK? Это вопрос рентабельности и того, насколько важна для вас поддержка от Oracle. Если ваш бизнес не может себе позволить поддержку Oracle JDK, потому что вы стартап, восходящая звезда с блестящей идеей продукта, но дырой в кармане, значит вашим потребностям соответствует OpenJDK. За него не нужно платить. И, кроме того, если вы стартап, для вас не так критично, если ваши серверы не будут работать в течение нескольких часов, пока технические специалисты не решат проблему. Если вы не можете позволить себе время простоя, скорее всего, вы работаете в зрелой компании, и, следовательно, должны использовать Oracle JDK и подписаться на поддержку. Также вы можете решить совместить разные модели и установить на некоторые продуктовые серверы, которые должны быть доступны 24/7, Oracle JDK, и OpenJDK на внутренние приложения, которые не так критичны для бизнеса.
В любом случае, вы можете продолжать использовать Java и дальше.
Об авторе:
Питер Верхас работает в швейцарском офисе EPAM. Питер разрабатывает программное обеспечение для клиентов, проводит тренинги для программистов и занимается менторингом внутри компании.
Можно подписаться на Питера в Twitter, LinkedIn и GitHub. Также у автора есть блог, «Java deep»: javax0.wordpress.com
В последнее время в Java произошло много изменений, и похоже, что коренным образом изменилось то, как язык будет развиваться дальше. Хорошо, что в языке появляются новые возможности. Но это не единственные перемены. Oracle внесла существенные изменения в модель поддержки и цикл обновления версии Java, которые выпускает эта компания. Все это привело к возникновению большой путаницы, причиной которой стали перемены, дезинформация и непонимание. В этой статье я резюмирую все, что нужно знать пользователям о нововведениях, прежде чем они начнут верить в наступление апокалиптического конца Java-экосистемы.
Однако вначале нужно прояснить некоторые моменты.
Oracle владеет Java, но Java — это не Oracle. Исходный код Java выпущен в лицензии GPLv2.0 с classpath exception. На деле это означает, что кто угодно может использовать и вносить изменения в исходный код языка бесплатно. Есть только одна вещь, которую запрещено делать всем, включая Oracle: вносить изменения в код и публиковать его с закрытой исходной лицензией. Это означает, что коммерческое использование Java, только платной версии, юридически невозможно, даже если этого потребуют маркетинговые или бизнес-интересы Oracle. Но я все-таки технический специалист. Для того, чтобы разобраться с этим моментом на 100% лучше всего загрузить текст GPLv2-лицензии и проконсультироваться с юристом.
Oracle – не единственная компания, которая выпускает сборки Java и занимается поддержкой, есть много других вендоров. Конечно, Oracle, как основной игрок, инвестирующий больше всего в развитие языка и инструментов, является самой престижной коммерческой компанией по его поддержке.
Фактически, у Oracle нет эксклюзивных прав не только на исходный код Java. Процесс развития, изменения в определении Java, API – все это находится в руках Java Community Process, вступить в которое может каждый. Для частных лиц это и вовсе бесплатно. Членами этой группы являются такие компании, как Intel, IBM, Credit Suisse, Software AG, RedHat. Именно они определяют будущее Java, а не Oracle. И у них есть свое мнение, как мы могли видеть в прошлый раз, когда утверждение финальной версии JPMS происходило не совсем гладко.
После этого вступления, в котором мы определились с тем, что Oracle “владеет” Java, но не является Java, давайте посмотрим на те изменения в процедуре поддержки развития и дорожной карте Java, которые представила Oracle.
Изменения после версий Java 9, 10, 11
Oracle объявила, что, начиная с JDK11, Oracle JDK перестанет быть бесплатным. И поначалу это заявление пугает. То, чем мы привыкли пользоваться бесплатно, больше таковым не будет. На практике то, что “мы должны платить” почти логично. Но небольшое слово “почти” стоит там не зря. Если есть какой-то сервис, которым мы пользовались, и он перестал быть бесплатным, у нас есть две опции: платить, чтобы пользоваться дальше, или больше не пользоваться. Стоит ли и дальше использовать Oracle JDK или мы можем перейти на что-то другое? Вот в чем вопрос на самом деле.
Чтобы ответить на него, нужно понять, что из себя представляет Oracle JDK, и какие есть альтернативы. Другое существенное изменение касается циклов выхода новых версий и понятия долгосрочной поддержки (англ. — Long Term Support или LTS). Для начала мы обсудим изменения в цикле выхода новых версий, затем путаницу с Open JDK и в конце — структуру LTS.
Цикл выхода новых версий
Java появилась в 1996 году. Первые несколько версий Java выходили более или менее регулярно.
Однако, взглянув на диаграмму, мы видим, что версия Java 5.0 вышла с задержкой. Java 6 также не спешила за предыдущей версией, и самый большой перерыв был между Java 6 и Java 7. Даже после этого новые версии выпускались не очень часто. Java 8 получила много новых функций, но ценой этому были два года ожидания. Похожим образом обстояли дела с Java 9, которая хоть и претерпела еще больших изменений, но ждать себя заставила целые три года.
Проблема таких циклов выхода обновлений заключается в том, что язык, который сам по себе конкурирует на постоянно развивающемся рынке языков, не может представлять новые функции достаточно быстро. Если на развитие модульной системы уходит три года, то ничто не может ускорить процесс. Тем не менее, некоторые вещи, которые появились в Java 9 могли быть выпущены раньше. Но они попросту не могли попасть к разработчикам, так как более ранних релизов не было. Уже доступные функции должны были ждать появления самой медленно разрабатываемой в этом релизе функции. Это одна из проблем классической каскадной модели разработки.
Oracle решила двигаться в духе agile и делать версии каждые шесть месяцев. Начиная с сентября 2017 года, новые релизы Java можно ожидать в марте и сентябре. Если какая-то функция будет не готова к этим датам, ее перенесут в следующий релиз, но остальные по мере готовности будут попадать в свежайшие.
В целом, это нормально. С одной стороны, Java-сообщество и разработчики должны быть этому рады. С другой стороны, остается вопрос поддержки. Кто может поддерживать такое количество версий Java? Именно поэтому была представлена долгосрочная поддержка (LTS), о которой мы скоро поговорим. Но сначала еще надо прояснить, что же такое Oracle JDK и OpenJDK.
Чем были и стали Oracle JDK и OpenJDK
Вплоть до Java 9 существовал бинарный выпуск Java сборки Oracle (Sun Microsystems), который использовался в производственной среде большинством разработчиков и компаний. Эта бинарность была основана на открытом исходном коде Java и содержала некоторые улучшения – дополнительные корпоративные инструменты, такие как Java Flight Recorder, Java Mission Control и некоторые другие функции вроде Application Class-Data Sharing.
Сборка OpenJDK создавалась из открытого исходного кода Java, в котором никаких улучшений не было. Эту сборку Java использовали те, кто хотел поэкспериментировать со свойствами Java, изменить код или просто по каким бы то ни было причинам были приверженцами исходного открытого кода. Хотя вы должны были загрузить исходный код и скомпилировать его для себя.
Начиная с Java 9, Oracle стала предоставлять OpenJDK параллельно с Oracle JDK. Также компания анонсировала, что она хочет сократить разрыв между характеристиками, производительностью и стабильностью двух версий, и как только это произойдет, сделать Oracle JDK платной. На тот момент и OpenJDK, и Oracle JDK были доступны бесплатно как бинарные сборки от Oracle. Это были Java 9 и Java 10.
После выпуска Java 11 это прекратилось. OpenJDK по-прежнему доступна бесплатно, но Oracle JDK для производственных систем стала платной. Существенной разницы между двумя версиями больше нет. У коммерческой версии есть инсталлятор, в то время как у OpenJDK – только ZIP-файл. Есть и другие различия, но на них пользователям Java не стоит обращать внимание. Технически детализированный список отличий описан Дональдом Смитом, старшим директором управления продуктами в Oracle в этой статье.
Более того, Oracle JDK по-прежнему бесплатен для других, даже коммерческих пользователей. Oracle JDK можно свободно использовать для:
• разработки
• тестирования
• прототипирования
• демонстрации
Вы можете использовать OpenJDK для других целей или заплатить Oracle и использовать Oracle JDK и получить поддержку. Поддержка — это хорошо.
Релизы с долгосрочной поддержкой (Long Term Support Releases)
Переход на новый цикл выпуска версий через каждые полгода поднял вопрос поддержки. Никто не может поддерживать такое количество версий с выгодой для себя. Если вы установили Java 6 для своего приложения в 2007 году, вы можете получить поддержку от Oracle через 11 лет. Выпуск новых версий каждые полгода подразумевает поддержку 22 разных версий одновременно. Это стало бы тяжелым бременем для Oracle или любого другого вендора, который бы решил поддерживать все релизы.
Стратегия Oracle заключается в том, чтобы каждые три года определять один релиз, который получит долгосрочную поддержку. Первым таким релизом стал Java 11, и он будет поддерживаться вплоть до 2026 года. В течение этого времени в сентябре 2021 года также выйдет Java 17, которая получит долгосрочную семилетнюю поддержку, в соответствии с текущими планами. Все прочие, так называемые функциональные релизы, будут поддерживаться только до выхода следующей версии.
Обратите внимание, что поддержка распространяется только на Oracle JDK и только для тех, кто оплатил JDK и поддержку. Но не думайте, что вас бросили на произвол судьбы, если планируете использовать OpenJDK. Для нас ничего не изменилось. Если вы не платили за поддержку до этого, вы ее и так не получали. Если платили, то будете продолжать оплачивать и получите эту поддержку.
Вот ссылка на статью Oracle с прогнозами конца жизненного цикла для разных версий.
Будут ли выпущены новые версии для OpenJDK? Конечно. Ранее выходили обновления открытого исходного кода Java, в котором исправлялись ошибки, хотя гарантий того, что они будут выходить, не было. Это происходило просто потому, что в этом были заинтересованы все участники. В дальнейшем все останется по-старому, Java будет получать новые версии, новые сборки.
Я вижу три основные стратегии выбора, какую версию Java лучше установить:
- Платить Oracle за Oracle JDK и подписку, и пользоваться релизами с долгосрочной поддержкой. Это то, что следует делать большим коммерческим компаниям, использующим инфраструктуру Java, чтобы соответствовать требованиям надежности.
- Перейти на OpenJDK, использовать только релизы с долгосрочной поддержкой, и устанавливать версии с исправленными ошибками, доступные для OpenJDK. Это жизнеспособное решение для компаний, которые не могут или не хотят менять стоимость инфраструктуры Java, могли обходиться без коммерческой поддержки в прошлом и полагают, что также смогут и в долгосрочной перспективе.
- Перейти на OpenJDK и устанавливать последующие релизы каждые шесть месяцев, как только они будут появляться. Это вариант для компаний, которым нужны самые последние технологические решения.
Стратегии также можно комбинировать, устанавливая разные версии Java на разных машинах. Независимо от того, что вы выберете, вы можете загрузить бинарные версии предварительной сборки со следующих сайтов:
- Бинарные версии предварительной сборки OpenJDK adoptopenjdk.net
- Oracle JDK доступен на java.oracle.com. Здесь вы можете кликнуть на Java SE 11, чтобы перейти на страницу загрузки и добраться до кнопки «загрузить». На странице есть большое предупреждение желтого цвета, также вы должны будете кликнуть на согласие с лицензионными условиями, прежде чем линк для загрузки станет доступным. И в этот раз лучше действительно прочитать условия, а не просто автоматически согласиться.
Хотя это не бинарная загрузка, но она тесно связана с загрузкой Oracle JDK – вы также можете посетить веб-сайт www.oracle.com/java/java-se-subscription.html, чтобы получить Oracle JDK и поддержку в одном пакете. Детальная информация о ценах доступна на www.oracle.com/us/corporate/pricing/price-lists/java-se-subscription-pricelist-5028356.pdf. Для нетерпеливых скопировал сюда информацию о ценах из официального Oracle FAQ:
“Стоимость десктопной версии составляет $2.50 за пользователя в месяц, или ниже при наличии многоуровневых скидок за объем. Дополнительную информацию смотрите в прейскуранте цен на подписку Oracle Java SE”.
Итоги
Что же вам делать? Использовать OpenJDK или платить за Oracle JDK? Это вопрос рентабельности и того, насколько важна для вас поддержка от Oracle. Если ваш бизнес не может себе позволить поддержку Oracle JDK, потому что вы стартап, восходящая звезда с блестящей идеей продукта, но дырой в кармане, значит вашим потребностям соответствует OpenJDK. За него не нужно платить. И, кроме того, если вы стартап, для вас не так критично, если ваши серверы не будут работать в течение нескольких часов, пока технические специалисты не решат проблему. Если вы не можете позволить себе время простоя, скорее всего, вы работаете в зрелой компании, и, следовательно, должны использовать Oracle JDK и подписаться на поддержку. Также вы можете решить совместить разные модели и установить на некоторые продуктовые серверы, которые должны быть доступны 24/7, Oracle JDK, и OpenJDK на внутренние приложения, которые не так критичны для бизнеса.
В любом случае, вы можете продолжать использовать Java и дальше.
Об авторе:
Питер Верхас работает в швейцарском офисе EPAM. Питер разрабатывает программное обеспечение для клиентов, проводит тренинги для программистов и занимается менторингом внутри компании.
Можно подписаться на Питера в Twitter, LinkedIn и GitHub. Также у автора есть блог, «Java deep»: javax0.wordpress.com