足球资料库数据/孙祥/nba五佳球/足球直播哪个平台好 - cctv5今日现场直播

首頁 > 知識庫 > 正文

在 Docker 上運行 Java 程序?你已經觸犯法律!
2016-03-14 21:48:33   來源: mengyidan1988   評論:0 點擊:

小伙伴們驚呆了!!! 來自國外媒體 takipi 的報道:在 Docker 容器中運行 Oracle Java 可能會讓你承擔法律責任,為什么呢? Oracle 和 Linux 之間的關系跌宕起伏,為了在多數的 Linux 發行版使用 Oracle 的 JDK,用戶都要經過一番折騰。而如果你使用 Docker ,那么問題更麻煩。因為你可能已經在未知的情況下違反了 Oracle 的許可協議。本文



小伙伴們驚呆了!!!

來自國外媒體 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 可能會引發很多很奇怪的問題。

不管怎樣,這是你自己的選擇,我們都知道許可證條款無法阻止任何人使用一個特定的產品,也無法阻止你使用特定產品。我們只會將其中的問題向你詳細的解釋,讓你知道在下一個項目中該如何做決策!

本文來自:開源中國

相關熱詞搜索:java docker language 編程語言

上一篇:單個容器價值有限,多容器的難點和價值在哪里
下一篇:編譯器LLVM3.8發布

分享到: 收藏