2018.06.11
M.clacla

Javaのこれからについて

この週末、大阪のお客様との打合せで、大阪に出張してきました。

久しぶりにお客様とお会いしたのですが、
ネットや電話などでのコミュニケーションでは得られないお客様の温度感など、
対面だからこそ得られるものって実に多いですね。

北海道とは様々な意味で空気の違う大阪。
食文化も大きく違います。
その大阪のグルメについて、私の好みと主観と独断と偏見「だけ」で大阪のグルメや魅力を語ろうと思ったのですが、
写真等の記録に残すのを忘れ、美味しいものを食べると同時に美味しいお酒も堪能してしまい、酔った勢いで全て忘れ去り、
記録にも記憶にも、何も残っておりません。。。

というわけで今回のブログの話題も完全に詰んでしまい、
このまま終わるのもあまりに酷いので、
今回は、私がスタッフとして運営をお手伝いしている「Java Do」に絡めて、
最近話題のJavaのリリースモデルについて、ちょっとお話してみようと思います。

Javaのリリースモデルについて

1年ほど前まで、一般的に、
Javaでプログラムを開発するときに使うJDK(Java Development Kit)や、
Javaで作られたプログラムを動かすときに使うJRE(Java Runtime Environment)は、
・無償でOracle社のサイトからダウンロードできる
・セキュリティホールがあった場合も、Oracle社からセキュリティアップデートが提供される
・バージョンアップまでの期間が長い
 ※機能的なアップデートが遅いというデメリットの反面、長い期間、安定的な環境が提供されるメリットも。
というイメージだったかと思います。

また、JDKには、
・Oracle社がバイナリとして提供する「Oracle JDK」
・オープンソース版の実装である「OpenJDK」
の2種類があります。
これまで、Oracle JDKとOpenJDKでは、
バージョンが同じなら利用者側から見て『ほぼ』同じものですが、
技術的、性能的に、細かいところで違いもあったようです。

さて、従来無償で提供され、セキュリティアップデートも無償だったのは、
2014年9月にリリースされた、Oracle JDK 8までで、
いま、Javaのリリースモデルが大きく変わっています。

まず、現状、多くの環境で使われているOracle JDK 8ですが、

  • 無償でセキュリティアップデートが提供されるのは2019年1月まで
  • 個人利用に限り、2020年12月まで無償でセキュリティアップデートが提供される
  • この時期を過ぎて利用し、セキュリティアップデートを入手するには、商用・個人の区別なく、Oracle社との有償サポート契約が必要になる

ということになります。

次に、

  • Oracle JDK 9、OpenJDK 9(2017年9月リリース)
  • Oracle JDK 10、OpenJDK 10(2018年3月リリース)

は移行期間ということで無償で提供されていますが、
リリース機関の重複は無く、JDK 10がリリースされてからは、9に脆弱性が見つかったとしても、9にはセキュリティアップデートは提供されません。

そして、その次の11(2018年9月リリース予定)から今後の方針が適用され、

  • Oracle JDKは、Oracle社に対して有償のサポート契約を締結した場合にのみ提供され、3年ごとに新バージョンがリリースされ、その後数年間、セキュリティアップデートも提供される
    ※数年間セキュリティアップデートが提供されることを、LTS(Long Term Support)と呼んでいます。
  • OpenJDKは、無償でダウンロードできるが、半年後には次のバージョンがリリースされ、前バージョンで脆弱性が見つかったとしても、前バージョンにはセキュリティアップデートは提供されない

ということになります。

一部噂では、OpenJDKでもLTS版が提供されるという話も聞いたことがありますが、
公式な発表としてはまだ出ていません。

Oracle JDK 8以降、ややこしくて書いてる自分もよくわからないので、図にしてみました。


この図の中で、
薄いグレーはOracle JDKを無償で使える期間、
赤はOracle JDKを有償サポート契約の上で使える期間、
青はOpenJDKを使える期間
となります。

これまで無償でOracle JDK 8を使ってきた方にとって、
来年(2019年)1月(個人利用では2020年12月)を過ぎると無償で使えなくなるので、その後は、

  • Oracle社と有償のサポート契約を結び、2025年3月まで8を使えるようにし、その間に11あるいは17あるいは23で動くようにアプリケーションを改修し、JDKのバージョンアップに備える
  • OpenJDKに切り替え、半年ごとのJDKアップデートと、それに合わせてアプリケーションも半年ごとに修正が必要ないか確認し、必要に応じて修正することを継続する
  • いっそのこと、Java以外の他の開発言語でアプリケーションを作り直す

の中のどれかを選択必要がでてきます。
いま2018年6月ですから、商用利用ではあと半年ということで、あまり時間がありませんね。

さて、次に、Oracle JDKを使うためにOracle社と有償サポート契約を結ぶ際に、
具体的にいくら必要になるか、といいますと。。。

Oracle社の価格表によると、サーバでJDKを使う際のライセンスとして、「Java SE Advanced」を契約すると、
物理プロセッサのコアごとに、

  • Processor License・・・年間600,000円(60万円)
  • Software Update License & Support・・・年間132,000円(13万2千円)

が毎年必要になる、とのことです。

【参考】Oracle 価格表:
https://www.oracle.com/jp/corporate/pricing/price/index.html

【2018/06/25 追記 ここから】
2018/06/22にOracleからJava SEサブスクリプション価格について、情報が公開されました。
https://www.oracle.com/technetwork/java/javaseproducts/overview/javasesubscriptionfaq-4891443.html

これによると、

  • デスクトップ環境では、ユーザーごとに月額2.5ドル(日本円:6/25時点でおよそ275円)
  • サーバ環境では、プロセッサごとに月額25ドル(日本円:6/25時点でおよそ2,750円、年額でおよそ33,000円)

まだ日本オラクルによる、日本ユーザー向けの情報は公開されておらず、2018年7月に発表される見込みとのことですが、
Oracleが発表した価格に近い価格になる予定との報道もありました。
日本向け報道:
https://tech.nikkeibp.co.jp/atcl/nxt/news/18/01697/?n_cid=nbpnxt_twbn

今後1~2ヶ月程は、目が離せませんね。
新たな情報が出てきましたら、こちらのブログ記事に更に追記していこうと考えております。
【2018/06/25 追記 ここまで】

なお、Java SEのプロセッサのライセンスでは、「物理プロセッサのコアごとに」というのがポイントになります。
Oracle社によると、「物理サーバーに搭載している全プロセッサ(コア)が課金対象になる」ということです。
※私が直接Oracle社に問い合わせたところ、このような答えが返ってきました。

サーバを構築する際、VMWareやHyper-Vなどの仮想化を導入するケースも多いかと思います。
仮想サーバを作成する際には、論理的なプロセッサのコア数などを定義することになりますね。
このサーバでOracle JDKを使う場合、仮想サーバの論理的なプロセッサ数の定義には関係なく、物理サーバに搭載されているプロセッサ数に課金される、ということなんです。

例えば、

  • 物理サーバ機にプロセッサのコアが10個搭載されている
  • そのサーバ機の中で、論理的にプロセッサのコア数を4個に定義した仮想サーバを作成する

とすると、物理プロセッサが10コアあるため、10コア分のプロセッサライセンスが必要になります。

ただ、その物理サーバの中で、仮想サーバを1個作成しようと、10個作成しようと、ライセンスの費用は変わらない、ということになりますね。

【参考】Oracle FAQ サーバー仮想化ソフトウェア( Oracle VM 、VMware、Hyper-Vなど)を使用した場合のライセンスカウントはどのようになりますか?:
https://faq.oracle.co.jp/app/answers/detail/a_id/2673

では、クラウドにサーバを構築した場合はどうなるか、といいますと、
そちらも、あくまでも、物理プロセッサ数で金額が決まるということです。

【参考】Oracle FAQ 他社のクラウド・サービスに、ライセンス持ち込み(BYOL: Bring Your Own License)でオラクル製品を使う場合、必要なライセンス数はどうなりますか?:
https://faq.oracle.co.jp/app/answers/detail/a_id/2706

さくらのクラウド、AWSなどのクラウドサーバを利用する際、論理的なプロセッサ数を決定して契約しますが、
そのような環境上でOracle JDKを使うという選択肢を取りたい場合、どうすればいいんでしょうかね。。。
そもそも、物理サーバ上にプロセッサのコアがいくつ搭載されているかを知ることはできないですし。。。

今後、
クラウド環境上でのライセンス形態について新たな情報が出てくるのか、
クラウドベンダー各社からOracle JDKのプロセッサライセンス付きのオプションが出てくるのか、
OpenJDKでもLTS提供が始まるのか、
何らかの動きがあれば、クラウドサーバ上でのJavaについても選択の余地が出てくるかもしれませんね。

JDK 11のリリースで新しいリリースモデルが正式に動き始まるまでの3ヶ月、
新しい情報を注視していきたいと思います。

というわけで、大阪訪問の余韻に浸りながら、まとめてみました。
やっぱり大阪が大好きだっちゃ。

M.clacla

一覧に戻る