かなり偏見あり、だいたいWikipediaから引っ張てきた。
JDK 1.0 ~
家庭用組み込み目指してC++を煽ってたら、携帯とかにのってた時代。
Sunそのものは、Unixサーバー屋で、SolarisつうBSD改造したOSのせてうってた。Javaは野心的なプロジェクトだった。
~ J2SE 1.4 (2002年2月6日) / J2EE 1.2
J2EEが出て、Webシステムがガンガン作り始められた時代のJava。
Eは、エンタープライズ。エンタープライズ用Javaと言っても、サーバーサイドJavaの"仕様"と思ってOK。JDBC/JSP/Servlet/EJB とか。Javaはバイナリを配ってるけど、J2EEは仕様だけ、実装はお任せというスタンス。
J2EEは、IBMとかRedhat(JBoss)とかOracleのほうが有名でだいたい有料。SI屋はこっちと契約する。SunのJ2EEアプリケーションサーバーってあったのぐらいに知らない。
J2SE 5.0 (2004年9月30日) / Java SE 6 (2006年12月11日) / Java EE 5
StrutsからSpringのような発展期にいたJava。名前がごちゃごちゃ変わってた時。
5.0でジェネリクス/Enum/アノテーション/for文とか入りました。今じゃ無かったことに驚かれるのでは。
Java EE 5は、EJB3.0になり、Springのような軽量性にシフト。Spring王国の始まり。
200X年の後期までは、このJavaについていけないJavaプログラマがたくさんいた。
Open JDK (2006年)
Sunが自分でオープンソース化したJavaの開発実行環境。
SunのJDKは、バイナリは配布してて商用利用無償だった(よね)。OpenJDKは互換性がたまにだめとかいう評判もあり、インパクトはそこまで。。ソースコードがあるのが大きかったJavaのコードはじめて読んだ。Linuxでセットアップするとだいたいこれに誘導された。
サン・マイクロシステムズがOracleに買収される (2009年4月20日)
Oracleに買収されてた。最初はIBMって言ってたはず。Oracleはサーバー屋としてのSunを買収したみたいな話も。MySQLとかにも手を出してたし、オープンソース的なビジネスに手を出そうとしてた気もする。
Sunと言えばオープンソースの先導者的なイメージだけど、OSSのBSD使ってなり上がり、OSSのLinuxに本業のUnixサーバー食われ、JavaもOSSビジネスとしてはうまくいかず(Oracleも苦しみ)。と、引っ張るのか引っ張られれてたのかという感じ。。
Java EE 6 (2009年12月10日)
EEの話よ、SEじゃないよ!Jerseyとか増えて、Java EEにもJAX-RSが加わりました。Javaは軽量プログラミン言語のサーバーサイドブームを受けてちゃんと成長してたのです。
ちなみに2021年、この辺りのJava知らないJavaプログラマが多い。Javaできます。には注意。
Java SE 7 (2011年7月28日)
実は結構久しぶりに出た、Oracleの最初のJava。
言語仕様は、次のJava8で霞むせいで、インパクトが低い。NIOとか並行処理APIとか、開発者の使い勝手に寄り添い始めたJavaと宣伝された。そういう機能が他にあった気がした。
地味に、G1GCが途中から導入された。実は、これが一番のインパクトでは。
Java EE 7 (2013年5月28日)
HTML5対応して大規模に変化したJava EE。
Servlet 3.1とかJAX-RS 2.0。JavaEEの機能的な最新はこれ。
SI屋ではSpringという言葉で参照され、誰も気づかずにSpring知ってる==Java EE知ってるかきいてる。
Java SE 8 (LTS) (2014年3月18日)
関数型言語に適応した始まりであり、古いリリースサイクル/サポートの最後のJava。
言語仕様は、ラムダ式とStream。関数型言語vsオブジェクト指向とか乱立したのは、だいたいこいつのせい。
2021年現在でも、Java8で動いてるサービスは多く、この「最後」に影響してる。2022年ぐらいまでサポートがあるし。
ちなみに、このサポートは、セキュリティパッチも含まれる。というかそれが一番大事。問い合わせ的なサポートと勘違いしないように(それも含まれてはいるのでややこしや)無償利用だからサポート関係ないって言ってる奴がいたら、そのサービスはだいたい脆弱性の塊。(まれによくある)
なぜ関数型言語なのか。それは、.netが10年近く前にラムダ式サポートしてたのでパクリ(適当うそ)。.netを考えて、.netにラムダ式をぶっこんだおじさんは、今TypeScript作ってる。やばい。(Delphiの人)
Java SE 9 (2017年9月21日) / OpenJDKがマスタ / Java EEのOSS化
ここからリリースサイクルが変わり爆速に。今までは機能が揃ったら不定期リリースしてた。気が付くとjava17になってたのはこれが原因!!長期サポート(LTS)が無くなり、"半年間"サポートになった。(2014年に出たJava8が2022年までサポートされるのに。。)
言語仕様的には、モジュール。さらに、細かい言語仕様の改善をするようになってきた。
OpneJDKのリポジトリをマスタにするようになったらしい。ようするに、Javaの開発そのものがオープンソース化された。Java EEも、Eclipse Foundationでオープンソースで開発されるように。名前もJakarta EEになった、Java EEはもういない。
背景的には、企業主体の鈍足な開発では、モダンな言語の進化に後れをとってしまうため。Java8とかJava EEの迷走が理由。オラクルはJava開発興味なかったんじゃ。とか言われたがJava11を見るに、違うよう。
Java SE 10 (2018年3月20日)
言語仕様的には、"var"です。型推論な!
標準機能相当のJSR(仕様要求)ではなく、拡張機能扱いのJEP(改善提案)になった。試作段階の機能がお試し用として追加されるようになった。
とまあ、オープンソース化のおかげで、実験的な言語仕様が盛り込むことが出来るようになった。
Java SE 11 (LTS)(2018年9月25日)
Java有償化!!
JDKが「Oracle JDK」と「OpenJDK」を提供するようになった。Oracle JDKが今までのJavaで、商用利用は有償長期サポート(LTS)契約が必要になった==有償化。無償利用は、OpenJDKを使えとなった。Open JDKは、LTS無いのでリリース地獄。鈍足SI屋が騒いだ。
言語仕様的には、型推論の強化と、HTTP Clientが整備されたとか、進化してる。それどころじゃなくなったけど。
Amazon Corretto とかの、JDKディストリ乱立 (2019年)
11の有償化で、だったらJava以外使うじゃんとなると思ったら、色んなとこから色んなサポートのJDKが出てきた。
有名なのはAWSで、Java超ヘビーユーザーのAWSが、じゃあうちがLTS対応したOpenなJDK出したる!と発表。Amazon Corretto 8/Amazon Corretto 11がいる。17も増えそう。
サポートはこんな感じで、ながーい。
、Amazon Corretto 8 の長期サポート (LTS) を 2023 年 6 月までから 2026 年 5 月までに、Amazon Corretto 11 の長期サポート (LTS) を 2024 年 8 月までから 2027 年 9 月までに延長しました。
Microsoftも後追いして出してた。.netもOSS化してた。
Java SE 12 (2019年3月19日) / Java SE 13(2019年9月17日) / Java SE 14(2020年3月17日) / Java SE 15(2020年9月15日) / Java SE 16 16(2021年3月16日)
switchを関数型言語のパターンマッチング風にするswich式を何度も試作してリリース。正式は Java 15。
Recordクラスも試作。正式は、Java 16。
と、言語仕様の拡張も、試作リリースと、正式リリースがあるのが特徴。試作から変わっても泣かない。
新しいGCのZGCは、今でもずっと試作繰り返し中。
Java SE 17 (LTS) (2021年9月)
なう。
言語仕様的には、シールクラスの正式サポート。だが、実は12から続いたリリースの集大成版(LTS)という方が正しい。
むしろ無償化の報道にびっくり。11の方針変えたの?どうなることやら。
そのほか
Eclipse MicroProfile
Java EEの仕様策定の遅さから生まれた、実質Java EEの後継。
名前通りマイクロサービスアーキテクチャで必要な機能だが、マイクロサービス以外でも普通に使う。Java EEと同じで知らずに使うことに。
Open API/Rest Client/Open Tracingとか、色々あるよ。
GoogleのJava
Apache HarmonyというOpen JDKとは別のオープンソースのJavaがあり、Sunとは揉めてた。
2010年10月11日、Apache Harmony プロジェクトを推進してきたIBMがオラクルのOpenJDKに参加表明し、事実上HarmonyからOpenJDKへ移行することを決めた
となり、今はOpen JDKになった。(このメンツは買収騒動が透けて見える。。)
ところが、このApache Harmonyを、GoogleはAndoridのJavaで採用してて、Oracleともめた。
Googleが買ったか負けたか知らんが、OpenJDK使うことになり終戦。
GraalVM
Oracleが出した爆速になったコンパイラ(を積んだjvm)。戦うレイヤの低さがOracleっぽい。
シングルバイナリにも出来ちゃうので、Goとかに浮気(本気)した人に期待されてる。
まとめ どのJava使えばいいの
- 選択するバージョン Java8/Java11/Java17
- 選択するJDK OracleJDK(verによって有償) / LTSありベンダのJDKディストリ
ぶっちゃけ簡単に選べる。だから、"Java1.7"とかつかうのやめて、バージョンアップしようず。