我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 383|回复: 0

在 Docker 上运行 Java 程序?你已经触犯法律!

[复制链接]

该用户从未签到

139

主题

157

回帖

102

积分

二级逆天

积分
102

社区居民忠实会员社区劳模原创达人终身成就奖

QQ
发表于 2016-3-15 06:11:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

您需要 登录 才可以下载或查看,没有账号?立即注册

×
在 Docker 上运行 Java 程序?你已经触犯法律!
oschina    3天前
Blog_Docker_W

小伙伴们惊呆了!!!

来自国外媒体 takipi 的报道:在 Docker 容器中运行 Oracle Java 可能会让你承担法律责任,为什么呢?

Oracle 和 Linux 之间的关系跌宕起伏,为了在多数的 Linux 发行版使用 Oracle 的 JDK,用户都要经过一番折腾。而如果你使用 Docker ,那么问题更麻烦。因为你可能已经在未知的情况下违反了 Oracle 的许可协议。本文将为了解开其中详情以及帮你在使用 Docker 和 Java 时做出明智的决定。

首先 Java 在 Linux 是怎么开始成为一个问题的?

Oracle 的 Java 在多数 Linux 发行版中都不可用,这是因为 Oracle 关闭了“Operating System Distributor License for Java” (JDL) 协议。这意味着标准的软件仓库就不能使用 Java 和 Oracle Java。但用户可以选择自行下载并安装使用,这比直接从仓库中获取要麻烦得多。在 Oracle 的许可证协议中 C 段有这么一句话:

“Oracle grants you a non-exclusive, non-transferable, limited license without fees to reproduce and distribute the Software, provided that (i) you distribute the Software complete and unmodified and only bundled as part of, and for the sole purpose of running, your Programs…”

Oracle 的 JDK 是可以免费下载和使用,而且可免费用于商业用途。该协议的问题主要是针对于发行版。更深入的了解 JDK readme file 文档后,我们知道 Oracle 只允许分发未经修改过的 JRE 或者 JDK 版本,而且必须遵循要求去保留必须的文件。

这个要求导致多数的 Linux 发行版没法再其自己的渠道上重新分发 Oracle 的 Java 。Debian 用户可以下载 Oracle Java 的 tar 包,并使用 java-package 进行安装。CentOS 要求用户下载 rpm 包,这样用户可以在下载过程中手工的确认遵循 Oracle 的许可证。而红帽提供了如何添加一个 Oracle 维护的仓库的指示说明。

不速之客 —— OpenJDK

在我们之前的文章中,我们向你展示 如何通过 Alpine Linux 让 Docker 瘦身 7 倍 的文章,文章中使用了一个更小的 Java 映像。但我们在 Twitter 上收到的一个评论引起了我们的注意。这个评论来自于 Ben Evans ,这是 jClarity 的联合创始人,也是 infoQ 的 Java 编辑和 O'Reilly 媒体的作者。Ben 展示了 Oracle 许可证中注明的一些问题,以及使用 OpenJDK 构建 Java 的 Docker 映像。

@takipid @docker  Your blogpost gives advice that expressly violates the license for  Oracle Java & leaves your readers with legal liability — Ben Evans  (@kittylyst) January 27, 2016

Ben 通过 Debian 和 Ubuntu OpenJDK 进一步的解释了这个问题:“因此这几乎不可能在源码树种提交这类的内容。”

Ben 补充说该二进制文件没有通过任何来自 Oracle 、红帽或者是  Azul 的 Java 兼容性和一致性的测试。

不允许重新分发?不能用 Docker!

No redistribution? No Docker

你会发现很容易就违反 Oracle 的许可证,特别是你在下载 Java 文件的时候。这是使用 Docker 后让问题变得更纠结。许可证中的限制部分直接影响了 Docker 映像对已编译的 Java 版本的使用。

简单的说,如果你下载一个 Dockerfile 包含了 Oracle 的 JDK,这就是协议所不允许的!映像文件没有包含来自 Oracle 要求必须的文件,或者是他们会插入一个代码可以自动同意 Oracle 的条款。而当你从官网上下载 Oracle JDK 时,你需要手工点击一个复选框来同意 Oracle 的条款。而一旦 Docker 映像使用了那个自动同意条款的代码,那么你就不会意识到有这个条款的存在。

所以这可能就是违法的,请勿在家里尝试!

如上面所说,这个代码包含两个主要的问题:

代码屏蔽了你需要手工同意条款的过程

移除了很多来自安装包中必须的元素(为了减小 Docker 映像的体积)

Oracle 的许可证非常不友好,不是吗?

怎么才能成为一个守法的 Java 用户?

你有两个选择:

我行我素。这意味着你不遵守 Oracle 许可证,旧习难改,哈哈

改用 OpenJDK,很多用户会选择这个开源产品,它的许可证友好得多

当选择第二种方式时,你可能会碰到一些 OpenJDK 映像无法被社区支持的问题,这些问题主要介于 Java 版本和官方尚未发行的之间。

如果你不确定如何开始,你可以选择红帽的 IcedTea,这是被自由软件基金会推荐的,或者使用 Azul System Zulu。

写在最后

现在你正面临很严峻的问题:该如何选择? 一些开发者会选择 OpenJDK 社区,因为可以根据自身需要进行修改它的任意元素来让他们的代码可以正常运行。但正如前面 Ben 提到的,使用 OpenJDK 可能会引发很多很奇怪的问题。

不管怎样,这是你自己的选择,我们都知道许可证条款无法阻止任何人使用一个特定的产品,也无法阻止你使用特定产品。我们只会将其中的问题向你详细的解释,让你知道在下一个项目中该如何做决策!

开源中国原创翻译,未经许可请勿转载!

更多关于: Docker 的详细信息

相关资讯
Docker 1.10.3 正式版发布
Docker 1.10.3 RC1 和 RC2 发布
使用 Docker 容器应该避免的 10 个事情
Docker v1.10.2 正式版发布
Docker v1.10.2-rc1 发布
Docker v1.10.1 发布,主要是 Bug 修复和维护
Hyper 0.5 发布,基于Hypervisor的Docker引擎
Docker v1.10 正式版 发布
Docker v1.10.0-rc3 发布
Docker v1.10.0-rc2 发布
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

每日签到,有金币领取。


Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

( 闽ICP备2024076463号-1 ) 论坛技术支持QQ群171867948 ,论坛问题,充值问题请联系QQ1308068381

平平安安
TOP
快速回复 返回顶部 返回列表