Уже 2 дня как вступили в силу изменения лицензионной политики Oracle на распространение сборок Java SE. В среде разработчиков-слоупоков (я тоже в их числе) начали носиться кошмарные слухи.

Что произошло


В середине 2018 года Oracle объявил, что собирается изменить лицензионную политику. 16 апреля 2019 года изменение вступило в силу. Теперь все опубликованные после этой даты сборки Java SE можно использовать бесплатно только для личных нужд и с целью разработки. Для использования в коммерческих целях (в том числе для продакшена) надо оформить платную подписку у Oracle.

Что-а-а?


Oracle выстрелил себе в ногу и убивает Java? Нет, не убивает. Нет, не выстрелил. Но проблем халявщикамвсем нам подкинул. Давайте быстро разберемся, что это означает в практическом плане, без этих ваших GPL, BCL, WTF…

Зачем они это сделали?


Как известно, Oracle на самом деле собирает и публикует две версии JDK: Oracle JDK (aka Java SE, расположена на java.com) и Open JDK (расположена на openjdk.java.net).
Чтобы понять смысл всей затеи достаточно взглянуть на этот слайд из их презентации:



Для коммерческой сборки поддержка длительная. Для бесплатной – короткая. Т.е. чтобы накатить патчи на бесплатную OpenJDK через полгода надо будет проапгрейдить версию. Oracle JDK будет выпускать патчи еще 5 лет после выпуска. Поэтому она платная.

Что насчет Java 8, 9, 10, 11...?


Это касается всех версий.

Это касается JRE?


Нигде отдельно не указывается лицензия на JRE. Считается, что раз JRE является подмножеством JDK, то и лицензионные ограничения такие же. Т.е. — да, это касается JRE.

Это мне надо теперь все снести на продакшене?!?!


Нет. Изменения касаются только новых выпусков (после 16 апреля). Для Java 8 SE первым выпуском с ограничениями стала Update 211. Все что было выпущено ранее, можно использовать дальше без ограничений.

А что теперь делать?


Ставить OpenJDK. Но сам OpenJDK от Oracle не имеет официального виндового установщика (и автоматического апдейта), надо его распаковывать руками.

Если вам важен именно установщик, остается только пользоваться ранними релизами от Oracle (Update 202). А апдейты все равно придется отключить.

UPD: В комментариях подсказали, что существуют бесплатные бинарники с установщиком AdoptOpenJDK, поддерживаемые comunity.
Еще можно обратить внимание на Liberica JDK, которая поддерживается JetBrains.

А от OpenJDK ничего не сломается?


Не должно (с). Отличия в функциональности минимальны и очень мало кого затрагивают. При этом Oracle планомерно уменьшает эти различия, вливая их в OpenJDK или удаляя совсем.

Комментарии (60)


  1. Zalechi
    19.04.2019 21:56

    Вот оно чё, Михалыч!


  1. rsashka
    19.04.2019 22:22
    +1

    В среде разработчиков-слоупоков начали носится кошмарные слухи.
    Нет, не убивает, нет не выстрелил.
    Для использования в коммерческих целях (в том числе для продакшена) надо оформить платную подписку у Oracle.

    Или я читать разучился, или с логикой у автора некоторые сложности.


    1. ExplosiveZ
      19.04.2019 22:55

      Существует 2 вида JDK от Oracle — OpenJDK и Oracle JDK.
      OpenJDK — это эталонная реализация JDK, Oracle JDK базируется на OpenJDK.
      Раньше были различия между OpenJDK и Oracle JDK, теперь их нет.
      OpenJDK полностью бесплатная и распространяется под GPL.
      Oracle JDK раньше была бесплатной, теперь платная.
      Oracle JDK отличается от OpenJDK только наличием платной поддержки.

      Практически в любом дистрибутиве в основном репозитории есть только OpenJDK.


      1. youlose
        19.04.2019 11:05
        +1

        «Oracle JDK базируется на OpenJDK»
        «OpenJDK полностью бесплатная и распространяется под GPL.»

        Получается что у платной Oracle JDK должны быть открыты исходники и можно самому патчи LTS собирать?


        1. Firz
          19.04.2019 12:13

          Нет, исходный код должен быть предоставлен по требованию пользователям Oracle JDK или распространяться вместе с исполнимым кодом. Покупаете Oracle JDK и можете запросить исходники(либо дают их в комплекте).
          ru.wikipedia.org/wiki/GNU_General_Public_License


        1. fRoStBiT
          19.04.2019 14:39

          Oracle как владелец продукта может лицензировать его другим (а тем более себе) не только под GPL. Что он и делает.


        1. alexbel
          19.04.2019 15:43
          +1

          У Java двойная лицензия. Все должны Oracle, а Oracle никому не должен


      1. alexbel
        19.04.2019 15:52
        +1

        OpenJDK — это исходные коды. Чтобы получился бинарник, кто-то должен его собрать, протестировать, упаковать в правильные контейнеры, написать инсталляторы и так далее. Oracle собирает текущую версию OpenJDK и хостит бинарники на jdk.java.net.


  1. funca
    19.04.2019 22:25
    +1

    Oracle сказал бизнесам: или вы пользуетесь самой свежей версией и это бесплатно или будете платить желая оставаться на старье. Интересное решение, которое в перспективе должно подтолкнуть развитие платформы и экосистемы.


    1. pankraty
      19.04.2019 22:39
      +2

      Если я правильно понимаю, раньше было 2 проприетарных платформы, работающих по сходим правилам: .net и java. Microsoft, чтобы "подтолкнуть развитие платформы и экосистемы", вывела .net в опенсорс; Oracle с той же целью сделала java платной. Очень интересно будет посмотреть в перспективе, чья стратегия к чему привела.


      1. Anton23
        19.04.2019 11:07

        Java и так в опенсорсе


      1. qrck13
        20.04.2019 01:00

        .NET тут заранее в более выгодной позиции, т.к. для Oracle их Java — это прямой инструмент зарабатывания денег, в то время как Microsoft их .NET — это продукт помогающий продать больше копий Windows и других решений от MS. Так что MS вполне могут позволить себе раздавать .NET бесплатно, более того — им это выгоднее чем продавать его за деньги.


        1. DieSlogan
          20.04.2019 08:14
          +2

          .net это теперь не только Windows. На лицо смена концепции и нельзя не отметить сколь выигрышно она смотрится на фоне Oracle


    1. Scf
      19.04.2019 00:47

      Сформулирую это так: Либо вы платите за поддержку стабильной версии джавы, либо работаете бесплатными тестерами последней версии.


      1. WinLin2
        19.04.2019 08:08

        Существует проблема совместимости разных версий JDK. Заказное ПО не может запуститься на новых версиях JDK, за смену версии java требуют стоимость полной разработки с нуля. Написал единожды работает везде?
        ps: на java не пишу.


        1. Skerrigan
          19.04.2019 11:00

          Из личной практики: при переходе с LTS v8 -> LTS v11 у меня сломалось только в одном месте и потребовало

          Такой фикс
          /*<---- JDK11 Fix ---->*/
                  compile 'javax.xml.bind:jaxb-api:2.4.0-b180830.0359'
                  compile 'com.sun.xml.bind:jaxb-core:2.3.0.1'
                  compile 'com.sun.xml.bind:jaxb-impl:2.4.0-b180830.0438'
                  compile 'javax.activation:activation:1.1.1'
                  compile 'org.glassfish.jaxb:jaxb-runtime:2.3.0'
          


          1. DieSlogan
            19.04.2019 16:05

            Вам здорово повезло.
            Мы до сих пор не можем слезть с восьмерки


      1. sshikov
        19.04.2019 19:19

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


  1. mk2
    18.04.2019 23:25
    +1

    AdoptOpenJDK предоставляет .msi, который и установит, и JAVA_HOME пропишет, так что не желающим распаковывать руками можно не беспокоиться.


    1. barbalion Автор
      19.04.2019 01:11

      А что с лицензиями?
      АПД: все бесплатно


  1. DaemonGloom
    19.04.2019 07:02

    Amazon Corretto — бесплатен, есть установщик. JavaFX поддерживается. Работает как для разнообразного конольного и GUI софта, так и для игр типа Майнкрафта. Обещают LTS поддержку как 8, так и 11 версии, без необходимости прыжков на нестабильные версии.


    1. Stam_emg
      20.04.2019 04:52

      Добавлю на него ссылочку для ознакомления:
      aws.amazon.com/ru/corretto


  1. eyeofhell
    19.04.2019 08:08

    Ставить OpenJDK. Но сам OpenJDK от Oracle не имеет официального виндового установщика (и автоматического апдейта), надо его распаковывать руками.


  1. sergey-gornostaev
    19.04.2019 08:25

    Отличия в функциональности минимальны

    В данный момент отличий нет вообще. Oracle JDK отличается от Open JDK только лицензией.


    1. DieSlogan
      19.04.2019 16:08

      В данный момент отличий нет вообще. Oracle JDK отличается от Open JDK только лицензией.


      Выделил самое главное в ваших словах.


      1. Endeavour
        19.04.2019 16:32

        То есть, вы хотите сказать, что Оракл несколько лет долго и упорно выпиливала эти различия, чтобы теперь добавить новых?


        1. DieSlogan
          19.04.2019 16:48

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


          1. Endeavour
            19.04.2019 17:00

            Не вижу цирка.
            Вообще ничего не изменилось. sudo apt install default-jdk и все.


          1. sergey-gornostaev
            20.04.2019 18:07

            Oracle перестал был владельцем Java. Теперь это open source, в который контрибьютят несколько десятков компаний, от небольших типа Excelsior JET до гигантов типа IBM и Red Hat. Максимум, чего Oracle может захотеться, это выкатить в свою сборку какой-нибудь новый коммерческий функционал.


            1. DieSlogan
              21.04.2019 12:01

              Ну да, но что такое Java без JVM? А в JVM у нас зоопарк. Как тот или иной производитель реализовал это всё, как часто он будет поддерживать и исправлять баги? Куча вопросов и риски. Риск того, что завтра вы словите баг JVM, риск того, что в данной JVM данный функционал будет работать странно, риск того, что завтра JVM будет платной.
              Вы считаете, что этим всем можно пренебречь?


              1. sergey-gornostaev
                21.04.2019 13:05

                Никакого зоопарка в JVM нет. Во-первых, все существующие JVM следуют очень строгой спецификации. Во-вторых, есть эталонная реализация — HotSpot, являющаяся частью OpenJDK. На которую, повторюсь, не влияет какая-то одна компания. И нет вообще не единого шанса, что завтра OpenJDK и HotSpot станут платными. В-третьих, наличие нескольких JVM — это хорошо, это возможность выбора, конкуренция и порождаемое ею качество. Не понравилось что-то в HotSpot — можно взять OpenJ9 например.

                Если вам нужна поддержка, вы можете купить лицензию Oracle. Но огромный Mail.Ru Group, например, живёт без неё, на сколько мне известно. Если не устраивает частота и продолжительность исправления багов, вы можете сменить поставщика сборки. Некоторые компании не только багфиксы для 7-й версии до сих пор выпускают, но и фичи бэкпортят. Да и в целом риск словить баг или наткнуться на особенности реализации сильно снизился с того момента, как Oracle отдала Java в open source.

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


    1. dima_habr
      22.04.2019 13:11

      В swing-е:
      в openJDK10/11/12 шрифты рендерятся позорно по сравнению с oracleJDK10/11/12 соответственно.


  1. saag
    19.04.2019 09:05

    Такое ощущение, что это еще один повод для выхода Фуксии в свет.


  1. Londoner
    19.04.2019 09:54

    А что мешает опенсорсному комьюнити выпускать такие же LTS патчи для OpenJDK бесплатно, наподобие CentOS vs RedHat?


  1. BratSin
    19.04.2019 10:28

    Есть еще Liberica JDK, от BellSoft. Есть .msi, есть LTS для 8 и 11. Только, по какой-то причине, после установки, я руками дружил .jar и винду.


    1. Teapot
      20.04.2019 15:14

      Да, bell-sw.com/java.html
      И в свежих версиях Liberica JDK (12.0.1, 11.0.3 и 8u212) ассоциации с .jar в Windows работают из коробки


  1. vlsinitsyn
    19.04.2019 11:14

    Как вовремя однако IBM отдал J9 в Eclipse.
    Жду с нетерпением, когда RHEL сделает именно этот JDK своим стандартом.
    Это было бы теперь логично.


  1. JayDi
    19.04.2019 11:18

    Стоит обратить внимание, что с последним обнавлением Oracle закрыл JAVA-дистрибутивы от свободного скачивания в автоматическом режиме, скрыв их за страницей регистрации (раньше регистрация была нужна только для скачивания старых версий, сейчас же — и для последних тоже). В следствие чего часть открытого ПО перестала работать (ставиться), т.к. закачка Java поломалась.

    Пример:
    github.com/magefree/mage/issues/5723


  1. rraderio
    19.04.2019 13:42

    А если использовать GraalVM?


    1. fshp
      19.04.2019 15:45

      Graalvm часть openjdk. На 12 версии просто флагом включается. Плюс есть утилита для компиляции модуля или класса в нативный so бинарик. Работает пока только под linux.


  1. fRoStBiT
    19.04.2019 14:50

    две версии JDK: Oracle JDK (aka Java SE) и Open JDK

    Но ведь OpenJDK — это и есть reference implementation Java SE.
    А Oracle JDK — это его сборка от Oracle под другой лицензией.
    Так что и то, и другое — это в чистом виде Java SE.


    1. Teapot
      20.04.2019 15:18

      Причём Oracle JDK — это сборка _подмножества_ OpenJDK.


  1. alexbel
    19.04.2019 16:05

    Сразу видно на главную русскоязычную Java конференцию никто не ходил habr.com/ru/company/jugru/blog/447498 а там можно было пообщаться с разработчиками Liberica JDK. Liberica JDK — делается в Санкт-Петербурге бывшими инженерами Oracle. Компания BellSoft, которая делает Liberica JDK за два года существования вошла в топ-5 самых активных контрибьюторов OpenJDK, вместе с Oracle, Red Hat, SAP и Google. BellSoft поддерживает JetBrains Runtime, на котором работают продукты IntelliJ. Liberica JDK верифицирована TCK тестами и гарантировано соответствует стандарту Java SE, в отличие от Adopt. Естественно, Liberica JDK бесплатна. https://bell-sw.com


    1. KnockKnock
      20.04.2019 04:53

      Вот я же говорил, что Liberica как-то не на слуху совсем, а Adopt в первых рядах рекомендуемых. :)

      Ещё из плюсов: есть сборки и под arm32, наконец доступна в SDKMANе.


    1. Skerrigan
      22.04.2019 05:39

      Никак не претензия или «колкость», на самом деле интересно — за счет чего сущетствуют такие «аттракционы невиданной щедрости»?
      Просто нужны хорошие специалисты. А кто им «хлеба булку оплатит»?
      UPD: С WebDriver относительно все понятно — там «3,5 человека» двигают основу и на них выделяют копеечку «баузеро-производители». А тут как ситуация обстоит?


  1. Valle
    19.04.2019 17:54

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


    1. DSolodukhin
      19.04.2019 18:00

      как устанавливать ту OpenJDK

      sudo apt install openjdk-[version]-jdk
      Вся статья.


      1. klvov
        19.04.2019 21:23
        +1

        Казалось бы, все просто: скачиваем этот openjdk, распаковываем куда-нибудь, нацеливаем на него JAVA_HOME, прописываем bin в PATH. Начинаем запускать:

        * NetBeans 8.2 не запускается
        * Oracle SQL Developer не запускается

        И еще неизвестно сколько софта тоже наверное не запускается, непонятно почему. Привет, бубен.


        1. Teapot
          20.04.2019 15:17

          Бубен не нужен, просто можно взять дистрибутив с нормальным инсталлятором, например Либерику.


          1. klvov
            21.04.2019 11:10

            Интереса ради проверил: да, с JDK от Либерики это все запускается. Для того, чтобы запустился sqldeveloper, пришлось скопировать msvcr120.dll рядом под именем msvcr100.dll, видимо там у него внутри это где-то захардкожено, или у меня версия старая. Спасибо.


        1. sergey-gornostaev
          20.04.2019 18:10

          NetBeans не запускается потому, что

          The 8.2 version of the IDE cannot be installed or run on the JDK older than JDK 8.


      1. KnockKnock
        21.04.2019 03:20

        Не всё так просто. Насколько я знаю, в этих репозиториях лежит их собственная сборка OpenJDK (не так давно, например, при установке jdk 11 устанавливалась 10я версия — что смогли, то и собрали).
        Поэтому для получения именно Oracle OpenJDK придётся повозиться.
        Проще взять Liberica JDK — у них всё серьёзно и хорошо.


  1. rjhdby
    19.04.2019 22:00

    OpenJDK полностью бесплатная и распространяется под GPL.

    Знатоки, просветите такой момент — код, написанный/работающий с использованием OpenJDK, под GPL не попадает?


    1. Teapot
      20.04.2019 15:16
      +1

      Не попадает.


    1. KnockKnock
      21.04.2019 03:25

      У OpenJDK лицензия GPLv2 с classpath exception — "сторонний" код под неё не попадает.


  1. dominigato
    20.04.2019 01:06
    +1

    Это только мне кажется что Оракл как-то неуклюже пытается «монетизировать» джаву? То суды с Гуглом, теперь это. Такие движения немного нервируют и заставляют задуматься стоит ли связываться с технологией, в которой слишком часто меняются правила игры. Учитывая истории с Ораклом и опенсурсом как-то не ждешь ничего хорошего.
    Хотя это может только мое предвзятое мнение.


    1. DieSlogan
      20.04.2019 08:29
      +2

      Вы не один такой. Шаг за шагом они гнут свою линию с выбиванием денег. Сокращают lifetime бесплатных версий, убивают обратную совместимость, все для того чтобы не нытьём так катанием им занесли конвертик.


  1. kuftachev
    20.04.2019 03:19
    -2

    Oracle просто продвигает .Net. Кто теперь в здравом уме начнет новый проект на Java?


    1. DieSlogan
      20.04.2019 08:20
      +1

      Иногда складывается ощущение, что кто-то переместился в прошлое и что-то там поправил. Вот ещё недавно у нас 2 непримиримых лагеря, а сегодня уже читаешь документацию на сайте Microsoft о том, как поднять Linux dotNET приложение в качестве демона


      1. vasyan
        21.04.2019 04:17

        MS просто хотят продавать облака, а не софт, как Oracle.