Java 11 была официально выпущена. Это мажорный релиз, имеющий долгосрочную поддержку (LTS — long-term support). Однако Oracle приготовила ловушку (намеренно или случайно).
Ловушка
В течение 23 лёт разработчики привыкли загружать JDK с сайта Oracle и использовать его бесплатно. Введите «JDK» в свою любимую поисковую систему, и верхняя ссылка будет вести на страницу загрузки Oracle Java SE (я намеренно не предоставляю ссылку). Но этот запрос и эта ссылка теперь являются ловушкой.
Oracle JDK, на который ссылаются почти все поисковые запросы, теперь является коммерческим, и не является бесплатным.
Ключевая часть обновлённого лицензионного соглашения заключается в следующем:
You may not: use the Programs for any data processing or any commercial, production, or internal business purposes other than developing, testing, prototyping, and demonstrating your Application;
Вы не можете использовать программы для любой обработки данных или для любых коммерческих, производственных или внутренних бизнес-целей, кроме разработки, тестирования, прототипирования и демонстрации вашего приложения;
Ловушка выглядит следующим образом:
- Загрузите Oracle JDK (потому что это то, что вы всегда делали, и это то, куда с большой вероятностью выведет вас поисковая система).
- Используйте его в продакшен среде (потому что вы не понимали и/или не знали, что лицензия изменена)
- Получите неприятный телефонный звонок от команды по защите прав Oracle, требующей много денег.
Другими словами, Oracle может полагаться на инерцию разработчиков Java, чтобы заставить их загружать неправильную (коммерческую) версию Java. Если вы не прочтете текст лицензионного соглашения или предупреждения очень осторожно, вы, возможно, даже не поймете, что Oracle JDK теперь является коммерческим, и поэтому вам, возможно, придётся заплатить Oracle за Java.
Является ли эта ловушка злонамеренным поведением со стороны Oracle? У читателей будет свое мнение. Стоит иметь в виду, что Oracle вкладывает огромные суммы в разработку Java, поэтому разумно иметь коммерческий план для тех, кто этого хочет. Однако, Oracle также они предоставляет бесплатную альтернативу.
Решение
Решение простое!
Используйте сборку OpenJDK.
Помимо своего коммерческого JDK, Oracle создает сборку OpenJDK. Это бесплатная сборка с лицензией GPL (исключением является Classpath, безопасно для коммерческого использования). Скачать можно здесь.
В данный момент, OpenJDK сборка от Oracle является единственно доступной. Однако, в скором времени будет доступно больше, например, от AdoptOpenJDK (вероятно, на этой неделе). А также сборки OpenJDK, от других, отличных от Oracle, участников комьюнити, которые будут использоваться для долгосрочной поддержки Java 11. (прим. переводчика: про разницу между OpenJDK и AdoptOpenJDK можно прочитать этот ответ на SO)
Резюме
НЕ загружайте и не используйте Oracle JDK, если вы не намерены платить за него.
С настоящего момента и впредь, для использования Java 11 загружайте и используйте сборку OpenJDK.
Дополнительная информация по теме (англ.):
blogs.oracle.com/java-platform-group/oracle-jdk-releases-for-java-11-and-later
blog.joda.org/2018/08/java-is-still-available-at-zero-cost.html
blog.joda.org/2018/09/time-to-look-beyond-oracles-jdk.html
Комментарии (68)
immaculate
27.09.2018 12:37+2В комментариях к исходной статье есть еще любопытное дополнение: Oracle давно начала отслеживать скачивания «бесплатных» дополнений для VirtualBox, и затем присылать угрожающие письма и счета компаниям, с адресов которых были скачаны данные дополнения.
По мне так это тактика мелких жуликов, совершенно не вяжущаяся с образом большой солидной корпорации. Но давно уже чувствовалось, что с Oracle что-то не так.
dei
27.09.2018 13:28Дайте ссылку, пожалуйста. Если исходная статья чуть выше, то там нет комментариев вообще.
immaculate
27.09.2018 13:34Я зарапортовался — это из комментариев к статье на reddit:
https://www.reddit.com/r/coding/comments/9j2zes/do_not_fall_into_oracles_java_11_trap/
immaculate
27.09.2018 13:45
ALexhha
27.09.2018 15:27А еще они убрали возможность загрузки старых версий jre/jdk со своего сайта из командной строки, т.е. всякие wget/curl уже не помогут. Для доступа к старым версиям надо обязательно регистрироваться на их сайте.
Borz
27.09.2018 15:43curl пашет — я свой скрипт даже не менял.
А то, что регистрацию требуют — так это вроде не так и критично...ALexhha
27.09.2018 15:48Если я правильно понял скрипт download_oracle.bash, то там происходит логин на oracle.com, т.е. вам нужно заводить учетную запись там.
Borz
27.09.2018 15:51да. для архивных надо заводить. Но, как я написал выше — это не критично же. Учётка заводится один раз — можно завести "техническую" учётку для таких дел (вроде не нарушает лицензии)
billyevans
29.09.2018 01:30Так ровно так они ведут свой бизнес уже много лет с БД.
Они заключают контракт с фирмой на их БД и описывают в контракте, какими фичами можно пользоваться. Спустя некоторое время происходит обновление версии БД с разными фиксами и новыми фичами. Новые фичи доступны полностью, но формально юзать их нельзя. Раз в какое-то время Оракл проводит аудит и замечает, что фичи, которые нельзя юзать по контракту используются кем-то и требует уплаты кучи штрафов за это.
Konachan700
27.09.2018 13:09Раз предоставляют бесплатную открытую альтернативу, да еще и поддерживают ее — то все нормально. Ынтерпрайз таки должен читать лицензии на софт перед тем, как использовать продукт. Хотя баннер про платность коммерческого использования, вылетающий при скачивании, не помешал бы…
staticlab
27.09.2018 13:49Там вылетает лицензионное соглашение на 100500 страниц :)
AlexMt
27.09.2018 19:19Вообще-то огромный красный баннер там есть, намекающий о том что надо почитать лиц. соглашение. А вот и оно, и кстати оно небольшое.
Скриншот ниже, тут в комментариях
З.Ы. Не являюсь никак лицом представляющим Oracle, просто рекомендую всё же идти и проверять информацию с хабра. Это полезно увидеть своими глазами.
habradante
27.09.2018 14:28Снижу немного градус напряженности. Все не совсем так, как описано. Вот пояснения от Oracle blogs.oracle.com/java-platform-group/oracle-jdk-releases-for-java-11-and-later
gnkoshelev
28.09.2018 13:56+1И собственно, перевод: Про версии Oracle JDK 11+ (лицензирование и распространение).
amarao
27.09.2018 14:51-1Я ничего не понял.
apt search jdk
…
openjdk-11-jdk/cosmic 10.0.2+13-1ubuntu1 amd64
OpenJDK Development Kit (JDK)
Это оракл или кто-то другой?ElegantBoomerang
27.09.2018 15:17Это чистый OpenJDK, конечно же. Если через PPA привезти Оракл, он бы назывался как-то
oracle-java8
.amarao
27.09.2018 15:21-1То есть проблема с oracle решена. Используйте apt-get и не используйте подозрительный код с легальными бомбами с подозрительных сайтов.
(На самом деле я всё понимаю и перевёл единственный проект в моём хозяйстве с oracle-jdk на openjdk ещё во времена версии 8, не смотря на вялое сопротивление java-программистов, у которых «всё и так работает, не надо трогать»).
ElegantBoomerang
27.09.2018 15:27Подскажу: не у всех есть
apt-get
, особенно, на Windows. Там очень многие минимум качали установщик с https://java.com, и вот-с.
0xd34df00d
27.09.2018 16:19Не могу использовать apt-get, у меня emerge.
А если серьезно, у меня oracle-jdk и не думаю, что это проблема для запуска clion для разработки своего опенсорса. Я же не компания.
Так что в некоторых ситуациях и менять ничего не надо.amarao
27.09.2018 18:24Если ваш опенсорс потом окажется в платном проекте — я бы не стал испытывать на прочность юротдел oracle.
eri
27.09.2018 23:03так он на си пишет.
0xd34df00d
28.09.2018 07:52На плюсах.
Но вот коммерческая разработка с использованием oracle jdk вполне является коммерческим применением, собственно, jdk.
0xd34df00d
28.09.2018 07:53Ну я бы тоже не стал. К счастью, я по принципиальным соображениям не монетизирую свой опенсорс иначе как «посмотри, потенциальный работодатель, как я умею».
fshp
28.09.2018 01:43Для запуска clion и любых производных idea рекомендуется использовать jetbrains jre. Если вы пользуетесь jb toolbox, то у вас она уже используется.
В ней исправлены проблемы сглаживания шрифтов, а так же добавлен марлин, который только в jre9+ есть у других сборок.
sved
28.09.2018 02:08А это вы зря. OpenJDK вовсе не замена Oracle JDK. Я находил openjdk специфичные баги там. Кроме того некоторые вещи, например JAI, в openjdk не работают. Вы создали проблемы для ваших разработчиков ибо окружение стало не унифицированным и воспроизведение ошибок стало сложнее. Так что на их месте я бы сопротивлялся более активно.
amarao
28.09.2018 15:12Замена.
Oracle, например, ломает partner ссылку ubuntu, сначала запретив редистрибьюцию, а потом удалив версию с сайта без предупреждения.
У нас сломался CI (на котором ставился oracle-java), и в в процессе решения проблемы, проблему с oracle решили.
Алсо, легальная бомба. Это не opensource а очень даже махровый проприетарный код. Какой oracle? Зачем?
MSBlast Автор
27.09.2018 15:28+1Это тоже Оракл, но openjdk сборка имеет другую (GPL v2) лицензию и будет поддерживаться самим Ораклом (включая security патчи) только следующие 6 месяцев после релиза, до выхода следующего мажорного (необязательно LTS) релиза.
Подробности здесь — stackoverflow.com/questions/22358071/differences-between-oracle-jdk-and-openjdk и по ссылкам, что приведены в конце статьи.hermes-jr
28.09.2018 04:44Поясните пожалуйста, запуская свой продукт под этой jdk я буду использовать библиотеки из поставки, rt.jar там и прочее… Насколько я знаю, лицензированные под GPL продукты не позволяют их использовать даже как библиотеки (в отличие от L-GPL). Значит ли это, что и я буду обязан раскрывать исходники своего продукта, запуская его на openjdk?
TheUralSky
27.09.2018 15:09+3На странице загрузки JDK11 висит достаточно крупная и заметная плашка о том, что условия лицензионного соглашения изменились и было бы неплохо их внимательно прочитать, иначе ССЗБ.
AstarothAst
27.09.2018 15:53Все же, как хорошо, что есть Хабр, на котором есть добрые люди, которые скажут что к чему, и куда теперь бежать :)
rainver
27.09.2018 22:50-2дожили, java стала платной ТТ…
shurikaltai
28.09.2018 23:25те кто здесь с умным видом чтото обсуждает похоже вообще не из мира людей, а из мира говноявы
vitekes
27.09.2018 22:50Это всё конечно прикольно и интересно. Однако подобные вещи всегда очень быстро вскрываются. И вот теперь вопрос: как они собираются получать с этого деньги если есть openJDK который судя по недолгому гуглению в общем-то ничем не отличается от 11 версии oracle JDK кроме, естественно лицензии. Разве что залицензируют по самые помидоры какие-то части и будет полный oracle JDK и неполный openJDK. Как пример community и pro версия idea. Но это ведь не среда разработки, это язык. Подавляющие большинство сидят на версиях <9 и ещё очень-очень долго не будут понимать зачем им куда-то на что-то переходить. В enterprise приложениях есть немало примеров когда проекты сидят на 1.6 и плевать хотели что он устарел.
eri
27.09.2018 23:06во времена 7,8 не все проекты с Сан/Оракл Явы запускались на ОпенЖДК.
1.6 это не версия Явы, а версия запускалки.
funca
27.09.2018 23:24-1GPL вынуждает открыть исходники по первому требованию. Поэтому в энтерпрайз она часто используется разработчиками как способ для вымогательства денег за нормальную лицензию.
fshp
28.09.2018 01:48+1Вынуждает открыть исходники виртуальной машины (если вы ее модифицировали), а не вашего приложения. И только в том случае, если вы собрались виртуальную машину эту распространять (например поставлять с приложением). Если она у вас где-то на бэкенде крутится, то никто никому ничего не должен.
funca
28.09.2018 07:34+1Вы путаете JDK с JRE. JDK это не только машина, но и куча стандартнных библиотек. Линковка с ними вынудит отдать свой код под GPL. Даже если речь о бекенде, код которого под GPL, то в принципе любой ваш обиженный сотрудник может выложить исходники в паблик на легитимных основаниях. Деплой в облака при определенных условиях так же может трактоваться как распространение. И тут вопрос для бизнеса, что дешевле: отрабатывать юридические риски или купить. Орал все четко сделал.
lavilav
28.09.2018 04:44получается с java 11 — либо ты платишь килобаксы, либо опенсорсишь.
ну или как-то скрываешь платформу.
как-то не до конца понятна ситуация с jvm 8, т.е. в принципе можно остаться на jvm 8, использовать jdk 8 + kotlin/scala, таким образом скрывая исходники, но не нарушая лицензии, правильно ли я понимаю «архивные» java?
yar0Sl0ve
27.09.2018 22:50А на какой версии OpenJDK, в нынешней ситуации, правильно начинать новый java-проект?
kuftachev
28.09.2018 00:44+1Слава Богу, что к моменту лишения разума Оракла, Мелкомягкие исправились и теперь вместо Java 11 с Spring, есть C# 7 с .Net core.
Athari
28.09.2018 02:34Вообще иронично, что джава много где (от андроидов до блюреев) выбиралась по принципу "ну открытое же", однако по факту Оракл регулярно нагибает с лицензиями и портит кровь разрабам, в том время как обитель зла в лице Мелкомягких ещё никого с дотнетом не нагнула, хотя изначально даже судьба Моно держалась на честном пионерском, и лишь относительно недавно они решили некоторые части дотнета и шарпа полноценно пооткрывать.
Интересно, почему так. Мелкомягким не настолько покласть на свою репутацию, как Ораклу?
vsb
28.09.2018 09:35Sun и Oracle это разные компании. Sun никого вроде особо не нагибал, в то время Java и стала популярной. А сейчас на неё все подсели, вот и всё. Хотя существенных проблем с Java я на текущий момент не вижу, но общий облик Oracle меня бы отвратил от Java, если бы я начинал её изучать сейчас.
intet
28.09.2018 12:27С Java есть несколько проблем в дизайне языка. Он разрабатывался довольно давно и при этом всегда тянул обратную совместимость из за чего однажды принятые оптимальные тогда но не оптимальные сейчас решения нельзя изменить.
Зато c# иногда ломал совместимость зато сейчас приятнее в использовании.
Source
29.09.2018 10:31Developers же. Чем больше лояльных разработчиков, тем лучше Microsoft. Потому что создаётся больше программных решений, которые работают на их ОС. А кто-то из разработчиков её и Visual Studio купит, так что плюсы со всех сторон.
Ну а Oracle что? Их основной бизнес — СУБД, так что с Java они могут экспериментировать как угодно.
shurikaltai
28.09.2018 04:44Интересно если скачать это дер***** с открытого вифи какой нить кафешки, или из под ната, то кто будет платить за него, кому придет счет
dim2r
28.09.2018 09:14Не понял про classpath. Поясните пожалуйста, что это за исключение?
jreznot
28.09.2018 09:29Позволяет линковать Java код с JDK/JRE не накладывая вирусное условие GPL
dim2r
28.09.2018 10:50можно пример? а то пока непонятно
jreznot
28.09.2018 10:58+1Ваша программа слинкованная с JDK не становится GPL программой. Ровно до тех пор, пока вы не линкуетесь с нативным кодом JDK и пока используете публичные механизмы Java. Конечно же, вам разрешено наследовать классы JDK, тут ограничений нет.
dim2r
28.09.2018 11:17что такое линковка с JDK?
программа должна быть написана на с++ и скомпилирована вместе с jdk?fshp
28.09.2018 11:40Грубо говоря при наследовании от Object (или любого другого класса, но от Object вы наследуйтесь всегда), GPL вас вынудила бы открыть свой код.
dim2r
28.09.2018 13:00спасибо большое, так понятнее!
похоже, что терминология GPL больше расчитана на с++
https://en.wikipedia.org/wiki/GPL_linking_exception#The_classpath_exception
WondeRu
28.09.2018 09:45Друзья, читайте лицензии, а лучше имейте специалиста по лицензированию в штате или на аутсорсе. Специалисты вендоров и дистрибьюторов хуже вас разбираются в вопросах лицензирования, там главное — продать.
Через 3-5 лет к вам приходит вендор с аудитом, вы как добропорядочная компания запускаете скрипты (предварительно проверив их на закладки) аудита и отправляете вендору. Спустя пару недель к вам с настойчивостью коллектора, начинают стучаться дятлы с требованием заплатить $100к-$700к, хотя изначально спецификация одобрялась вендором же
Вы должны будете оплатить за поддержку софта (если не платили) за все годы использования, штраф и разницу в лицензиях.
Еще одна засада: при установке софта ставьте только то, за что заплатили (например, партициониорование Oracle входит в стандартный дистрибутив, но помните, это платная фича и ее нужно покупать).
sved
28.09.2018 15:32Кстати на продакшене JDK вовсе не нужен. Нужен JRE. А это вероятно другая лицензия.
lagranzh
это же перевод. может стоит указать с ссылкой на оригинал?