OpenJDKに関する世界観です。Javaの世界観1(言語)も参照のこと。
オープンソースのJava VM/クラスライブラリ。Linuxではこれを主に使います。昔あったGNU Classpath、Apache Harmony、GCJ(JavaをGCCの仕組みを使ってネイティブの実行ファイルにコンパイルできる)などはOpenJDKの登場によって衰退した模様。昔はJavaをLinuxでどう使うかは重要な問題であり、二大オープン系プロジェクトの割には問題が多く、仲が悪かった。FedoraはOpenJDKを完全にフリーにして取り込むためにIcedTeaプロジェクトを作った。
Wikipedia
OpenJDKのことを「オープンソース版のあやしいJava」だと思っている人が多いけれど、実際コードを見ていると、Oracleが著作権者でGPLでライセンスされており、コードはきちんと公開されている。
OpenJDKはC++やJavaのほかアセンブリ言語などで書かれており、コードを見ていると色々と面白い。以下を参照に、一度ご覧になってみると良いと思う。
OpenJDKは、おそらく、Oracle JDKの有料化とともに、Java界のスタンダードになるだろう。よって、Javaはもう完全にオープンソース陣営の舵に乗っている。.NET Coreもオープンソースになり、またMicrosoftはたくさんの開発・基盤ツールをオープンソースとして公開し始めている。ほとんどの有力なプログラミング言語や開発ツールで、もう、オープンソースは勝利した。今から、オープンが完全にパソコンのデファクトスタンダードとなっていくだろう。
Oracleは先日、将来のJDK(Javaの基本的な開発ツール)を有料化することを発表した。これにより、今まで無料で使えていたJava(あくまでもOracleの名前を冠したJDK)が有料になる。
これは、ある意味、空気に値段を付けるようなものである。だが、簡単にOracleを批判することはできない。
なぜなら、Javaを開発するのはとてもコストと労働力のかかる仕事であり、ある意味Sunを買収したOracleにとって、Javaは「負債」になっていたからである。
Javaの有料化によって、今までJava言語を使っていた「ただのりユーザー(フリーライダー)」はこれまでのようにJavaを無料では使えなくなる。
ただ、これで困るのは、一般ユーザーだけではない。今までJava言語を使ってさまざまなプログラムを開発してきた、「業務で仕方なくJavaを使っていたユーザー」にとっては、ここから先は別の言語を使うか、あるいは有料になったJavaを買わなければならない。
だが、ここで朗報がある。Javaには、最近、オープンソース版のOpenJDKがある。OpenJDKをみんなで開発すれば、今までのようにJavaを無料のまま、オープンソースで使うことができる。
だが、OpenJDKとOracleのJavaにどれくらい違いや互換性があるのか、僕は知らない。そもそも、Javaをどこからどこまで有料にするのか、僕はまだ分かっていない。
ただ言えることは、Javaの開発者は決してボランティアではないということである。有料化を批判するのは簡単だが、むしろ、今からOracleがぼろ儲けするのは明らかである。空気に値段を付けたのと同じである。
C#/.NETに移行するという声もあるようだが、「Oracleから逃げてMicrosoftに捕まっただけ」であるとの批判もある。そもそも、C#はmonoや.NET Coreなどを別にすれば、そもそも有料である。オープンソース系の言語が見直される日も来るのかもしれない。誰かがJavaを模した「仮想マシンとバイトコードで動く静的型付けのオブジェクト指向言語」を作る可能性はある。だが、Javaと全く同じものにすることは難しいだろう。それは、Javaのクラスライブラリがとても巨大で、簡単に少人数では作れるわけがないからである。OracleのJavaを買う、という選択肢も十分考えられる。
そもそも、IBMなどがやっているように、有料のもので良いのであれば、Oracle以外にもJavaを提供している会社は存在する。一番良いのは、その中のどれかが無料提供されることだろう。一気にOracleに勝てるはずだ。
後日追記:あまり記事も見ずにいい加減なことを言ったが、今までのフリーなJavaは機能や性能ともに同等なOpenJDKとして提供される。だが、サポートされる期間がOracleのJavaと違う。言ってしまえば、個人ユーザーにとってはOpenJDKで十分である。だから、安心してほしい。
上に「Javaが有料化する」と書きましたが、Oracleによればそれは誤解です。Javaはリリースサイクルが変更になり、オープンソースで無料のOpen JDKが今までと同様に無償で提供されます。ですが、Open JDKは半年ごとに新しいバージョンがでるようになり、サポート期間も短いです。大規模なエンタープライズシステムを作るためには、長期のサポートが必要ですが、このために有償のOracle JDKが3年ごとにリリースされ、8年間サポートされます。
よって、OpenJDKを使う一般ユーザーにとっては、Javaは無償のままです。こうした理由に、「時代の変化に対応していくために、もっと短いスパンで新バージョンをリリースする」という必要があったことが言えます。
最近、MSがjClarityを買収した。jClarityはJavaのワークロードのパフォーマンスを上げる会社だが、AdoptOpenJDKと呼ばれる「Oracleではない独自のOpenJDKバイナリ」を提供するプロジェクトの創設者のひとつでもある。
今後、MSはAzure上のJavaにAdoptOpenJDKを使うかもしれないということだが、AdoptOpenJDKはOracleJDKを完全に置き換えるものであるため、OracleとMSでJavaをめぐる争いが勃発するかもしれない。
Javaを開発者として使うなら、AdoptOpenJDKがベストです。
Oracle JDKは個人利用だけが無償であり、商用利用ではお金を取ります。
また、OpenJDKそのものはサポート期限が短いです。
AdoptOpenJDKなら、LTS版があるため、商用利用でも長い間サポートしてくれます。
僕もMac + VS-Codeを使ったJavaの練習で、AdoptOpenJDKを使っています。
後日注記:AdoptOpenJDKはEclipse傘下となってAdoptiumとなりました。OpenJDKの独自ビルド版は、このほかにもAzul ZuluやMicrosoftによるビルド版などが提供されています。また、Oracle JDKはJava 17より新しいライセンス「Oracle No-Fee Terms and Conditions License」を裁定しており、商用用途でも無償利用が再び可能となりました。
Sunを参照のこと。
Oracleを参照のこと。
オープンソースを参照のこと。