はじめに
どーも!ボンネット開け男です!
今日は「結局Javaは何を使うべきか」について書いていきます。
というのも、年も明けて2019年1月になりました。今月は大変なことがあります。そう、Oracle Java SEの無償サポートが終了します。今、Javaをインストールしようとすると、ご丁寧にも以下のポップアップが出てきます。
もともと3カ月に1回しかパッチを出さないんだから、そんなにすぐ影響出るもんでもないのに、凄い言いよう。何か大きな脆弱性を知っているのではと勘ぐってしまいます。
以前、Amazon Correttoが発表された際に以下のブログを書いたのですが、意外とアクセスが多くありがたい限り。
この記事を読んだ人は「結局Javaは何を使ったらいいの?」と思っていることでしょう。ということで、まとめて書いていきます。
お断り
この記事に書いてある内容は、ボンネット開け男がネットを中心に収集した情報を元にまとめたものです。2019年1月時点の情報となります。ボンネット開け男の意見、予測などは本記事作成時点における個人的な判断であり今後予告なく変更する可能性があります。また、情報の正確性を保証するものではありません。むしろ、間違っていたら教えてください。
前提知識
Java周辺で何が起きているのか
そもそも、なぜ今までと同じように、OracleのHPから無償版をダウンロードして使うことできなくなったかというと、Oracle社がJavaの有償化を発表したからなんです。完全に有償化されるのは、Oracle Java SE11以降からになります。
Javaが有償化というと誤解を招く可能性があるので、ここで整理しておきます。今回Oracleが有償化を発表したのは、Java SE(JDK/JRE)です。※本来Java SEは規約でそれを実装したのがJDK/JREなんですが、Oracle社のHPがわかりづらいので、ここは便宜上Java SEが有償化と記載します。JavaはSE以外に、サーバサイドの規約であるJava EEもありますが、これについては今回の記事では語りません。(Java EEについても動きがあるので別記事にしたいところです)
Java SEのサポートポリシーの変更
元々、Oracleが提供する以外にも、Javaが存在していました。ただ、ほとんどの方がOracleのJavaを利用していました。これは、無償で長い期間サポートが受けられたからです。なお、ここでいうサポートは、セキュリティパッチの提供や障害修正の提供を指します。電話でトラブル対応をしてくれるわけではないのでご注意ください。
OracleはなぜJavaを有償化したのか
Javaのマネタイズに失敗していたからと思います。(個人的な意見です)多大なるコストをかけて無償で配ってくれる営利企業なんて普通ありません。OracleさんはDBも値上げの連続ですし、いろいろと企業状況ヤバいんですかね
完全に有償化されるわけではない
当然、無償であったものが急に有償化されてしまったら反発はすごいですし、Java離れも進んでしまいます。そこでOracleは「無償版も出すけれど、そっちはサポートを半年にする」という荒業に出ました。また、Oracleは半年にした理由を「クラウド時代の開発スピードに対応するため」ともっともらしいことを言います。
どんなリリースサイクルになるのか
今まで
無償版 4~5年周期でメジャーバージョンアップ。サポート期限は、次のバージョンが出てから約1年間。(賞味リリースから約5~6年間サポート)
有償版 実は以前から有償版もありました。無償版より長期にサポートが受けられます。JFRやJMCなど有償版だけで使える機能もありました。
これから
無償版 OpenJDKのOracleビルド版を提供。11以降、サポートは半年間で、半年に一度新しいバージョンが出る予定。
有償版 11以降は3年に一度新しいバージョンを提供。サポートはリリースから5年延長3年の計8年。
この辺はOracleさんの公式HPをチェックしてください
移行の選択肢9案
では、今後Javaを使うにはどんな方法があるんでしょうか。有力な案を順番につらつらと書いていきます。
選択肢1.Oracleと有償契約を結ぶ(Java SE Subscriptionの購入)
単純明快Oracleと有償契約を結ぶ案です。
メリット
・Javaを入れ替える必要がない。
・サポートが長い。JDK8は2025年3月まで、それ以降のバージョンはリリースから延長含め8年です。(無期限サポートはパッチが出ない可能性があるので要注意)
デメリット
・ライセンス費用を払う必要がある。しかも昨今多い仮想環境では、動作する可能性がある物理CPU分ライセンス費用が発生するそうです。DBとかと一緒ですね。価格が跳ね上がります。価格は36,000円/年~
価格は以下サイトの下の方に出ています
https://www.oracle.com/technetwork/jp/java/javaseproducts/overview/javasesubscriptionfaq-4891443-ja.html
Oracleあるあるの後から価格を上げるってことはないよね??心配
選択肢2.Oracleが提供するOpenJDKを利用する
OpenJDKのHPからダウンロードできます。
メリット
・無償
・新しい機能の実装が一番早い
デメリット
・サポートが半年のみ(長期サポートのうわさがちらほら出てますが、正式な情報は出ていません。)
・対応しているプラットフォームが少ない(Solarisはない?)
選択肢3.RedHatが提供するOpenJDKを利用する
メリット
・サポートがそこそこ長い(JDK8は2023年6月まで)
サポート期間についてはこちら
デメリット
・RedHat社とOSのサポート契約が必要(JDKのサポート範囲は要確認)
・Linuxしかない(Windows版は開発用途のみで提供される模様。詳細はこちら)
※2019年1月11日追記※
Red Hat のミドルウェア製品 (具体的にはJBoss EAPなど) を利用する場合、Windows版にも商用サポートを提供することが発表されているそうです。ご指摘ありがとうございました。詳細はこちら)
選択肢4.Adoptコミュニティが提供するAdoptOpenJDKを利用する
AdoptコミュニティはIBMなどがスポンサーです。ダウンロードはこちら)から
デメリットが少ないので、こちら使う人も増えるかもしれないが、ある程度知識がないと使いこなせない可能性高い。
メリット
・無償で利用できる
・長期サポート(JDK8は2022年9月までの予定)
・対応OSが豊富
デメリット
・OracleJDKと完全互換というわけではなさそう(特にJavaFXが入っていなくて、動かなかったアプリあり。これは他のOpenJDKにも言えるかもしれない)
※2019年1月11日追記※
今後 Windows版に入る予定はあるようです。ご指摘ありがとうございました。詳細はこちら)
選択肢5.IBMが提供するOpenJDKを利用する
IBMは今回の件でめっちゃやる気満々なんですね。IBMのサイトは以下から
https://www-01.ibm.com/common/ssi/cgi-bin/ssialias?htmlfid=46015546JPJA
メリット
・長期サポート(JDK8は2025年3月まで)
デメリット
・Linux版が中心、Windowsは今後出るそう
・有償。54,800円/年・コア~
選択肢6.Zuluが提供するOpenJDKを利用する
サイトはこちら
すみません。正直、使おうとしている人も少なく、詳しく知りません。
選択肢7.Microsoft(Azure)上でJavaを利用する
サイトはこちら
Azure上で利用する場合、長期サポートされるケースがあるそうです。Azure使わないのであまり知らないです。
選択肢8.商用アプリケーションサーバに含まれるJDKを使う
今回の件で特に影響を受けるのは、Tomcat+OracleJDKでWebシステムを構築していた人だと思います。そういった方は、いっそのことアプリケーションサーバごと商用に移行するとJDKもサポートされる場合があります。
・Oracle:WebLogic
・IBM:WebSphere
・富士通:Interstage
・日立:Cosminexus
など。
同梱しているJDKもサポートしてもらえるかはベンダーに確認しましょう。(便乗してサポート費用上げられたりして)
選択肢9.Amazonが提供するAmazonCorrettoを利用する
有望案と思われますが、いかんせん正式版はまだ出ていません。それまでに検討するのは時期早々でしょう。
別な記事でまとめていますので、詳細は以下から。
まとめ
Appletの移行先もまとめたい。Java11使ってみた感想も書きたい。時間はない。
コメント
いくつか項目ごとにコメントさせていただきます。なるべくソース情報も付けるようにしますので併せてご確認ください。
~省略~
■前提知識
○Java周辺で何が起きているのか
有償化されたのは原則 Oracle JDK 11 からの話です。
~省略~
■移行の選択肢9案
○選択肢3.RedHatが提供するOpenJDKを利用する
Red Hat のミドルウェア製品 (具体的にはJBoss EAPなど) を利用する場合、Windows版にも商用サポートを提供することが発表されています。
– Red Hat、Windows版OpenJDKの長期商用サポート提供を発表 - Publickey
https://www.publickey1.jp/blog/18/red_hatwindowsopenjdklts.html
○選択肢4.Adoptコミュニティが提供するAdoptOpenJDKを利用する
デメリットとしてJavaFXが入っていない点を挙げられていますが、今後 Windows版に入る予定はあるようです。
– JavaFX is missing in OpenJDK 8 Windows Distribution · Issue #577 · AdoptOpenJDK/openjdk-build · GitHub
https://github.com/AdoptOpenJDK/openjdk-build/issues/577
~省略~
○選択肢6.Zuluが提供するOpenJDKを利用する
日本では知名度が低いと思うのですが、JDK/JVM専業ベンダーとして老舗であり、グローバルでは割と知名度があるようです。(AdoptOpenJDK/CorrettoのGitHub Issueなどから判断)
選択肢7.のAzureも実際に動いているのはZuluです。
– 【GlassFish勉強会レポート】各JDKベンダの動向を知ってJava 11に備えよう:レポート|gihyo.jp … 技術評論社
https://gihyo.jp/news/report/2018/10/0501
○選択肢9.Amazonが提供するAmazonCorrettoを利用する
~省略~
なお、Correttoの記事時点では32bit版がありませんでしたが、Preview 2ではWindows 32bit版が用意されています。
– Downloads for Amazon Corretto 8 – Amazon Corretto 8
https://docs.aws.amazon.com/ja_jp/corretto/latest/corretto-8-ug/downloads-list.html
# AdoptOpenJDKやZuluも32bit版はあるので、別にCorrettoに限った話ではありません。
~省略~
まとまった記事としては、以下が中立・客観的であり、参考になると思います。
– JDKの長期商用サポート(LTS)の提供ベンダー比較(無償利用についても言及あり) – Qiita
https://qiita.com/u-tanick/items/bb166929a58a4c20bb88
– Oracle Java 有償化。その現状と企業の今後の対策について調査報告。 | Call Center Trends
https://callcenter-trend.com/?p=1337
また、書籍(雑誌)としては、以下も有識者(Java ChampionやOpenJDK Committer)がまとめています。
– Software Design 2019年1月号|技術評論社 [第2特集 リリースモデルの変更にどう対処する?]
https://gihyo.jp/magazine/SD/archive/2019/201901
– WEB+DB PRESS Vol.107|技術評論社 [Dive to Java ── OpenJDK開発者が明かす,最新開発/運用テクニック 【第3回】速攻詳説Java 11]
https://gihyo.jp/magazine/wdpress/archive/2018/vol107
思ったより長くなってしまいましたが、参考にしていただければ幸いです。
ちなみに興味本位で伺いたいのですが、まとめにある“Appletの移行先”は何を想定されているのでしょうか。
本ブログに訪問いただき誠にありがとうございます。
初めてコメントをいただき、少し緊張しているボンネット開け男と申します。
なお、いただいたコメントについて、問題ないと思われる範囲で省略させていただきましたので、ご了承ください。(書き間違いや補足レベルの範囲の部分)
移行の選択肢つきましては、多数補足していただきありがとうございます。大変参考になったため、一部記事に反映させていただきました。
最後にいただいた質問についてですが、Appletの移行先とは、大きく3案あると感じております。
・スタンドアロンのJavaアプリにしてしまう
・JavaScript+HTML5で書きなおす
・C#で書きなおす
これらの案について、移行の勘所やサンプルアプリを踏まえて記載したいと考えておりましたが、如何せん時期が遅くなってしまったので、実際に記事にするかは微妙なところです。
コメント初めてだったんですね(笑) いきなり長文のコメントで失礼しました。
反映いただき、ありがとうございます!
Appletの移行先は、やはり直接的なもの(https://icedtea.classpath.org/wiki/IcedTea-Web など)などではなく、ブラウザに依存しない方向性になりますよね。
規模によりけりですが、いちから書き直すのは結構大変になるとは思うので、どのような選択肢を考えられているのか気になったのでした。
Appletの移行先について、いただいたURLのものは存じていませんでした。大変参考になりました。
ブラウザに依存しない方向にするのがいいと思いますが、如何せん規模と今後どうなるシステムなのか次第なので、一概に言えないですよね。
なんとかJava離れが進まないように望むばかりです。
またJava関連の記事書くと思いますので、是非お越しください
このたびはありがとうございました!