IBM i 向けのJavaのアップデート
Javaは、IBM i 上では健在ですが、現在、変革の真っ只中にあります。これは、Oracle社が、広く使用されているこの技術をライセンスおよび開発する方法に対して行った変更によるものです。一方、IBMは、同社のJava用のサーバー ランタイムで、来たるPower10の機能を活用するべく準備を進めているようです。
6月下旬、IBMは、同社のRPMプロセスを通じてJava 11のアーリー アクセス バージョンを ひっそりとリリース しました。このリリースには、IBM i のショップはyumを介して、またはACSを通じてアクセスできますが、このリリースはプロダクション レディ(本番稼働用)ではなく、テスト目的専用とされています。
「しかし、Apache Camel、ActiveMQ、Tomcat、maven、Jenkinsなど、様々なワークロードでの徹底的な機能テストを実施済みです」と、 IBMの、IBM i 担当オープンソース アーキテクト、Jesse Gorzinski氏はbitbucketサイトで述べています。「「アーリー アクセス」バージョンをリリースするのは、IBM i コミュニティからフィードバックをもらうためであり、どのようなテストに関するフィードバックも大歓迎です。」
IBMがJava 11環境について前向きに取り組んでいることは、IBM i コミュニティにとって良い知らせです。IBMがJava 11のサポートを初めて明言したのは、 2018年、Java 11が長期リリース(LTR)として初めて発表されたときのことでした。Java 11は、フル サポートのLTRとして、Java 8(前リリースのLTR)に取って代わり、Javaの次のメジャーなLTRリリース(Java 17)が2021年後半に発表されるまでの間、Javaユーザーをつなぎ留めておくことが意図されていました。
しかし、Java 11環境と、それによって既存のアプリケーションが壊されてしまう可能性に対する懸念から、IBM i 向けに、および全体としてJavaコミュニティ向けにOpenJDK Java 11パッケージの開発が推し進められるようになり、ユーザーは、少なくとも2025年までは Oracle (および同社がJavaをライセンス供与している組織)によってサポートされるJava 8を頼みにし続けることとなりました。しかし、IBMはそうした互換性の問題に取り組んできたため、IBM i 向けの新たなOpenJDK Java 11パッケージの提供もそう遠くないように思われます。
IBM i のショップは、2015年以降、初めてとなる新たなサーバー サイドJavaのリリースが近付くにつれて、クライアント サイドでのちょっとしたドタバタに対処することを強いられてもいます。これは、昨年初めにOracleが、2019年1月以降にリリースされるJavaクライアント アップデートの利用について 企業に対して有償化する ことを決めたためです。
こうしたライセンス方式の変更は、IBM i サーバー上のJavaには影響ありません。IBM i 上でのこの技術のライセンスはIBMが管理しているからです。しかし、この変更はクライアント上のJavaには影響があり、IBM i サーバーと対話するための中心的なクライアント ツールになっているAccess Client Solutions(ACS)にとっては、影響は重大です。言うまでもないことですが、ACSはJavaで書かれており、稼働にはJVMが必要です。
デスクトップおよびラップトップで稼働するJavaのサポートに対してOracleに料金を支払いたくなかった(今も支払いたくない)IBM i のショップに向けては、AdoptOpenJDKからのOpenJ9 JVM、またはOpenJDK団体からのHotspotディストリビューションの使用を IBMは勧めています 。IBMはこれら組織の両方と協働していると述べていました。
また、IBMは、OpenJ9 JVMをベースにした2つの有償のJavaランタイム オプションも提供しています。これらのオファリングは、「IBM Runtimes for Business」として販売され、製品番号は5737-F61および5737-J49です。IBM i のチーフ アーキテクト、 Steve Will氏のコラムによれば、最新かつ最強のJavaランタイムをお望みの顧客には、監視機能が追加されるJ49オプションを選ぶのがお勧めのようです。
Jetbrains社による、Javaコミュニティに関する 2018年の調査 によれば、Java 8は、業界全体で群を抜いて最も広く使用されているJavaのバージョンであり続けているようです。Java 9(IBM i プラットフォームには登場していませんが、Java 11で反映されます)でなされた変更によるアプリケーション破壊に対する懸念や、2019年初めに実施されたクライアントサイド ライセンスの変更は、ユーザーがJava 11へ移行しないようにするための大きな抑止力となっている、と同社は述べています。
その一方で、Javaのオープンソース開発は続いています。IBMのPower担当JavaアーキテクトのJulian Wang氏によれば、オープンソースJavaコミュニティは、言語およびランタイムを改良することに熱心に取り組み続けています。
「今日では、JavaおよびJDKの改良におけるコラボレーションは、すべてOpenJDKコミュニティで行われています」と、Wang氏は、先週の POWERUp 2020 で行った、JavaエコシステムとIBM i に関するプレゼンテーションで述べています。「主だったすべてのJDKベンダーおよびJDKビルダーがこのコミュニティにいます。このコミュニティでは、Javaの健全なエコシステムを維持するべく積極的なコラボレーションが行われています。」
COMMONでのプレゼンテーションでWang氏は、Java実行における課題を克服し、新たな機能を活用するために彼のチームがどのように取り組んでいるかについて説明しました。Wang氏は、実行時(JIT)コンパイラーによって引き起こされるパフォーマンス低下をなくすために、(クラウドで)JVMの外部で稼働するJITサーバーが、どのようにしてパフォーマンスを高めることができるかについて説明しました。
「JITサーバーが行おうとしていることは、JVMからJITコンパイラーを取り出して、クラウドでサービスとしてJITコンパイラーを実行することであるため、それぞれのJVMはJITサーバーからJITコンパイル サービスを要求することができます」と彼は述べます。「このようにして、JVMリソースのキャパシティ プランニングの観点から、アプリケーションの特性(どれくらい多くのメモリーやCPUリソースを消費するか)を正確に追求することができ、JITコンパイラー側でのリソース消費は無視することができます。」
また、Javaコミュニティでは、Javaプログラムのプレコンパイル(または静的コンパイル)も、JITコンパイラーによるリソースの使用を回避する手段として復活しつつある、とWang氏は述べます。Wang氏は、Java実装全般にわたっての標準的な静的コンパイル手法の作成を目指している新たなOpenJDKイニシアチブ、Project Leydenについて言及しています。
考慮すべきトレードオフがあり、Javaコミュニティはどちらに進むべきか決めかねています。「最終的にはどのような形がベストなのでしょうか。何らかのハイブリッドなアプローチであるかもしれません」とWang氏は述べます。「この領域での開発に注意しておく必要があります。」
その一方で、Wang氏と彼のチームは、OpenJ9 JVMでの、来たるPower10プロセッサーのサポートに向けて取り組んでいます。2021年末(おそらくIBM i のショップ向けには2022年初め)にPower10プロセッサー搭載のシステムが出荷されたら、Javaアプリケーションを稼働しているIBM i 顧客には相当なメリットがもたらされると彼は述べます。
具体的には、Wang氏と彼のチームは、PC相対アドレッシング、arrayCopyの長さでのロード ストア、およびブランチレス コード生成のための新たなsetb、といったような、Power10命令セット アーキテクチャー(ISA)要素のサポートを目指しています。
また、Wang氏のチームは、JARおよびZIPファイルの圧縮展開に有用な、NX GZIPアクセラレーターも活用しようとしています。「それは、AIXでは新たなライブラリーを活用しています」と彼は述べます。「IBM i もそのサポートを提供できるようになると良いと思います。それが利用可能になったら、同じことを行うことができます。」
セキュリティと暗号は、Power10での焦点となっている機能であり、Power Javaチームはそこでも改善を行おうとしています。Wang氏は、LinuxおよびAIX向けのOpenJ9 JDKは新たなJava Cryptographyエンジンをすでに活用していると述べており、これによって、数倍から最大100倍、暗号化ルーチンが高速化されます。
「OpenJ9では、Power10の新たなISAとその機能を利用し、活用するつもりです」と彼は述べます。「様々なJDKリリース全体に対するランタイムは1つなので、これを一度行う必要があるだけです。それは、Java 8、Java 11、およびJava 17で利用可能になる予定です。」