米オラクル(Oracle)が提供するJava開発実行環境「Java SE」(Java Platform, Standard Edition)。現在、最も長いサポート期間が残っているバージョンがJava SE 8だ。無償サポートは2019年1月(非商用に限って2020年12月)、有償サポートは2025年3月までである、

 ユーザーはこの期間が終わる前に新しいバージョンに移行する必要がある。その際には、長期間のサポートが設定されるLTS(Long Term Support)と呼ばれるバージョンであるJava SE 11が最有力候補になる。オラクルはJava SE 11を2018年9月にリリースし、2026年9月まで有償サポートを提供する。同じタイミングでオープンソースとして提供されるOpenJDKのJDK 11でも、同じ期間の無料サポートが提供される可能性が高い。

 ところが、Java SE 8からJava SE 11(もしくはOpenJDKのJDK 11、以下同様)への移行には大きな障壁がある。非互換性だ。大きく二つの問題がある。1つは「既存のライブラリやフレームワークが動作しなくなる可能性」、もう1つは「JavaアプレットやJava Web Startの廃止」である。

内部APIが使えなくなる

 まず、既存のライブラリやフレームワークがなぜ動かなくなる可能性があるのかを説明しよう。カギになるのは2017年9月にリリースされたJava SE 9だ。Java SE 8と9との間で非互換性が生じたため、Java SE 11への移行でも障害になる可能性がある。

 Java SE 9では、モジュールシステムという大きな機能が追加された。OpenJDKで「Project Jigsaw」として開発されたものだ。

 これを利用することでJavaの機能をモジュール化して組み合わせられるようになった。例えば、特定のJavaアプリの動作に必要な必要最低限の機能だけを組み合わせた実行環境(ランタイム)を用意できる。

 Java SE 9では、この機能追加に伴って「内部API」が使えなくなった。内部APIはJava SEの内部で利用しているもので、Java仮想マシンやメモリーなどを直接操作できるようなAPI群である。通常のJavaプログラムから呼び出すことは想定されていないが、従来のJava SEでは利用は制限されていなかった。

 こうした危ないAPIに誰でもアクセスできると「脆弱性の温床」(日本オラクル Java Global Business Unit セールスコンサルティングの宇野浩司ディレクター)になる。そこでJava SE 9からは、他の機能への置き換えが難しい一部の例外を除き、内部APIにはアクセスできなくなった。

 企業が開発する情報システムのコードで内部APIを使うことはまずないため、Java SE 9で内部APIにアクセスできなくなっても、そうしたプログラム自体が動かなくなる可能性は低い。ところが、情報システムが利用するライブラリやフレームワークの中には、柔軟な挙動を実現するために内部APIを利用しているものがある。それらがJava SE 9で軒並み動かなくなってしまった。

この先は日経クロステック Active会員の登録が必要です

日経クロステック Activeは、IT/製造/建設各分野にかかわる企業向け製品・サービスについて、選択や導入を支援する情報サイトです。製品・サービス情報、導入事例などのコンテンツを多数掲載しています。初めてご覧になる際には、会員登録(無料)をお願いいたします。