Использование 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 вы можете обнаружить, что пытаетесь обнаружить ошибку в «таинственной сборке» — это даже не ваша вина.
Выбор за вами. Мы все знаем, что условия соглашений никогда не мешали никому использовать определенный продукт, и мы уверены, что это не остановит вас сейчас. Мы можем только изложить факты и варианты, чтобы вы знали, на что обращать внимание при выборе изображения для вашего следующего проекта.