Привет, Хабр! Представляю вашему вниманию перевод статьи «Do not fall into Oracle's Java 11 trap» автора Stephen Colebourne.

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;

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


Ловушка выглядит следующим образом:

  1. Загрузите Oracle JDK (потому что это то, что вы всегда делали, и это то, куда с большой вероятностью выведет вас поисковая система).
  2. Используйте его в продакшен среде (потому что вы не понимали и/или не знали, что лицензия изменена)
  3. Получите неприятный телефонный звонок от команды по защите прав 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)


  1. lagranzh
    27.09.2018 11:18
    +1

    это же перевод. может стоит указать с ссылкой на оригинал?


  1. vba
    27.09.2018 11:38

    Да это несомненно перевод и оригинал здесь. MSBlast укажите пожалуйста ссылку на него в начале вашей статьи.


    1. MSBlast Автор
      27.09.2018 15:21
      +1

      Пардон, ссылка на оригинальную статью теперь есть в первом абзаце.


      1. vba
        27.09.2018 15:37

        Спасибо


  1. immaculate
    27.09.2018 12:37
    +2

    В комментариях к исходной статье есть еще любопытное дополнение: Oracle давно начала отслеживать скачивания «бесплатных» дополнений для VirtualBox, и затем присылать угрожающие письма и счета компаниям, с адресов которых были скачаны данные дополнения.


    По мне так это тактика мелких жуликов, совершенно не вяжущаяся с образом большой солидной корпорации. Но давно уже чувствовалось, что с Oracle что-то не так.


    1. dei
      27.09.2018 13:28

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


      1. immaculate
        27.09.2018 13:34

        Я зарапортовался — это из комментариев к статье на reddit:
        https://www.reddit.com/r/coding/comments/9j2zes/do_not_fall_into_oracles_java_11_trap/


        1. immaculate
          27.09.2018 13:40

          удалено



    1. ALexhha
      27.09.2018 15:27

      А еще они убрали возможность загрузки старых версий jre/jdk со своего сайта из командной строки, т.е. всякие wget/curl уже не помогут. Для доступа к старым версиям надо обязательно регистрироваться на их сайте.


      1. Borz
        27.09.2018 15:43

        curl пашет — я свой скрипт даже не менял.
        А то, что регистрацию требуют — так это вроде не так и критично...


        1. ALexhha
          27.09.2018 15:48

          Если я правильно понял скрипт download_oracle.bash, то там происходит логин на oracle.com, т.е. вам нужно заводить учетную запись там.


          1. Borz
            27.09.2018 15:51

            да. для архивных надо заводить. Но, как я написал выше — это не критично же. Учётка заводится один раз — можно завести "техническую" учётку для таких дел (вроде не нарушает лицензии)


    1. billyevans
      29.09.2018 01:30

      Так ровно так они ведут свой бизнес уже много лет с БД.
      Они заключают контракт с фирмой на их БД и описывают в контракте, какими фичами можно пользоваться. Спустя некоторое время происходит обновление версии БД с разными фиксами и новыми фичами. Новые фичи доступны полностью, но формально юзать их нельзя. Раз в какое-то время Оракл проводит аудит и замечает, что фичи, которые нельзя юзать по контракту используются кем-то и требует уплаты кучи штрафов за это.


  1. Konachan700
    27.09.2018 13:09

    Раз предоставляют бесплатную открытую альтернативу, да еще и поддерживают ее — то все нормально. Ынтерпрайз таки должен читать лицензии на софт перед тем, как использовать продукт. Хотя баннер про платность коммерческого использования, вылетающий при скачивании, не помешал бы…


    1. staticlab
      27.09.2018 13:49

      Там вылетает лицензионное соглашение на 100500 страниц :)


      1. AlexMt
        27.09.2018 19:19

        Вообще-то огромный красный баннер там есть, намекающий о том что надо почитать лиц. соглашение. А вот и оно, и кстати оно небольшое.

        Скриншот ниже, тут в комментариях

        З.Ы. Не являюсь никак лицом представляющим Oracle, просто рекомендую всё же идти и проверять информацию с хабра. Это полезно увидеть своими глазами.


  1. joann
    27.09.2018 13:52
    -1

    Scala, наша все :)


    1. fshp
      28.09.2018 01:40

      Дядя, ты дурак?

      Если вы scala-разработчик, то мне искренне жаль ваших коллег. Вы не можете отличить язык от платформы.


  1. na9ort
    27.09.2018 13:54

    Вот хитрожопый Oracle)


  1. habradante
    27.09.2018 14:28

    Снижу немного градус напряженности. Все не совсем так, как описано. Вот пояснения от Oracle blogs.oracle.com/java-platform-group/oracle-jdk-releases-for-java-11-and-later



  1. amarao
    27.09.2018 14:51
    -1

    Я ничего не понял.
    apt search jdk

    openjdk-11-jdk/cosmic 10.0.2+13-1ubuntu1 amd64
    OpenJDK Development Kit (JDK)

    Это оракл или кто-то другой?


    1. ElegantBoomerang
      27.09.2018 15:17

      Это чистый OpenJDK, конечно же. Если через PPA привезти Оракл, он бы назывался как-то oracle-java8.


      1. amarao
        27.09.2018 15:21
        -1

        То есть проблема с oracle решена. Используйте apt-get и не используйте подозрительный код с легальными бомбами с подозрительных сайтов.

        (На самом деле я всё понимаю и перевёл единственный проект в моём хозяйстве с oracle-jdk на openjdk ещё во времена версии 8, не смотря на вялое сопротивление java-программистов, у которых «всё и так работает, не надо трогать»).


        1. ElegantBoomerang
          27.09.2018 15:27

          Подскажу: не у всех есть apt-get, особенно, на Windows. Там очень многие минимум качали установщик с https://java.com, и вот-с.


        1. 0xd34df00d
          27.09.2018 16:19

          Не могу использовать apt-get, у меня emerge.

          А если серьезно, у меня oracle-jdk и не думаю, что это проблема для запуска clion для разработки своего опенсорса. Я же не компания.

          Так что в некоторых ситуациях и менять ничего не надо.


          1. amarao
            27.09.2018 18:24

            Если ваш опенсорс потом окажется в платном проекте — я бы не стал испытывать на прочность юротдел oracle.


            1. eri
              27.09.2018 23:03

              так он на си пишет.


              1. 0xd34df00d
                28.09.2018 07:52

                На плюсах.

                Но вот коммерческая разработка с использованием oracle jdk вполне является коммерческим применением, собственно, jdk.


            1. 0xd34df00d
              28.09.2018 07:53

              Ну я бы тоже не стал. К счастью, я по принципиальным соображениям не монетизирую свой опенсорс иначе как «посмотри, потенциальный работодатель, как я умею».


          1. fshp
            28.09.2018 01:43

            Для запуска clion и любых производных idea рекомендуется использовать jetbrains jre. Если вы пользуетесь jb toolbox, то у вас она уже используется.


            В ней исправлены проблемы сглаживания шрифтов, а так же добавлен марлин, который только в jre9+ есть у других сборок.


            1. chupasaurus
              28.09.2018 08:34

              А также она на основе OpenJDK.


        1. khanid
          28.09.2018 00:33

          К слову о восьмой версии.
          www.java.com/en/download/release_notice.jsp


        1. sved
          28.09.2018 02:08

          А это вы зря. OpenJDK вовсе не замена Oracle JDK. Я находил openjdk специфичные баги там. Кроме того некоторые вещи, например JAI, в openjdk не работают. Вы создали проблемы для ваших разработчиков ибо окружение стало не унифицированным и воспроизведение ошибок стало сложнее. Так что на их месте я бы сопротивлялся более активно.


          1. amarao
            28.09.2018 15:12

            Замена.

            Oracle, например, ломает partner ссылку ubuntu, сначала запретив редистрибьюцию, а потом удалив версию с сайта без предупреждения.

            У нас сломался CI (на котором ставился oracle-java), и в в процессе решения проблемы, проблему с oracle решили.

            Алсо, легальная бомба. Это не opensource а очень даже махровый проприетарный код. Какой oracle? Зачем?


    1. MSBlast Автор
      27.09.2018 15:28
      +1

      Это тоже Оракл, но openjdk сборка имеет другую (GPL v2) лицензию и будет поддерживаться самим Ораклом (включая security патчи) только следующие 6 месяцев после релиза, до выхода следующего мажорного (необязательно LTS) релиза.

      Подробности здесь — stackoverflow.com/questions/22358071/differences-between-oracle-jdk-and-openjdk и по ссылкам, что приведены в конце статьи.


      1. hermes-jr
        28.09.2018 04:44

        Поясните пожалуйста, запуская свой продукт под этой jdk я буду использовать библиотеки из поставки, rt.jar там и прочее… Насколько я знаю, лицензированные под GPL продукты не позволяют их использовать даже как библиотеки (в отличие от L-GPL). Значит ли это, что и я буду обязан раскрывать исходники своего продукта, запуская его на openjdk?


        1. fRoStBiT
          28.09.2018 07:44

          Там есть Classpath exception, так что с этим всё в порядке.


  1. ifqthenp
    27.09.2018 15:09

    На линуксе я использую sdkman.io для установки джавы от разных вендоров. Очень удобно переключаться с oracle на openjdk и на zulu. И graal там есть.


  1. TheUralSky
    27.09.2018 15:09
    +3

    На странице загрузки JDK11 висит достаточно крупная и заметная плашка о том, что условия лицензионного соглашения изменились и было бы неплохо их внимательно прочитать, иначе ССЗБ.

    image


  1. AstarothAst
    27.09.2018 15:53

    Все же, как хорошо, что есть Хабр, на котором есть добрые люди, которые скажут что к чему, и куда теперь бежать :)


  1. rainver
    27.09.2018 22:50
    -2

    дожили, java стала платной ТТ…


    1. shurikaltai
      28.09.2018 23:25

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


  1. vitekes
    27.09.2018 22:50

    Это всё конечно прикольно и интересно. Однако подобные вещи всегда очень быстро вскрываются. И вот теперь вопрос: как они собираются получать с этого деньги если есть openJDK который судя по недолгому гуглению в общем-то ничем не отличается от 11 версии oracle JDK кроме, естественно лицензии. Разве что залицензируют по самые помидоры какие-то части и будет полный oracle JDK и неполный openJDK. Как пример community и pro версия idea. Но это ведь не среда разработки, это язык. Подавляющие большинство сидят на версиях <9 и ещё очень-очень долго не будут понимать зачем им куда-то на что-то переходить. В enterprise приложениях есть немало примеров когда проекты сидят на 1.6 и плевать хотели что он устарел.


    1. eri
      27.09.2018 23:06

      во времена 7,8 не все проекты с Сан/Оракл Явы запускались на ОпенЖДК.
      1.6 это не версия Явы, а версия запускалки.


    1. funca
      27.09.2018 23:24
      -1

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


      1. fshp
        28.09.2018 01:48
        +1

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


        1. funca
          28.09.2018 07:34
          +1

          Вы путаете JDK с JRE. JDK это не только машина, но и куча стандартнных библиотек. Линковка с ними вынудит отдать свой код под GPL. Даже если речь о бекенде, код которого под GPL, то в принципе любой ваш обиженный сотрудник может выложить исходники в паблик на легитимных основаниях. Деплой в облака при определенных условиях так же может трактоваться как распространение. И тут вопрос для бизнеса, что дешевле: отрабатывать юридические риски или купить. Орал все четко сделал.


          1. jreznot
            28.09.2018 09:27

            Прочитайте Classpath Exception.


      1. lavilav
        28.09.2018 04:44

        получается с java 11 — либо ты платишь килобаксы, либо опенсорсишь.
        ну или как-то скрываешь платформу.

        как-то не до конца понятна ситуация с jvm 8, т.е. в принципе можно остаться на jvm 8, использовать jdk 8 + kotlin/scala, таким образом скрывая исходники, но не нарушая лицензии, правильно ли я понимаю «архивные» java?


        1. lavilav
          29.09.2018 01:30

          да, натупил жестко про лицензии :)


  1. yar0Sl0ve
    27.09.2018 22:50

    А на какой версии OpenJDK, в нынешней ситуации, правильно начинать новый java-проект?


  1. kuftachev
    28.09.2018 00:44
    +1

    Слава Богу, что к моменту лишения разума Оракла, Мелкомягкие исправились и теперь вместо Java 11 с Spring, есть C# 7 с .Net core.


    1. Athari
      28.09.2018 02:34

      Вообще иронично, что джава много где (от андроидов до блюреев) выбиралась по принципу "ну открытое же", однако по факту Оракл регулярно нагибает с лицензиями и портит кровь разрабам, в том время как обитель зла в лице Мелкомягких ещё никого с дотнетом не нагнула, хотя изначально даже судьба Моно держалась на честном пионерском, и лишь относительно недавно они решили некоторые части дотнета и шарпа полноценно пооткрывать.


      Интересно, почему так. Мелкомягким не настолько покласть на свою репутацию, как Ораклу?


      1. vsb
        28.09.2018 09:35

        Sun и Oracle это разные компании. Sun никого вроде особо не нагибал, в то время Java и стала популярной. А сейчас на неё все подсели, вот и всё. Хотя существенных проблем с Java я на текущий момент не вижу, но общий облик Oracle меня бы отвратил от Java, если бы я начинал её изучать сейчас.


        1. intet
          28.09.2018 12:27

          С Java есть несколько проблем в дизайне языка. Он разрабатывался довольно давно и при этом всегда тянул обратную совместимость из за чего однажды принятые оптимальные тогда но не оптимальные сейчас решения нельзя изменить.
          Зато c# иногда ломал совместимость зато сейчас приятнее в использовании.


      1. Source
        29.09.2018 10:31

        Developers же. Чем больше лояльных разработчиков, тем лучше Microsoft. Потому что создаётся больше программных решений, которые работают на их ОС. А кто-то из разработчиков её и Visual Studio купит, так что плюсы со всех сторон.
        Ну а Oracle что? Их основной бизнес — СУБД, так что с Java они могут экспериментировать как угодно.


  1. shurikaltai
    28.09.2018 04:44

    Интересно если скачать это дер***** с открытого вифи какой нить кафешки, или из под ната, то кто будет платить за него, кому придет счет


  1. dim2r
    28.09.2018 09:14

    Не понял про classpath. Поясните пожалуйста, что это за исключение?


    1. jreznot
      28.09.2018 09:29

      Позволяет линковать Java код с JDK/JRE не накладывая вирусное условие GPL


      1. dim2r
        28.09.2018 10:50

        можно пример? а то пока непонятно


        1. jreznot
          28.09.2018 10:58
          +1

          Ваша программа слинкованная с JDK не становится GPL программой. Ровно до тех пор, пока вы не линкуетесь с нативным кодом JDK и пока используете публичные механизмы Java. Конечно же, вам разрешено наследовать классы JDK, тут ограничений нет.


          1. dim2r
            28.09.2018 11:17

            что такое линковка с JDK?
            программа должна быть написана на с++ и скомпилирована вместе с jdk?


            1. fshp
              28.09.2018 11:40

              Грубо говоря при наследовании от Object (или любого другого класса, но от Object вы наследуйтесь всегда), GPL вас вынудила бы открыть свой код.


              1. dim2r
                28.09.2018 13:00

                спасибо большое, так понятнее!

                похоже, что терминология GPL больше расчитана на с++
                https://en.wikipedia.org/wiki/GPL_linking_exception#The_classpath_exception


  1. WondeRu
    28.09.2018 09:45

    Друзья, читайте лицензии, а лучше имейте специалиста по лицензированию в штате или на аутсорсе. Специалисты вендоров и дистрибьюторов хуже вас разбираются в вопросах лицензирования, там главное — продать.
    Через 3-5 лет к вам приходит вендор с аудитом, вы как добропорядочная компания запускаете скрипты (предварительно проверив их на закладки) аудита и отправляете вендору. Спустя пару недель к вам с настойчивостью коллектора, начинают стучаться дятлы с требованием заплатить $100к-$700к, хотя изначально спецификация одобрялась вендором же
    Вы должны будете оплатить за поддержку софта (если не платили) за все годы использования, штраф и разницу в лицензиях.
    Еще одна засада: при установке софта ставьте только то, за что заплатили (например, партициониорование Oracle входит в стандартный дистрибутив, но помните, это платная фича и ее нужно покупать).


  1. sved
    28.09.2018 15:32

    Кстати на продакшене JDK вовсе не нужен. Нужен JRE. А это вероятно другая лицензия.