Статьи

Запуск Java на Docker?

Использование Oracle Java с Docker может привести к юридической ответственности. Зачем?

Отношения между Oracle и Linux имели свои взлеты и падения. Основные дистрибутивы требуют, чтобы пользователи перепрыгнули через несколько обручей, чтобы использовать Oracle Oracle. Если вы используете Docker, сюжет утолщается, и вы можете нарушать закон, нарушая лицензионное соглашение Oracle, даже не подозревая об этом. В этом посте мы поможем вам получить полную картину и принять обоснованное решение о вашем использовании Java и Docker. Давайте копаться в.

Как Java стала проблемой в Linux?

Oracle Java недоступна в большинстве дистрибутивов Linux из-за того, что Oracle устранила «Лицензию дистрибьютора операционной системы на Java» (JDL). Это означает, что в стандартных репозиториях программного обеспечения отсутствуют встроенные Java и Oracle Java. Пользователи по-прежнему могут использовать Oracle JDK, когда все, что им нужно сделать, это загрузить его самостоятельно, а не получать его непосредственно из хранилища. Однако, читая раздел C Лицензионного соглашения Oracle, мы встретили следующий текст:

«Oracle предоставляет вам неисключительную, не подлежащую передаче, ограниченную лицензию без платы за воспроизведение и распространение Программного обеспечения при условии, что (i) вы распространяете Программное обеспечение, полное и немодифицированное и поставляемое в комплекте как часть, и с единственной целью запуска , ваши программы… »

В то время как Oracle JDK можно загрузить бесплатно и бесплатно для коммерческого использования, соглашение вызывает вопрос, когда речь заходит о распространении. Более глубокое погружение в файл readme JDK указывает на то, что вы можете распространять только неизмененные версии JRE и JDK, если вы следуете инструкциям по хранению необходимых файлов.

Это требование приводит к тому, что большинство дистрибутивов Linux не хотят распространять Oracle Java по своим каналам. Пользователи Debian могут загрузить Oracle Java tar вручную из Oracle и использовать java-пакет для его установки. CentOS требует от пользователей загрузить rpm, предоставленный Oracle, на java.com, чтобы они могли принять лицензию вручную, в то время как RedHat предоставляет инструкции о том, как добавить репо, поддерживаемый Oracle.

«Загадочное мясо» строит OpenJDK

В одном из наших последних постов мы показали, как сделать ваш Docker 7x легче с Alpine Linux , используя меньший образ Java. Мы получили комментарий в Твиттере, который привлек наше внимание. Комментарий поступил от Бена Эванса, соучредителя и технического сотрудника jClarity, редактора Java в infoQ и автора в O’Reilly Media. Бен пролил свет на лицензионное соглашение Oracle и сборки OpenJDK, используемые в популярных образах Java Docker.

Далее Бен объяснил, что проблема со сборками Debian или Ubuntu OpenJDK заключается в том, что они не соответствуют какой-либо известной версии Java; «Поэтому практически невозможно узнать, какой коммит в дереве исходников соответствуют двоичным файлам Debian / Ubuntu».

Бен добавил, что двоичные файлы не прошли ни одного из тестов на совместимость и соответствие, которым подвергались сертифицированные двоичные файлы Java (от Oracle, Red Hat или Azul).

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

Нет перераспределения? Нет докера

Вы обнаружите, что лицензионное соглашение Oracle очень легко нарушить, особенно если вы скачиваете файлы Java от кого-то другого. Именно здесь Docker становится еще одной частью уже запутанных отношений: раздел перераспределения в соглашении напрямую влияет на образы Docker, использующие скомпилированную версию Java.

Проще говоря, если вы загружаете Dockerfile, содержащий Oracle JDK, вы не удерживаете свою часть в соглашении. Изображение может не содержать требуемых файлов от Oracle, или тот, кто его создал, мог вставить файл cookie, который автоматически подтверждает условия и положения Oracle для вас. Когда вы загружаете Oracle JDK с официального сайта, вам необходимо вручную щелкнуть поле, чтобы утвердить положения и условия. Добавляя cookie, пользователь не знает условий или необходимости их одобрения.

То, что вы собираетесь увидеть, вероятно, незаконно. Не пытайтесь сделать это дома:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# Download and unarchive Java
RUN mkdir /opt && curl -jksSLH "Cookie: oraclelicense=accept-securebackup-cookie"\
  http://download.oracle.com/otn-pub/java/jdk/7u79-b15/jdk-7u79-linux-x64.tar.gz \
    | tar -xzf - -C /opt &&\
    ln -s /opt/jdk1.7.0_79 /opt/jdk &&\
    rm -rf /opt/jdk/*src.zip \
           /opt/jdk/lib/missioncontrol \
           /opt/jdk/lib/visualvm \
           /opt/jdk/lib/*javafx* \
           /opt/jdk/jre/lib/plugin.jar \
           /opt/jdk/jre/lib/ext/jfxrt.jar \
           /opt/jdk/jre/bin/javaws \
           /opt/jdk/jre/lib/javaws.jar \
           /opt/jdk/jre/lib/desktop \
           /opt/jdk/jre/plugin \
           /opt/jdk/jre/lib/deploy* \
           /opt/jdk/jre/lib/*javafx* \
           /opt/jdk/jre/lib/*jfx* \
           /opt/jdk/jre/lib/amd64/libdecora_sse.so \
           /opt/jdk/jre/lib/amd64/libprism_*.so \
           /opt/jdk/jre/lib/amd64/libfxplugins.so \
           /opt/jdk/jre/lib/amd64/libglass.so \
           /opt/jdk/jre/lib/amd64/libgstreamer-lite.so \
           /opt/jdk/jre/lib/amd64/libjavafx*.so \
           /opt/jdk/jre/lib/amd64/libjfx*.so \
    && addgroup -g 999 app && adduser -D  -G app -s /bin/false -u 999 app \
    && rm -rf /tmp/* \
    && rm -rf /var/cache/apk/* \
    && echo 'hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4' >> /etc/nsswitch.conf

Как упоминалось выше, этот код содержит 2 основных проблемы:

  • Файл cookie, который отменяет необходимость подтверждения лицензии.
  • Удаление нескольких элементов из установочного пакета (для минимизации дискового пространства образа Docker)

Не очень ли она подходит для Oracle?

Как вы можете оставаться законопослушным пользователем Java?

У вас есть 2 варианта:

  • Делай что делаешь. Это означает, что вы можете не следовать лицензии Oracle. Однако до сих пор это работало для вас, и мы все знаем, что старые привычки умирают очень сильно, и вы, вероятно, не начнете перекомпилировать все с нуля.
  • Переключиться на OpenJDK. Многие пользователи уже используют опцию Java с открытым исходным кодом, и вы будете рады прочитать, что пользовательское лицензионное соглашение гораздо более дружественное и простое:

    «В отличие от этого, общедоступная лицензия GNU предназначена для того, чтобы гарантировать вам свободу делиться и изменять бесплатное программное обеспечение — чтобы гарантировать, что программное обеспечение является бесплатным для всех его пользователей».

Выбирая второй вариант, вы должны учитывать, что некоторые изображения OpenJDK не поддерживаются сообществом и могут содержать промежуточные версии Java, которые еще официально не выпущены.

Если вы не уверены, с чего начать, вы можете выбрать RedHat IcedTea, рекомендованный Free Software Foundation, или Azul System Zulu.

Последние мысли

Теперь перед вами стоит сложный вопрос: что делать / выбирать? Некоторые разработчики выбирают сообщество OpenJDK, благодаря возможности изменять, изменять и добавлять элементы, которые им нужны для того, чтобы их код работал. Но, как уже упоминал Бен, при использовании OpenJDK вы можете обнаружить, что пытаетесь обнаружить ошибку в «таинственной сборке» — это даже не ваша вина.

Выбор за вами. Мы все знаем, что условия соглашений никогда не мешали никому использовать определенный продукт, и мы уверены, что это не остановит вас сейчас. Мы можем только изложить факты и варианты, чтобы вы знали, на что обращать внимание при выборе изображения для вашего следующего проекта.

Ссылка: Запуск Java на Docker? Вы нарушаете закон от нашего партнера JCG Хенна Идана в блоге Takipi .