Java17までの年表サマリ

かなり偏見あり、だいたい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"とかつかうのやめて、バージョンアップしようず。