#navi_header|Java| 以下のカスタマイズを行ったJREを、独自開発のJavaアプリケーションと共に頒布できるか調べたメモ。 - 次のファイルを含む : Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files for JDK/JRE 8 Download -- http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html - "lib/security/java.security" をカスタマイズしている。 頒布したい要件: - Windows用の64bitのJREバージョン8を頒布したい。 - 頒布対象は社内 + 社外 注意:著者個人の見解であり、Oracleに確認した結果ではありません。 ''先に結論だけ書くと、上記カスタマイズを行ったJREを、独自開発のJavaアプリケーションと共に頒布することは「できない」と思われる。'' #more|| まずJRE単体について: - Javaのライセンスと配布に関する情報 -- https://www.java.com/ja/download/faq/distribution.xml -- JREのコピーを社内のコンピュータに頒布することは問題ないと思われる。社内のイントラネットサーバにアップロードして頒布もOKと思われる。 -- JDKについては「バイナリ・コード・ライセンス」の条項に従って同じCD-ROMで頒布できるとのこと。 --- この辺は、書籍にJDK/JREを含めて頒布するシナリオを想定していると思われる。 「バイナリ・コード・ライセンス」というのが出てきたが、こちらになる: - BCL For Java SE -- http://www.oracle.com/technetwork/java/javase/terms/license/index.html - Java SEプラットフォーム製品及びJavaFXに関するオラクル・バイナリ・コード・ライセンス契約 【日本語参考訳】 -- http://www.oracle.com/technetwork/jp/licenses/javase-dev-license-2595998-ja.html ここで今回の観点で気になるのが以下の箇所: >C.ソフトウェアの頒布許可 >本契約の条件、並びにREADMEファイルに規定されている制限事項及び除外事項 >(本補足条項の再頒布に関するJavaテクノロジーに関する制限事項を含むが、これに限定されません) >に従って、オラクルはお客様に対し、以下を条件として、本ソフトウェアを複製及び頒布するための非独占的、 >譲渡不能の限定的なライセンスを無償で許諾します。 >(i)本ソフトウェアを、完全かつ改変されないまま、プログラムの一部としてバンドルされた状態でのみ、 >かつお客様のプログラムを実行することを唯一の目的として、頒布すること、 >(ii)プログラムが重要かつ主要な機能を本ソフトウェアに与えること、 >(iii)本ソフトウェアのコンポーネントを取り替える目的で追加的なソフトウェアを頒布しないこと 今回やろうとしていることは、1. 私が作ったJavaアプリをJREと一緒に頒布する、2. ただし、それを受け取った利用者がさらに他の利用者に頒布することはNGとしたい、ために「C.ソフトウェアの頒布許可」が該当するう。 ちなみに、2. で再頒布を許可する場合は、「D.再頒布可能ファイルの頒布許可」も適用されるが今回は気にしなくて良いと思われる。 この「C.」において、今回問題となりそうなのが(i)と(iii)である。 - "(i)本ソフトウェアを、完全かつ改変されないまま" -- → "lib/security/java.security" をカスタマイズしたものを「完全かつ改変されないまま」と言えるのか? - "(iii)本ソフトウェアのコンポーネントを取り替える目的で追加的なソフトウェアを頒布しないこと" -- → JCE Unlimited Strength ファイルでjarを上書きすることを前提するのは、「本ソフトウェアのコンポーネントを取り替える目的」に抵触するのでは? さて、「バイナリ・コード・ライセンス」で寄り道してみたが、これはJDKについての文章からたどり着いた。 元の「Javaのライセンスと配布に関する情報」だけでは、JREについても「バイナリ・コード・ライセンス」が適用されるか曖昧である。 そこでJREのダウンロードページにアクセスすると、「エンド・ユーザー・ライセンス契約」のリンク先が「Oracle Binary Code License Agreement for the Java SE Platform Products and JavaFX」になっていた。 - https://www.java.com/ja/download/windows-64bit.jsp つまり、JREについても「バイナリ・コード・ライセンス」が適用される。従ってJREについても上記の「C.ソフトウェアの頒布許可」の(i), (iii)が懸念されることになる。 ここで一旦整理すると・・・ - JRE/JDK ともに「バイナリ・コード・ライセンス」が適用される。 - ''今回のカスタマイズ要望は、「バイナリ・コード・ライセンス」の「C.ソフトウェアの頒布許可」の(i), (iii)に抵触する可能性がある。'' JRE単体だけでも、早くも雲行きが怪しい。では JCE Unlimited Strength についてはどうか? - Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files for JDK/JRE 8 Download -- http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html このページからだと、「バイナリ・コード・ライセンス」が適用されるように見える。 しかしここで、JRE側のREADMEで「待った」がかかる。 - JRE 8 README -- http://www.oracle.com/technetwork/java/javase/jre-8-readme-2095710.html 「Unlimited Strength Java Cryptography Extension」のところで以下のように、利用可能な居住地域に住んでいる人がJDKのWebサイトでJCE Unlimited Strengthファイルを入手する、と書かれている。 >An unlimited strength version of these files indicating no restrictions on cryptographic strengths >is available on the JDK web site for those living in eligible countries. >Those living in eligible countries may download the unlimited strength version >and replace the strong cryptography jar files with the unlimited strength files. もともとUnlimited~の主旨としては暗号強度を高める目的であり、国際情勢的にそれが許される地域・許されない地域があることから、無制限な再頒布は認められないものと考えるのが妥当だろう。 「バイナリ・コード・ライセンス」の「C.ソフトウェアの頒布許可」では、READMEファイルに規定されている制限事項及び除外事項に従うことを要求していることから、JREの再頒布についてもJRE8の上記READMEに従う必要がある。 つまり、Unlimited~はJDKのWebサイトから入手することとなり、独自開発のJavaアプリケーションにJREと共に含めることはできない、と読み解くのが自然だろう。 ''まとめると、以下のカスタマイズを行ったJREを、独自開発のJavaアプリケーションと共に頒布することは「できない」と考えられる。'' - "Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 8" を含む。 -- → JREに適用されるバイナリ・コード・ライセンスおよびJRE8のREADMEより、Unlimited~はJDKのWebサイト経由で利用者自身が入手する形でないと駄目。 -- → また、バイナリ・コード・ライセンスの「C.」の(iii)の条文に抵触する恐れがある。 - "lib/security/java.security" をカスタマイズしている。 -- → JREに適用されるバイナリ・コード・ライセンスの「C.」の(i)の条文に抵触する恐れがある。 もともと、Java実行環境の設定を簡単に統一するために調べてみたのが動機であるが、上記の通りカスタマイズ済みのJREをパッケージングして一括配布する道は閉ざされていると考えたほうが良さそううである。 他の方法、例えば設定ファイルやファイル配置を自動調整してくれるような、独自またはサードパーティのアプリケーションの導入によるJava環境構築のガイド・自動化を模索してみようと思う。 余談:Unlimited~を含めず、設定ファイルも含めてJREに手を加えずそのままバンドルするのであれば、問題はない。 実際、JDKのドキュメントの以下のセクションで、独自開発のJavaアプリケーションにJREをバンドルして自己完結型のパッケージングを行う方法が解説されている。これに従えば、オリジナルのJREのコピーを含んだインストーラを作成し、バイナリ・コード・ライセンスに適合した形で再頒布および再頒布したファイルのさらなる再頒布を行うことが可能になると思われる。 - 自己完結型アプリケーションのパッケージ化 -- https://docs.oracle.com/javase/jp/8/docs/technotes/guides/deploy/self-contained-packaging.html#BCGIBBCI #navi_footer|Java|