アップデート終了でどうなる、Java有償化問題
「Oracle JDK 8 の公開アップデート終了」、いわゆるJava有償化問題。この方針は昨年オラクルから発表され、2018年11月現在すでに無償版Oracle JDKの配布は終了しています。今回の方針転換により何が変わったのか、そしてJavaユーザーの今後の対応方法について解説します。
Javaは、オブジェクト指向型言語のさきがけとして開発され、以来、世界で最もよく使われているプログラミング言語です。誰でも無料で使うことができ、OS依存がなく、大規模なプログラムでも開発しやすいという特長から、多くのWebシステムや金融系システム、Androidアプリなどで使われてきました。
しかしながら、2017年にオラクルより大きな方針変更の発表がされ、2019年1月より公開ダウンロードサイトにおけるアップデート提供の終了を迎えることになった Java SE 8。この上で稼働している Web アプリケーションが、重要なサービスや業務を支えている場合は、何かしらの対応が必要になるといえます。
この記事の目次
従来のJDKとどのように変わるのか?
まず、オープンソースで無償のOpen JDKと、オラクルの提供するOracle JDKについての違いをおさらいしましょう。
- 従来のJDKリリース
<画像出典:SlideShare「JDK: 新しいリリースモデル解説」>
Open JDKは、Open JDKコミュニティが開発していて、同コミュニティサイトから自由にダウンロード可能なJDKです。
Oracle JDKは、オラクルが開発し、オラクルから配布されているJDKです。
提供元の違いはあっても実際にはOpen JDKにもオラクルがソースを提供しており、両者の機能の内容は大きくは変わらないものとなっていました。
従来、図にあるように、Open JDKにはOracle JDKと同じソースコードが提供されていたもののすぐに使えるバイナリの状態にはなっていませんでした。そのためユーザーが自分でバイナリを生成する必要がありました。
そしてOracle JDKは、そのOpen JDKにインストーラなどのツール類を入れてバイナリとした状態で提供されていました。
Open JDKとOracle JDKは、機能面で大差がないものの”別物”といえる状態でした。
また、ライセンスは、Open JDKは「GNU General Public License(GPL) v2.0」という無償利用可能で再配布可能なライセンス、Oracle JDKは、無償利用可能ですがBCLと呼ばれる再配布に関して限定事項のあるライセンスでした。(ライセンスに関しては後述します。)
- これからのJDKリリース
<画像出典:SlideShare「JDK: 新しいリリースモデル解説」>
新しいリリースでは、Open JDKでもオラクルがバイナリ生成まで行うことになりました。ダウンロード元はOpen JDKのコミュニティサイトです。
Oracle JDKでもこれまでと変わらずバイナリが提供されます。両者の中身は全く同じものとなったのです。
それぞれのライセンスについては、Open JDKは従来と変わらず無償で利用でき再配布可能なライセンス、Oracle JDKは、有償提供の商用ライセンスとなります。
つまりOpen JDKは無償で再配布可能ながら、従来のOracle JDKと同じ機能を持つことになりました。従来のOracle JDKが無償利用で再配布可能となったのと同じだということです。
ここまでの内容では、「今までのOracle JDKがOpen JDKに変わっただけで、何も問題ないじゃないか」と思うかもしれませんが、実はここからが本題です。
オラクルが発表したリリースモデルの変更には、上記の内容に加えてリリースサイクルと無償サポート期間の変更が含まれており、こちらが商用ユーザーを悩ます内容となっています。
これらの変更により現在Javaを使用しているシステムには、少なからず影響がおよびます。
さて、現行のJavaユーザーは今後、どのように対応すればよいのでしょうか。リリースサイクルと無償サポート期間の変更について詳しく解説します。正しく理解して、対応案を検討しましょう。
リリースサイクルの変更
6か月に1回の定期リリースになり無償サポートは同期間で終了
これまで、JDKのリリースは約3年の周期で、新機能追加されたメジャーバージョンアップがなされていました。そのリリースサイクルが6か月に1度に変更されます。リリース月は毎年3月と9月です。これら6か月ごとのリリースは、「フィーチャー・リリース」と名付けられました。
また、その6か月ごとのリリースの間に、バグ・脆弱性対応などの「アップデート・リリース」が2度行われます。このアップデート・リリースは1月、4月、7月、10月に行われ、新機能追加は含まれません。
このアップデート・リリースを受けられる期間に注意が必要です。
フィーチャー・リリースに対し、6か月間はアップデート・リリースが受けられますが、6か月後に新しいバージョンがリリースされたら旧バージョンへのアップデートは終了となります。
ここでいう「アップデート・リリース」とは、脆弱性対応やバグ対応などの非機能的なアップデートのことを指しています。アップデートが終了するということは、今後、新たな脆弱性が発見されてもそれらへのアップデート・リリース対応を受けられなくなり、結果的に、脆弱性を悪用した攻撃による情報漏洩や意図しないサービス停止などの被害を受ける可能性が高くなるということです。
そうならないためには、ユーザーは新しいフィーチャー・リリースに乗り換えなくてはなりません。しかし、それらに対応しなければならない商用ユーザーにとって、6か月ごとにJavaのバージョンを更新するというのは、現行システムに影響が出ないか試験を行うなど様々な準備が必要があるため、作業としてもコストとしても対応しきれないでしょう。
<画像出典:SlideShare「JDK: 新しいリリースモデル解説」>
3年ごとに有償サポート付きのLTS版がリリース
しかしながら、あくまでも終了するのは無償アップデートの話。有償アップデートはその後も受けることが可能です。
オラクルは、Java SE 8以降3年ごとに、長期サポートの対象とするバージョンを定めるといいます。これをLong-Term-Support(LTS)といい、現在はJava SE 8、2018年9月にリリースされたJava SE 11が対象となっています。
このLTS対象のバージョンに関しては、有償サポートにより、新しいフィーチャー・リリースが出た後もアップデート・リリースを受け取ることができます。
例えば、Java SE 8に関しては「Premier Support」サービスを受ければ2022年3月まで、その後延長サービスとして「Extended Support」サービスを受ければ2025年3月まで、さらに「Sustaining Support」サービスで延長すれば無期限でアップデート・リリースの提供を受けることができます。
なお、このLTS版が今後「Oracle JDK」と呼ばれるものになります。長期サポート付きのLTS版JDKは、今までのように無料配布されるのではなく、オラクルの有償サポート契約を行ったユーザーのみ提供されるものとなります。
Oracle JDKとOpen JDKのリリースサイクルについてまとめると以下の図のようになります。
ライセンスの変更により再配布が容易になった
ライセンスの変更点についても見ていきましょう。
Open JDKの説明にて前述した「GNU General Public License(GPL) v2.0」とは、フリーソフトウェアが一般的に採用しているライセンスです。該当ソフトウェアの実行、再配布、改良、公開を可能とするライセンス内容です。
従来のOracle JDKのバイナリは「Oracle Binary Code License(BCL)」というライセンスが適用されていました。BCLには再配布に関して「ユーザーが開発したソフトウェアとともに配布すること」という制限事項がありました。昨今は仮想化技術が進み、コンテナなどの上にアプリケーションを含まない実行環境として配布するという使い方も多くなってきていますが、そのケースではこの制限事項があると再配布ができませんでした。
新しいリリースモデルでは、Open JDKがバイナリとしてこのGPL v2.0ライセンスとなることによりこのケースをクリアし、ユーザーがより再配布しやすくなったのです。
サポートについて
これまで見てきたように、今後のサポートは有償/無償で大きく二つの流れに分かれます。
<画像出典:SlideShare「JDK: 新しいリリースモデル解説」>
また、Open JDKとOracle JDKの関係(JDK9以降)は、「機能は同じ、サポートサービスが異なる」となります。
Open JDKが6か月サイクルでリリースされアップデート・リリースのサポート期間が6か月であるのに対し、Oracle JDKは3年周期でリリースされ有償ですが長期サポートが受けられます。
<画像出典:SlideShare「JDK: 新しいリリースモデル解説」>
<画像出典:SlideShare「JDK: 新しいリリースモデル解説」>
この先どう対応すべきか
予算の厳しいプロジェクトでは、「無料だから」という理由でJavaを採用しているケースも多々あったことと思われます。しかしながら、現在Java SE 8を採用しているユーザーは、今後は何かしら対応方針を決める必要があります。
Javaユーザー、またJavaを得意としている企業など今後Javaを使いたい人達にとって、どのような選択肢があるのでしょうか。
オラクルの有償サポートサービスを受ける
現行システム側の変更が最も少ないのは、おそらくこの方法となるでしょう。また、セキュリティの観点からもアップデート・リリースを受け続けることは重要となります。
有償サポートの費用については規模や使用環境によって異なりますが、予算確保が必要となります。
Open JDKを使用し半年ごとに新バージョンに移行
有償サポートを使わずに、Open JDKを採用するという選択です。
Java自体は無償で使えますが、現行システムがOpen JDKでなければ移行の動作確認テストが必要となり、また、Open JDKのフィーチャー・リリースについていくために半年ごとにバージョン移行のテストを行う必要があります。
もし、Open JDKでLTSの保証が行われるようなことになれば、今までのOracle JDKと同じように使えることになりますが、現時点ではOpen JDK公式でのLTSの発表はありませんので、そこに期待することはできません。
AdoptOpenJDKを使う
これは無償で使え、サポート期間も4年間ありますが、ユーザーが自分でビルドを行う必要があります。
ビルドとは、ソースコードやライブラリのパッケージを、実際に使える実行形式ファイルにするための工程です。AdoptOpenJDKを採用した場合、ビルド作業は開発時の工数がかかりますが、それを受容できれば、無償でサポートが受けられることになります。
そのまま現行バージョンを使い続ける
システムの安定稼働のため「現行採用している旧バージョンで動かし続けたい」という顧客要望も多いと思います。Javaのバージョンを移行するということは、安定して動作できているシステムを、詳細な動作確認を行うコストをかけ、更にもしかしたらシステムの動作に不具合が出るかもしれないバージョンに乗り換えるということになります。あえてバージョンアップしない方針を立てるプロジェクトもあることでしょう。
しかし、この場合はセキュリティ面で大きなリスクを伴うことを考慮しなければなりません。また、後々にもし新バージョンのJavaに移行することになった場合、旧バージョンとの機能差がより開いている状態となるので、改修はより一層大変になることも予想されます。
他企業のディストリビュート版Javaを使用する
これは中庸案とでもいいますか、今後も現在使用中のJavaを使いたい人向けの選択肢となります。
例えば、レッドハットのRed Hat Enterprise Linuxに同梱されているOpen JDKは、Open JDK8でも2023年までレッドハットのサポートを受けることができます。他にもIBMの提供するJavaのSDKは2022年4月までサポート期間があります。
8以降のバージョンでも、企業のディストリビューションであれば、ある程度の期間はサポートを受けられることが予想されます。
システム環境によりますが、今後Javaを使ったシステム構築を行うのであれば、こうした選択肢もあるのではないでしょうか。
まとめ
Javaは、6か月サイクルで更新し続ける無償のOpen JDK、有償で長期サポートの受けられるOracle JDKに分かれました。
Java SE 8の商用ユーザーは、2019年1月までという迫り来る期限の中で今後どのJDKを選択するか決定しなければなりません。
IPA(独立行政法人情報処理推進機構)は、オラクルの方針転換発表に関連して「アップデート・リリースが提供されていない Java SE を使い続けた場合の被害」の注意喚起を行っています。商用ユーザーは、安全で効率のよい対応が今すぐにでも必要です。
【執筆:編集Gp 星野 美緒】
https://josysnavi.jp/josys-bk-now_type-of-java_190311
カテゴリー: