JDK、Oracle JDK、OpenJDK、Java SEってなに?
JDKとかJava SEとかようわからん
2017/9にOracleのJavaサポート体制やリリースサイクルの変更がアナウンスされて、いろいろOpenJDKがどうだとかOracle JDKがどうだとかいう話が流れるようになりましたが、いまいち整理されてません。
ここでは、Javaの中心的な実装をあらわすっぽい用語について、整理しておこうと思います。
長文めんどい人は まとめだけ見るといいと思います。
そもそもJavaとは
Javaという用語に関しての明確な定義は難しいですが、ひとつだけ確実なのは、オラクルの商標であるということです。
会話として使われる「Java」は、Java SE仕様を中心としたソフトウェア実装や開発環境、ライブラリ、それらの開発者・団体、コミュニティ、利用プロダクトの傾向といった、「Java」という言葉のもとで語られる技術的なさまざまが含まれたものだと思います。
これはRubyやScalaなど、プログラミング言語に一般にあてはまると思います。
Java SEとは
Java SEは仕様の集まりです。
代表的なものとしては、Java言語仕様、Java仮想マシン仕様、Java API仕様があります。APIは特性として仕様と実装の分離は難しく、仕様書という形には なっていませんが、JavaDocになるべく詳細に動きが説明されています。
Java SEのそれぞれの仕様は、JCPというプロセスで決められます。JCPにはオラクル以外の企業や団体、個人も参加しています。
そして、Java SEの実装がそれらの仕様に従っているかをチェックするTCK(Technology Compatibility Kit)をオラクルが提供していて、そのTCKを通ることにより実装がJava SE準拠であると認められるということになっています。
正確には、Java 8とかJava 10というものは存在せず、Java SE 8だったりJava SE 10だったりの略称なのですが、実用的によく使われています。とくに、Java EEがJakarta EEに移行し、Java MEも表にほとんど出てこなくなった現状では、わざわざJava SE 11のように記述する必要性も減って、Java 11のように記述することのほうが増えているように思います。
また、この意味で「なくなるJava SE無償版」や「有料化Java SE」という表現は あまり正しくないのですが、オラクル自体がJava SEという言葉をあいまいに使っているように思います。ただこれは、「オラクルのサイトでJava SEといえばJDKのことだ」と解釈できなくもないので、オラクル以外の人がオラクルのJava SEを指すときは「Oracle Java SE」のようにして「なくなるOracle Java SE 無償版」「有料化Oracle Java SE」のようにしたほうが正確だと思います。
OpenJDKとは
Java SEに基づいたソフトウェアや関連製品を開発するオープンソースプロジェクトと、そのプロダクトのソースコード置き場です。
OpenJDKのプロダクトには、Java仮想マシン仕様のとおりに動くJava VMや、Java言語仕様に基づいた文法で書かれたプログラムコードをJava仮想マシンで動くバイトコードに変換するJavaコンパイラ、Java VMの上で動いてJava API仕様にもとづいたAPI実装、そしてプロファイラやデバッガなどの、実行環境や開発環境が含まれます。
OpenJDKのJava VMはHotSpot VMと呼ばれます。
実はバイナリは提供していません。jdk.java.netでバイナリがダウンロードできますが、java.netはオラクルのサイトで、ここでダウンロードできるのはオラクルがビルド・テストしたOpenJDKバイナリです。単に「OpenJDKをダウンロードする」というとこのバイナリのことを指すことが多いですが、ちゃんと表現するときはOracle OpenJDKといいます。
他にも、AdoptiumやAzul System、Red Hatなどが独自のビルドバイナリを提供しています。Googleは自身のクラウドサービス用のOpenJDKバイナリを用意していますね。
JDKとは
JDKもオラクルの商標でJava Development Kitの略です。オラクルが提供するJava SE開発ツールキットの製品名です。
基本的にはOpenJDKとして開発されています。
Development Kitなのでコンパイラなど開発に必要なツールを含みます。実行時にだけ必要なものはJRE(Java Runtime Environment)として配布されていましたが、Java 9以降は廃止されています。
Oracle JDKとは
単にJDKと言ったときに、OpenJDKかオラクルのJDKなのかがわかりにくいので、区別のためにOracle JDKと言われるようになりました。
OpenJDKの実装に、Flight RecorderやMission Controlのような商用機能、JavaFXやJava Web Startのようなデスクトップ機能を追加したものがOracle JDKでした。
ただ、Flight RecorderやMission Controlのような商用機能はOpenJDKに寄贈され、JavaFXやJava Web StartはOracle JDKにもバンドルされなくなるので、Java 11からはOpenJDKもOracle JDKも機能的には同一のものになっています。
ではバイナリに全く違いがないかというとそうでもなくて、Oracle JDKにはインストーラーがついています。
Oracle OpenJDKに更新リリースが出なくなったあとは、独自にパッチがあてられて更新リリースが出ることになります。また、もちろんライセンスも違います。
まとめ
Java = エコシステム
Java SE = 仕様
OpenJDK = Java SEを実装するオープンソースプロジェクト
Oracle JDK = オラクルがビルドしたOpenJDK + インストーラ
jdk.java.netのOpenJDK = Oracle OpenJDK = オラクルがビルドしたOpenJDK
AdoptiumのOpenJDK = Temurin = AdoptiumコミュニティがビルドしたOpenJDK
Adoptium = AdoptOpenJDKが商標問題を回避するためにつけた新しい名前
Zulu = AzulがビルドしたOpenJDK + インストーラ
IBM Java SDK = IBMがビルドしたOpenJDK - HotSpot VM + OpenJ9 + インストーラ
Author And Source
この問題について(JDK、Oracle JDK、OpenJDK、Java SEってなに?), 我々は、より多くの情報をここで見つけました https://qiita.com/nowokay/items/c1de127354cd1b0ddc5e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .