Oracle Java SEの有償化に伴うOpenJDKへの切り替えの案内

[令和元年7月31日更新]

本記事は京都教育大学(以下、本学)教職員および学生向けの案内として記載しています。他大学様でも参考にしていただいても構いませんが、内容について本学および情報処理センターが保証するものではありません。特にライセンス数算出や費用等についてはOracle社からの正式回答のみが正になりますので、Oracle Java SEの継続利用をお考えの方はOracle社へお問い合わせください。(本学教職員は情報処理センターにご相談ください。)

なお、記載内容は学内での利用(商用ユーザーとしての利用)を前提としているため、一般の個人ユーザーとしての利用には当てはまりません。予めご了承ください。

Oracle Java SEの有償化について

※ Oracle社の視点ではリリース・モデルの変更にすぎませんが、利用者視点からは実施的な有償化になります。

参考: JDKの新しいリリース・モデル、および提供ライセンスについて

Oracle社の方針により、商用ユーザーへのOracle Java SE 8のアップデートの無償提供が2019年1月末をもって終了しました(個人ユーザーは2020年12月末まで)。学内での利用は原則商用ユーザーに該当するため、別途Oracle社と有償サポートを締結しない限り、脆弱性が修正されたアップデート(Oracle Java SE 8 211/212以降)を使用できなくなります※。有償サポートを締結しない場合は、代替ソフトウェアに切り替えてください。

※ 誰でもOracle Java SE 8 211/212以降やOracel Java SE 11以降を入手することは可能ですが、開発等特定目的以外の使用は、高額のライセンス費用(後述の算出例参考)を請求される可能性があります。

参考: Oracle Java SE サポート・ロードマップ

商用ユーザー向けの最後の無償バージョンはJava 8 Update 201(8u201)とJava 8 Update 202(8u202)です。このバージョンは商用ユーザーであっても無償で使用し続けることができます。ただし、今後脆弱性を修正したバージョンの無償提供は行われません。最新のOracle Java SE 11を含め、2019年2月1日以降にリリースされるOracle Java SEは全て有償になります。Oracle社からダウンロードできる最新のJavaは、開発・テスト・試作・デモの目的以外には使用できません。今後、Oracle Java SEを無償で使用する方法はありません。

古いバージョンを使用し続けることは可能ですが、脆弱性の修正等が行われず、大変危険です。別途セキュリティついて担保された状態でない限り、使用してしてはいけません。

【参考】Oracleのライセンス費用算出例

これから費用算出例を出しますが、これらはOracle社からの正式な見積もりではありません。似たような事例でも、僅かな違いでこれより高額になる場合もあれば低額になる場合もあります。予算割当を検討する前に、正式な見積もりを依頼することを推奨します。

ライセンス費用は下記に記載されています。

参考: オラクル Java SE Subscription FAQ

料金は月額で表示されていますが「契約は年単位になる」という情報があります(Oracle社のページで確認できていません)。また、税込か税抜か明記されていません。以下では、表の価格は税抜とし、2019年10月以降の消費税10%増税後、かつ、1年間での契約、で算出します。

Java SE Desktop Subscriptionの場合

ネットワークから切り離され、使用できる人がたった一人しかいないPCであれば、Named User Plusにおけるユーザー数は1人です。

1ユーザー: 3,960円/年

しかし、研究室の共用PC等であれば、その使用できる人全員分、例えば、研究室所属が20人いれば20ライセンス必要になります。

20ユーザー: 79,200円/年

人数を算出する際に実際に使用されている人数ではない事に注意してください。特に、ドメイン参加しているPCで使用する場合、日頃のメインの利用者が一人であっても、そのPCにドメインユーザーとしてログインできる人全員分のライセンスが必要になります。(別途アクセス制限等を設けて、実質使用できないようにした場合にライセンス数を削減できるかは不明です。制限方法によっては、削減が認められない可能性もあります。)

ネットワークに繋がっている場合は更に注意が必要です。ネットワークを介してアクセスできる人数になるからです。学内どこからでもアクセス可能になってしまうJavaプログラムをPC上で動かした場合、大学全体の人数となります。学生・教職員数が3000人とすれば、3000人分必要です。

3000ユーザー: 8,316,000円/年

もし、インターネットから誰でも自由にアクセス可能になっている場合は、インターネット上の全人口がユーザー数になります。これに加えて、実際に人ではない装置からのアクセスも1人と数える場合があります。

ネットワーク等を介した時にどれぐらいのライセンス数が必要になるかどうかはアプリの作りによるため、一概には言えません。ライセンスとしてはフロントエンド側で数えるとあるため、Java Servletを動かして、リバースプロキシを通じた間接的なアクセスであっても、リバースプロキシへのアクセスする人数で数えると考えられます。では、ファイルサーバーの管理ソフトウェアがJavaアプリであった場合、実際に管理画面にアクセスする権限を持っている高々数人分と考えることもできますが、管理ソフトウェアによるなんらかの計算の結果がファイルサーバーを通してクライアントへ伝わっていると考えれば、ファイルサーバーは一種のフロントエンドとも考えることができます。そのように判断される場合は、ファイルサーバーへのアクセスするユーザー全員分必要になります。

このようにライセンス数はアプリの作りや運用形態によって変わるため、ネットワークに接続されたPCにJava SE Desktop Subscriptionを適用する場合は、次のようにすることをお勧めします。

  • 動作させる予定のJavaアプリ全てについてOracle社に確認し、アプリごとに正確なユーザー数を算出するようにしてください。なお、ネットワーク通信機能が追加されるなどのアプリの仕様が変更になった場合は、その都度確認を行ってください。
  • 予定外のJavaアプリは動作させないように、PC側で制限、または、利用者に徹底させてください。

学生が、研究室のPCで、ネットワークゲームの研究だといってMinecraftのJavaサーバーを動作させ、インターネット上に公開、他大学の友人から接続してプレイしてもらっていた…なんてことが起きた場合、単純に計算すれば、その時にMinecraftのJavaサーバーに接続可能だった人数1億7600万人(2019年5月17日発表のMinecraft総売上数より)分のライセンスが必要になることになります。

1億7600万ユーザー(本来は個別見積もりだが150円/月と仮定):  約3000億円/年

Java SE Subscitionの場合

こちらは計算も単純で、アプリの形態によらないため、アプリを限定できない、人数を確定できない、アプリの仕様が変更される可能性があると言った場合、こちらを選択することをお勧めします。算出はJavaが動作する可能性があるサーバーに搭載されたプロセッサの応じた個数です。ただし、注意事項があります。

  • プロセサッサの個数ではなく、コア総数にプロセッサの種類ごとの係数をかけた値の総数です。1CPUだからといって1個とは限りません。
  • 物理的に動作する可能性があるCPU毎に必要です。仮想環境であっても、仮想CPU数やコア数ではなく、その仮想マシンが動作する可能性があるCPU自体を数えることになります。仮想でクラスタや冗長化している場合は、動作する可能性がある全てのサーバーのCPUが対象です。

コア係数は https://www.oracle.com/assets/processor-core-factor-table-070634.pdf に記載されています(2019年7月31日時点、予告なく変更される場合があります)。以下は各想定マシンとCPUの例です。

MacBook Pro - Intel Core i5 (4コア) 1個: 79,200円/年
デスクトップPC - Intel Core i5 8400 (6コア) 1個: 118,800円/年
ワークステーション - AMD Ryzen 9 3900X (12コア) 1個: 237,600円/年
仮想環境サーバー - Intel Xeon E5-2630v4 (10コア) 2個: 396,000円/年

仮想環境でクラスタを組んでいる場合、物理サーバー全て分が必要です。たとえば、Intel Xeon E5-2630v4 (10コア) 2個のサーバー3台構成の場合は、3台分全て必要になります。

仮想環境クラスタ - Intel Xeon E5-2630v4 (10コア) 2個 サーバー3台構成: 1,188,000円/年

Oracle Java SEのアンインストール

これまでJavaを使用したことがあれば、Oracle Java SEがインストールされている可能性があります。Javaが必要かどうかわからない場合、そのままアンインストールしてください。Javaが必要であることがわかっている場合でも、まずはアンインストールしてから、次の項で述べる無償の代替ソフトウェアを導入してください。

Oracle Java SEアンインストール手順

Windowsの場合

Oracle社が提供するアンインストールツールを使用します。アンイストールツールは下記からダウンロードできます。

https://www.java.com/ja/download/uninstalltool.jsp

アンインストールツールを実行し、検出されたすべてのJavaをアンイストールします。

上記は一般ユーザーが使用するJRE(Java Runtime Environment)のみアンインストールします。Javaの開発を行う等の理由でJDK(Java Development Kit)をインストールしている場合は、「設定」の「アプリ」や「コントロールパネル」の「プログラムと機能」からを開き、「Java SE Development Kit ...」という名前のアプリケーションをすべて削除します。よくわからない場合は、Javaと名のつく製品をすべてアンインストールしてください。

Macの場合

下記にアンインストール手順が記載されています。JDKについてはページ内にあるリンク先を参考にしてください。

https://www.java.com/ja/download/help/mac_uninstall_java.xml

Linuxの場合

最新のLinuxディストリビューションのJavaパッケージはOracle Java SEではなくOpenJDKです。Oracle社から手動でインストールしている場合は下記を参考にアンインストールします。

https://www.java.com/ja/download/help/linux_uninstall.xml

無償の代替ソフトウェア

JDK および JRE

無償でJavaを利用し続ける場合は、オープンソースで提供されているOpenJDKを利用してください。OpenJDKのバイナリはいくつか提供されており、提供元によってサポート期限が異なります。長期サポート(LTS)を表明しているバイナリを使用してください。2019年7月時点で長期間使用可能なバージョンはJava 8とJava 11です。

以下は推奨するJavaバイナリです。

名前 JDK/JRE バージョン JVM JavaFX 配布形態
AdoptOpenJDK JDK, JRE 8, 11 HotSpot, OpenJ9 × ZIP
Amazon Corretto JDK 8, 11 HotSpot 8:○
11:×
MSI(PATH設定なし)
Zulu JDK, JRE 8, 11 HotSpot △(ZuluFX) MSI(PATH設定あり), ZIP
Liberica JDK JDK 8, 11 HotSpot MSI(PATH設定あり), ZIP

※ JDKはJREの機能が含まれます。また、JDK 8にはJRE 8(jreフォルダ)が含まれます。
※ Java 8またはJava 11を使用してください。Java 7以下およびJava 9、Java 10はいずれもサポートが終了しています。検証等の目的以外では使用しないでください。
※ HotSpotはサン・マイクロシステムズが開発したオリジナルのJVM、OpenJ9はIBMが開発した別実装のJVMです。
※ MSIはインストーラーであるため、実行でインストールができます。ZIPの場合は手動で展開して設置する必要があります。同じインストーラーでも、Amazon CorrettoはPATHを設定しませんが、ZuluはPATHを設定します。ZIPの場合はPATH等は手動で設定する必要があります。
※ OpenJDkのサイトで配布されるバイナリ(Oracle社提供)はサポート期間は半年しかありません。検証等の目的以外での使用を推奨しません。
※ Zuluの無償版のサポート期間は明記されていませんが、有償版のZule Enterpriseは長期サポート(LTS)になっています。
※ Linuxの場合は、Linuxディストリビューション提供のOpenJDKを使用してください。

Oracle社がコンパイルして提供しているOracleバイナリOpenJDKは長期サポート(LTS)がありません。次のメジャーバージョンがリリースされた後は、脆弱性等の修正を行った前のバージョンを提供することはありません。そのため、半年毎にメジャーバージョンアップデートを行い、対応していく必要があります。Javaは後方互換性が高い方の言語ではありますが、過去にメジャーバージョンアップデートによって動作しないアプリケーションが多数あったことに注意してください。半年毎のメジャーバージョンアップデートに対応できる目処がついていない限り、推奨できません。

JavaFXを使用する場合

OpenJDKにはJavaFXが含まれていません。JavaFXはオープンソースプロジェクトとしてOpenJFXとして開発されています。バイナリによってはバンドルされてるものがあります。

  • AdoptOpenJDK(非推奨):
    JavaFXは含まれていません。Java 8の場合は、ソースコンパイル等の複雑な手順が必要なため推奨しません。Java 11の場合は、[OpenJFX](https://openjfx.io/)を使用できますが、パス等は自分で設定する必要があります。
  • Amazon Corretto:
    バージョン8ではJavaFXが含まれており、そのまま利用可能です。しかし、バージョン11に含まれていないため、OpenJFXを手動で設定する必要があります。
    ※ "C:\Program Files\Amazon Corretto\jre8"に配置されるバイナリにはJavaFXがありません。"C:\Program Files\Amazon Corretto\jdk1.8.0_*"(JDK)または"C:\Program Files\Amazon Corretto\jdk1.8.0_*\jre"(JRE)を使用してください。。
  • Zulu:
    通常のZuluにはJavaFXが含まれていませんが、別途JavaFXをバンドルしたZuluFXが用意されています。ZuluFXをお使いください。
  • Liberica JDK:
    JavaFXが含まれています。そのまま利用可能です。

Linuxの場合は、Linuxディストリビューション提供のOpenJFXパッケージを使用してください。

Javaアプレットを使用する場合

※ JavaアプレットはJava 8でのみ使用可能です。Java 11では使用できません。

OpenJDKにはブラウザへのJavaプラグインが含まれていませんが、アプレットビュワーを使用できます。Javaアプレットを使用する場合は、Java 8 JDKに付属するappletviewerを使用してください。

appletviewerで学外のサイトを直接アクセスする場合はプロキシ設定が必要です。"%USERPROFILE%\.appletviewer"(appletviewerを一度実行することで作成されます)を開き、次の行を記入してください。

```
http.proxyHost=proxy.kyokyo-u.ac.jp
http.proxyPort=8080
```

LinuxディストリビューションによってはブラウザのJavaプラグインがパッケージとして提供されている場合があります。

Java Web Startを使用する場合

※ Java Web StartはJava 8でのみ使用可能です。Java 11では使用できません。

OpenJDKにはJava Web Startが含まれていません。Java Web StartはオープンソースプロジェクトとしてIcedTea-Webとして開発されています。Windows用バイナリは下記からダウンロードが可能です。

http://icedtea.wildebeest.org/download/icedtea-web-binaries/1.7.1/windows/

Linuxの場合は、Linuxディストリビューション提供のIcedTea-Webを使用してください。

アプリケーション毎の対応

JabRef

JabRefはJava 8のみサポートしており、JavaFXが必要になります。そのため、Amazon CorrettoまたはZuluFXを使用することを推奨します。すでにJabRefをインストールしており、動作しなくなった場合は、インストーラーをそのまま実行してください。既存のJabRefにそのまま上書きインストールされます。インストールはOracle Java SEは削除した状態で行ってください。Oracle Java SEがインストールされた状態では、JabRefがOracle Java SEと紐付かれてしまい、Oracle Java SEを削除した後にJabRefが起動しなくなります。

Amazon Corretto 8を使用する場合

  1. Amazon Corretto 8をダウンロードし、インストールします。
  2. JabRefのインストーラを起動します。
  3. java.exeの場所が聞かれます。「配置する」を選択し、"C:\Program Files\Amazon Corretto\jdk1.8.0_192\jre\bin\java.exe"を指定します。※ ここで「ダウンロード」を選ぶと、古いJavaがダウンロードされ、"C:\Program Files\Common Files\i4j_jres"にインストールされるため、選んではいけません。

ZuluFXを使用する場合

  1. ZuluFX 8(JabRefが未対応のため、11は使用できません)をダウンロードし、適当な場所にファイルを展開します。
  2. JabRefのインストーラを起動します。
  3. java.exeの場所が聞かれます。「配置する」を選択し、"【ZuluFXを展開したフォルダ】\jre\bin\java.exe"を指定します。※ ここで「ダウンロード」を選ぶと、古いJavaがダウンロードされ、"C:\Program Files\Common Files\i4j_jres"にインストールされるため、選んではいけません。

インストーラーで「ダウンロード」してしまった場合

"C:\Program Files\Common Files\i4j_jres"または"C:\Program Files (x86)\Common Files\i4j_jres"というフォルダーがある場合は、削除してください。次にレジストリエディター(regedit.exe)を開き、"HKEY_CURRENT_USER\Software\ej-technologies"のキーをすべて削除してください。削除後、再度インストーラーを実行してください。

EclipseおよびEclipseベースアプリケーション

Java 8のJDKをインストールした場合は、インストール先にある"jre"フォルダーをeclipse.exeがあるフォルダーにそのままコピー、または、シンボリックリンクを張ります。Eclipseは"jre"フォルダーが存在すると、自動的にそのフォルダー内のJavaを使用するようになっています。jreというフォルダー名であれば、他のJDKやJREでも構いません。Eclipseのフォルダから"jre\bin\java.exe"としてjava.exeが実行できるようにしてください。

その他のアプリケーション

ほとんどの場合、環境変数JAVA_HOMEとPATHを設定することで動作します。詳しくはそれぞれのアプリケーションのマニュアルを参考にしてください。

有償ソフトウェア

有償ソフトウェアはサポートするバージョンが厳密に決められている場合があります。開発元に問い合わせてください。なお、古いJavaのまま使用し続けることはできません。問い合わせの結果、対応が不可能の判明した場合は、ソフトウェアの買い替えを検討してください。

FAQ

  • 研究室の自分専用のパソコンであれば、個人ユーザーとして継続利用することはできますか?
    ⇒ 個人ユーザーとして認められるのは、個人のパソコンである場合や、趣味やゲームといった業務以外での目的の場合です。業務時間内に大学の経費で購入したパソコンで利用した場合は、商用ユーザーに該当すると考えられます。
  • システム内部でJavaを使用しているようですが、どうしたらいいですか?
    ⇒ システムの開発者に問い合わせてください。
  • セキュリティが担保された状態であれば使用しても良いとありますが、どのような場合ですか?
    ⇒ 次の条件すべてに当てはまる場合は、既存の脆弱性および今後発見される脆弱性に対する攻撃を防止であると判断し、古いバージョンのJavaを使用し続けても構いません。
    1.    特定のアプリケーション専用であり、OSにインストールされておらず、関連付けもされていない。Windowsの場合は下記のような状態をいう。
      1. 「アプリと機能」または「プログラムと機能」の一覧に表示されない。
      2. java.exeにPATHが通っていない。コマンドプロンプトで`java -version`とコマンドがないとエラーになる。
      3. 環境変数JAVA_HOMEが設定されていない。
      4. Java関係の拡張子(.jar、.jnlp)に対して関連付けがされていない。jarファイル、jnplファイルをダブルクリックしても起動しない。
      5. インストールされている全てのブラウザでJavaプラグインが動作しない。
    2. 古いバージョンが対応していない全ての既存の脆弱性について、以下のいずれの対応を行っている。
      • アプリケーションが利用する範囲では影響を受けない脆弱性であることが説明できる。
      • アプリケーション側で対策を行うことで、脆弱性を回避している。
      • アプリケーション側でJavaのパッチや一部の代替を用意することで、脆弱性を回避している。
      • その他、サービス利用や運用に影響がない範囲での設定等により、脆弱性を回避している。
    3. アプリケーション開発者が、今後発見される脆弱性に対して、2.であげた対応のいずれかを行えるようにアプリケーションの保守を行うことを表明している。
    4. 脆弱性が発見された場合は、2.であげた対応のいずれかを行う体制がある。
  • Javaアプリケーションの開発にOracle Java SEを使用してもいいですか?
    ⇒ 開発目的であれば、無償でOracle Java SEを使用することができます。しかし、自分で開発したアプリケーションであっても、本番環境や日常的に利用するときもOracle Java SEを使用する場合は、有償サポートを結ぶ必要があります。