IBM i のウンチクを語ろう
~ その70: ACSのためのJava
皆さん、こんにちは。当コラムでACS(IBM Access Client Solutions)の前提になるJavaに関してお話したのは、2020年末の第54回目においてでした。PC上でJavaを前提にして、5250エミュレータやIBM i からのデータダウンロード機能などを利用されているとしたら、ACSのユーザーだと思って良さそうです。IBM i における定番製品の一つだと言えるでしょう。Javaについてお話ししてから1年以上が過ぎる間に、Oracle社が定める契約条項が変更されたり、IBM社が推奨するACSの前提も見直されたりと、Javaを取巻く状況は大きく変化しています。また、多くのJavaプログラムが利用するLog4jにおいて、セキュリティの脆弱性が見つかったことも記憶に新しいところです。Log4jとはJavaなどのプログラムから様々な活動記録を出力するための機能で、攻撃者から任意のプログラムを実行できてしまう脆弱性が報告されました。ACSとの関係も気になるところです。
先日とあるお客様からの問い合わせを受けて、ACSの前提として採用するべきJavaのバージョンやパッケージを調べていたのですが、以前のコラムに記した内容から大分変わっていることに気付かされました。影響を受けるお客様も多いかもしれないので、念のためにあらためて今回のテーマとして取り上げようと考えた次第です。
最初に結論を申し上げておきましょう。ACS 1.1.8.x(当コラム執筆時点の最新は1.1.8.8)は、Java 8またはそれ以降のバージョンでサポートされます。そして採用するならば最新アップデートのLTS対象バージョン、推奨するのは最新アップデートのJava 11、パッケージはIBM SemeruランタイムであるとIBM Supportサイト(英語)に明記されています。ここで「ああ、なるほど」ではなく、「それって何?」と感じる方の方が圧倒的に多いのではないでしょうか。実は私自身は後者でした。IBMの推奨はどういうことなのか、結論だけでなくもう少し掘り下げてみる必要がありそうだ、と感じたのでした。
既にJava 17がダウンロード可能になっているのですが、安定度を考慮したためかIBM推奨は必ずしも最新バージョンではありません。念のためにJavaのロードマップの中で、各バージョンはどのように計画されているのかを見てみましょう。Oracle社のサイトに「Oracle Java SE Supportロードマップ」という表があります。これによると、Java 11は長期サポートが提供されるLTS(Long Time Support)の対象とされています。GAすなわち利用可能になったのは2018年9月、標準サポートに相当するPremier Supportの期限が2023年9月、延長サポートであるExtended Supportの期限が2026年9月です。利用可能になってから延べ8年間のサポート期間が想定されていることになります。
Premier SupportとExtended Supportとの間における最も大きな違いは料金です。後者では追加料金が発生します。サポート内容については「ソフトウエアのLifetime Support」ページ内の表にまとめられており、これによると新しいサードパーティ製品に関するサポート以外に変わりはありません。新たなJavaアプリケーションをインストールしたりするのでなければ不自由は生じない、と考えて良さそうです。あと、意外に見落とされがちなのですが、Java 7ないし8のExtended Support追加料金については免除期間が設けられています。ロードマップページのかなり下の方に、「*****」が付された注記にも着目するのをお忘れなきよう。
参考までにLTS対象ではない他のバージョンを見てみると、利用可能になってから標準サポートが提供される期間は概ね半年のみ、そして延長サポートはありません。安定性よりも最新機能をいち早く試す事を目的にするのでない限り、業務用途にLTS以外のバージョンを利用する意味はありません。
第54回目コラムに詳述したので詳しくはそちらを参照いただきたいのですが、Oracle社が提供するJava 11には、OTN(Open Technology Network)ライセンスが適用され、その用途によっては有償になることに気を付ける必要があります。無償の対象になるのは個人用、開発用、オラクル社が認めた用途、Oracle Cloud Infrastructure(オラクルクラウド)用途であり、それ以外の業務用などにおいては有償のサブスクリプション契約が必要になります。念のためですが、最新・詳細なライセンス条項については、必要に応じてオラクル社に確認される事をお勧めします。
有償化を避けるための当時の推奨はAdoptOpenJDKサイト上にある「OpenJDK with the IBM OpenJ9 JVM」、すなわちIBM社のJVMであるOpenJ9 JVMと、Oracle社がオープンソースとして公開しているJava向け開発ツールキットのOpenJDKを組み合わせたパッケージでした。現在はこのサイトは保守されていませんが、同じ組み合わせの「IBM Semeruランタイム」と呼ばれるパッケージが、IBM Semeru Runtime Downloadsサイトから無償でダウンロードできます。
SemeruランタイムのサイトはACS利用者のみを対象に用意されたものではありませんので、ダウンロードに際していくつか適切なオプションを選択する必要があります。IBMがACS利用のために推奨するのは「Java 11(LTS)」、オペレーティング・システムは典型的には「Windows」、バージョンはJava 11の当コラム執筆時点で最新アップデートに相当する「11.0.14.1」、導入パッケージについては、開発ツールも必要ならばJDK、ACSなどのアプリケーションを稼働させるだけならばJREを指定します。zipかmsiかはインストールの手段を指定するためのモジュールなのでどちらでも構いませんが、おそらく一般的にはmsiの方が手軽ではないかと思います。ちなみにこの最新パッケージは、OpenJDK 11.0.14.1+1とOpenJ9 0.30.1の組合せである事がサイト上に示されています。
前提として必要になるJavaバージョンは、アプリケーションによって異なる可能性があります。PC上に既に別バージョンのJavaがインストール済みであったとしても、ACSはその起動時に独自の前提Javaバージョンを指定することができます。第54回目の当コラム後半に手順を示してありますので、必要がありましたらあらためて参照いただければと思います。
なおSemeruランタイムについてもライフサイクルが公開されています。これによるとバージョン11はLTSであり、サポート期限は2024年10月とされています。
先に述べたOTNライセンスによって実質的に有償化されたJavaですが、条件・制約付きながら再度無償化されることになった事はご存知と思います。Java 17以降を対象として、新たにNFTC(Non-Fee Terms and Conditions)ライセンスが昨年9月に発表されたことによるものです。個人用・業務用などといった用途を問わず、次のLTSバージョンがリリースされてから1年経過するまで無償で使用でき、その後はOTNライセンスが適用されます。もしJava 17を使用することになったら、ロードマップによると次のLTSはJava 21ですから、そのGA(利用可能日)の1年後にあたる2024年9月までは無償で使えることになります。現時点でIBMはACSの前提としてJava 17を推奨バージョンに指定してはおりませんが、時々IBM Supportサイトを見張っておこうと考えております。私自身もACSのユーザーでもありますので。
IBMが推奨するACSバージョンについても述べておきましょう。IBM発信情報によると、機能として利用されていませんが、脆弱性の懸念があるLog4jバージョン1のJARファイル(実行モジュール)が、ACS 1.1.8.6またはそれ以前のバージョンに含まれています。これを回避するために、昨年4月にリリースされた1.1.8.7、またはそれ以降のバージョンにアップグレードすることが推奨されています。そうそう簡単にはバージョンを変えられないと感じる方もいらっしゃるかもしれませんが、ACSの特徴の一つを思い出していただければと思います。すなわち、インストール作業が不要であり、単一のPC上で同時に複数バージョンを試すことができ、問題が生じるようであればアンインストール作業無く展開済みのACSを容易に消去できる、という簡便性があるのでした。
現時点でのACS基本パッケージの最新バージョンは、2021年9月にリリースされた1.1.8.8です。そしてIBMのサイトによると、次期バージョン番号は示されていませんが、そのリリース予定は2022年4月とされています。皆さんがこのコラムを目にされる頃には、既にダウンロード可能になっているかもしれませんね。是非気軽に最新バージョンを試していただければと思います。
ではまた。