情報通信研究部 川名 輝子
2019年1月、Oracle Java SE 8の公式アップデート(無償サポート)が終了した。Oracle社のJavaサポート方針変更に関する発表(*1)は2017年9月に遡るが、官公庁や企業の基幹系業務システムをはじめ、世の中の多くの情報システムがOracle Javaを使って開発されているため、強い衝撃を受けたことを思い出す。身近なところではTwitterのサイトもJavaで開発されている。筆者らが開発に携わっているWebシステムもOracle Java SE 8を使っていたため、無償サポート終了への対応をおこなった。
本稿では、筆者らが採用した対応方法を紹介したいと思う。既に対応を終えた方にとっては今さらの情報であり、また、筆者らと同様に対応を検討した多くの開発者にとっては既知の情報であるが、これから対応を検討される方の参考となれば幸いである。
本題に入る前にJavaの魅力について触れておきたい。Javaの特徴として、(1)Java仮想マシンによりプラットフォーム(OS)によらずに動作する、(2)コンパイラ言語であり大規模な基幹系業務システム等において優れた処理性能を発揮する、(3)Springなどのフレームワークが充実しており開発効率が高い、等がある。実に魅力的なプログラミング言語であると言えよう。1996年の正式リリースから20年以上が経過した現在においても、世界で注目されているプログラミング言語ランキングで1位を獲得している(*2)ことも頷ける。
2017年9月にOracle社が発表したJavaサポート方針変更の主な内容は以下の通りである(*3)。因みにバージョンアップの都度、システムの動作確認等の対応が必要となる。
- OracleJDKの無償サポートは2018年9月で終了とする。Java SE 8に関しては2019年1月まで無償サポートを継続する。
- 有償提供するOracleJDKでは、半年毎にメジャーバージョンアップをリリースすることに加え、3年毎に長期サポート版(5年~8年のサポート期間(*4))をリリースする。
- 無償提供するOpenJDK(*5)では、半年毎にメジャーバージョンアップをリリースし、サポート期間は半年とする。
これまで20年以上に渡って無償で提供されてきたJavaのサポートの有償化は、Javaの歴史的な転換点と言えるかもしれない。これにより、Javaを使って開発した既存システムは何らかの対応を迫られることとなった。対応方法として最初に考えられるのは以下の2つであろう。
方法1:
有償提供のOracleJDK(長期サポート版)への移行を行い、3~5年毎を目安にバージョンアップを実施する。
⇒セキュリティパッチの提供を含むOracle社のサポートを受けて長期にわたり安心して利用できるが、運用コストは増加する。
方法2:
無償提供のOpenJDKへの移行を行い、半年毎にバージョンアップを実施する。
⇒無償だが、サポートは半年間に限られ半年毎に動作確認等を実施する必要がある。
方法2のOpenJDKはOracle社がJavaのソースコードをビルドして提供するバイナリであるが、他のJava開発者コミュニティもJavaのソースコードを元に独自にバイナリを提供している。その一つがAdoptOpenJDK(*6)である。これは、IBM、Microsoft、Azul Systems、GitHub、Slack等が支援するJava開発者コミュニティによるもので、半年毎のバージョンアップに加え、4年間の長期サポート版を無償提供することが発表されている。その信頼性の高さは、Java開発者の多くが使用していると言われる統合開発環境のEclipse日本語化パッケージのPleiades All in One(*7)で、Java 11以降ではAdoptOpenJDKを標準搭載することが公式発表されていることからもうかがえる 。
こうした状況から、第三の選択肢として方法3を挙げることができよう。
方法3:
AdoptOpenJDKの長期サポート版への移行を行い、3~4年毎にバージョンアップを実施する。
方法3では、方法1の有償となるデメリット、方法2のサポート期間が半年に限られるデメリットを同時に補え、無償で4年間の長期サポートを受けられる。ただし、Oracle社とは別の団体が独自に提供していることから、方法1、方法2に比べソースコードの改修や動作確認等のコストが多くかかる可能性があることに注意しなければならない。
冒頭に述べたとおり、筆者らが開発に携わっているWebシステムにおいてもOracleJDKの無償サポート終了への対応が喫緊の課題であった。お客さまと検討を重ね、予算的な観点と長期サポートの必要性から方法3を採用することとし、AdoptOpenJDKのJava11(長期サポート版)への移行を実施した。結果、API仕様の変更等によりプログラム改修や設定変更が部分的に必要であったものの、問題解決に役立つ情報が広く提供されていたため、懸念した程にコストは増大しなかった。改修後、全ての機能が問題なく動作し、処理性能が改修前と同等であることを確認した。筆者らの経験では、第三の選択肢は有効であった。
本稿では、Javaのサポート方針の変更に対応する3つの方法を紹介した。実際にはこれ以外にも様々な対応方法があろう。どの方法が最良であるかは、移行対応やバージョンアップ対応のために確保できる時間・予算、システムに求めるセキュリティ等の要件、改修頻度に応じたユーザや業務への影響、等の条件によって変わるため、一概にどの方法が良いとは言えない。しかし、筆者らの経験から方法3(AdoptOpenJDKの長期サポート版への移行)も十分検討に値する選択肢と言えよう。
過去には無償のLinuxディストリビューションであったRedHat Linuxが商用化され有償となったが、一方でRedHat系のLinuxディストリビューションとしてCentOSが無償で提供され続けている。“歴史は繰り返す”と言うが、Oracle社のJavaサポート有償化に際しても、長期の無償サポート版として提供されるAdoptOpenJDKが登場した。今後も、他のオープンソースプロダクトの有償化は起こり得るが、JavaやRedHat Linuxの有償化の時と同様に、無償で同等の機能のプロダクトを提供するコミュニティが誕生するかもしれない。IT業界に携わる技術者の一人として、こうした環境変化が起きたときに様々な選択肢から対応を検討できるよう、これからも最新技術の動向を注視していきたい。
- *1)Oracle Java SE サポート・ロードマップ
- *2)TIOBE Index for January 2019
- *3)Java SE、JDK等の用語については下記を参照されたい
https://ja.wikipedia.org/wiki/Java_Platform,_Standard_Edition
https://ja.wikipedia.org/wiki/Java_Development_Kit - *4)サポート期間は契約によって異なる
- *5)OpenJDK
Java SEに基づいたソフトウェアや関連製品を開発するオープンソースプロジェクト、およびそのプロダクトのソースコード。ここではOracle社がソースコードをビルドして提供しているものを指す。 - *6)AdoptOpenJDK
IBM、Microsoft、Azul Systems、GitHub、Slack等が支援するJava 開発者コミュニティ。当該コミュニティが独自に提供するOpenJDKのバイナリを指すこともある。 - *7)Pleiades All in One