第1回:「Java」は昔も今もオープンです

ソフトウェアアーキテクト四方山話

みなさんこんにちは。システムエグゼの相田です。

ソフトウェアアーキテクトとして、3年がかりの大型プロジェクトに張り付いていたため、2015年以来の登場です。

前回の記事は「堅い」「真面目過ぎる」とか皆様の評価が散々だったので、今回の連載はもう少し砕けた感じでやらせて貰おうかと思っています。

さて、弊社は Oracle Database と SQL Server を筆頭とする「データベース」で 目立っている会社なのですが、基本的には企業向けの IT サービス全般を扱う、 いわゆる SI ベンダーです。

私は主に企業向け(エンタープライズ系)の SI 案件においてソフトウェア /アプリケーションまわりを担当する機会が多いので、何回かに分けてその辺りの お話をさせていただこうかと思います。

第一回目は、ちょうど旬(?)な話題「Oracle の JDK 提供ポリシーの変更」です。

Oracle の JDK 提供ポリシーの変更

2018年、Oracle 社が頒布およびパッチを提供している JDK(Java SE)の無償提供を取りやめる事が発表されました。

この話題は一部では「Java 有償化」と呼ばれ、若干の混乱を引き起こしているようです。

お客様からだけでなく、社内からの問い合わせも非常に多いトピックなので、ちょっと解説しておきたいと思います。

「Java は有償化」されたの?
「Java は有償化」されていません。

これが最も多い誤解なのですが「Java 言語」が有償化されたわけではありません。Java はかなり以前から JDK とともにオープンソース(OSS)化されており、OSS 版であれば昔も今も無償で使用出来ます。いわゆる「OpenJDK」というものですね。

有償契約が必要になったのは Oracle 社が提供していた「Oracle JDK」であり、サーバーライセンスと(開発者向けの)ユーザーライセンスが必要になりました。このサポート契約を結んでおかないと、セキュリティパッチなどの提供を受けられません。(なお、Oracle Cloud 上では実質無償で利用可能になったようです)

突然有償化したの!?今使ってる Java はどうなるの!?
「今使ってる Java」が Java 8 以前なら、既にサポート期間が終了しています。

企業ユーザー様の場合「今使ってる Java」というのはほとんどが Java 8(以前)だと思います。このバージョンは今回の件があってもなくても既にサポート期間が終了していますので、理屈の上では影響を受けません。

また、サーバとして Red Hat Enterprise Linux(RHEL)或いは IBM サーバを使用している場合は、恐らく最初からそれぞれのベンダー独自サポート(もちろん有償です)が付いている筈ですので、やはり影響を受けません。

つまり「理屈の上では」特に影響はありません。

Javaで新規開発する時はお金がかかるという事?
無償で使いたいなら無償の JDK を選択しましょう。

前述ですが OpenJDK はオープンソースであり、無償です。なので、OpenJDK を使用すれば無償で Java が利用出来ます。

また、現在の Oracle JDK は OpenJDK とコードベースが同じ、つまり「基本的には同じもの」ですので、安心して使用する事が出来ます。

・・・じゃあ何の問題も無いという事?
一点だけ。「パッチ提供の保証期間」の問題があります。

企業ユーザー様が利用する場合、OpenJDK には一点だけ問題があります。

それは(セキュリティ等の)パッチ提供の保証期間が短い事です。オープンソースなのでバージョン更新が非常に早く、1年でバージョンが2つ上がってしまい、都度前バージョンの「サポート」が打ち切られ(※)ます。

※) オープンソースなので普通の事です。他の OSS でも概ねそうなっています。

稼働期間の長い企業内システムでは、パッチ提供の長期サポート(Long-term support/LTS)が欲しいのではないでしょうか。そのための選択肢が「OpenJDK ディストリビューション」です。

「OpenJDK ディストリビューション」とは?
OpenJDK を色々なベンダーが独自にビルドし、メンテナンスしているものです。

OpenJDK には多くの「ディストリビューション(配布形態)」があります。(この辺りは CentOS や Ubuntu といった「Linux ディストリビューション」と似ています)

対象バージョンの制限はありますが、配布ベンダーが独自の長期サポート(LTS)を提供しています。

代表的なものをいくつか紹介すると、

・ AdoptOpenJDK  : Eclipse 財団と IBM がメンテナンスするディストリビューション。IBM が持っていた独自の仮想マシン実装も OSS 化され合わせて提供されています。

・ Amazon Corretto  :Amazon がメンテナンスするディストリビューション。 AWS 上で使用する場合は最も最適化されているとの噂です。

・ Red Hat OpenJDK  :前述ですが、Red Hat 社は以前から独自のディストリビューションとサポートを提供しています。現在 RHEL サーバを使用している場合は特に悩む事は無いでしょう。

・ Zulu Enterprise  :Microsoft Azure 環境向けに Azul Systems が提供しているディストリビューション。Azure 上であれば無償利用出来ます。

これ以外にも様々なディストリビューションが存在し、独自の長期サポート(LTS)を提供しています。使用しているサーバ環境やクラウド環境に応じて、最適なディストリビューションを選択するのが良いでしょう。

じゃあ、全然問題無いという事ね?
いいえ。大きな問題が2つ。

お客様にとっては、2つの大きな問題があると感じています。

1つ目は、

「Java は他のオープンソース系言語と同じように、使い始める前に色々と確認・検討 しなければならなくなった」

という事です。 今後は Java の実行環境(サーバ/クラウド)を確認し、提供されている OpenJDK ディストリビューションと長期サポート(LTS)期間を確認しつつバージョンを 選択しなければなりません。また、実行環境側に提供されている OpenJDK ディストリビューションとは別に、 開発用 PC 向けの OpenJDK ディストリビューションも選択する必要があります。

Java で開発を行うために知らなければならない事が増えてしまったので、選択の 際には専門家の助言を受けた方が良いでしょう。 (最新情報を自力で追うのも結構大変なので・・・)

2つ目は、

「Java 8 アプリケーションの移行問題」

です。 ご存知の方も多いと思いますが、いわゆる「Java 9」「Java 10」というバージョンは、 前述の OpenJDK のバージョンと一致した、そもそも長期サポート(LTS)が無い バージョンです。 Java 9 がリリースされたのが 2017年9月、10 は 2018年03月です。そして Oracle の JDK 提供ポリシーの変更について詳細がわかったのは 2018年05月、 主要な OpenJDK ディストリビューションの動向がわかったのは 2018年09月です。

この約一年の間、現行の Java 8 アプリケーションをどのように移行すれば良いのか、 新規に Java 開発を行う際にどれを選択すれば良いのかハッキリしない状況が続いて しまい、結果的に多くの現場で「意図せぬ塩漬け Java アプリケーション」が生まれて しまったように見受けられます。 (しかもこの影響で多くのミドルウェアや OSS フレームワークの更新も滞って しまいました)

移行先は、普通に選択するならば OpenJDK 11 です。バージョンが2つ上がって いるので移行が簡単では無い可能性があり、移行の際は事前の調査・検証作業が 必要です。 結果としてこの問題は多くのユーザー企業に対し多くの「予期せぬ」「見えない」 コストを発生させてしまったと思います。

今回のまとめ

社内外から何度も何度も何度も何度も聞かれた内容なので、この機会を利用して
ざっと現状をまとめてみました。

この問題の本質は「Java の周辺状況がどうなるのか非常にわかりにくかった」
事だと思います。

本件に関し弊社では、パートナーである Oracle 社から情報提供を受けると同時に、早期から社内のアーキテクトコミュニティが各 OpenJDK ディストリビューターに関する情報収集に当たり、社内での情報共有とお客様への情報提供を行ってまいりました。今のところ特に混乱なく、以前と同じように Java による開発を行っております。

現時点でも、Java が企業向けアプリケーション開発に最適な言語の筆頭である事は間違いありません。安心してご相談いただければと思います。

── もちろん弊社が扱う言語は Java だけではありませんので、どの言語でも
「Java と同様に」お気軽にご相談下さい。

それでは、また第二回(あれば)でお会いしましょう。