Java 17対応のOracle JDK 17が無料に?
2021年9月14日、オラクルは有償提供としていた「Oracle JDK」のライセンス変更を行い、無償化に踏み切りました。このニュースに驚かれたエンジニアの方もいらっしゃるかもしれません。
オラクルは3年前に、無料だった「Oracle JDK」を有償化しています。この決定に対してユーザーの多くからオラクル社に対する非難の声が沸き上がりました。
今回、オラクル社はなぜ「Oracle JDK」を再び無償化に踏み切ったのか?私たちエンジニアにとってどんな影響があるのか?Javaエンジニアの仕事はどうなるのか?興味は尽きません。
ここではJavaやJDKについてご存知ない方もいらっしゃるという前提で、Javaの基本から話を進めて参ります。Javaエンジニアの方は既知の内容は読み飛ばしてください。
【参照】:Press Release Oracle Releases Java 17
Javaとは
Javaは世界的に利用されている汎用的なプログラミング言語です。Javaはサン・マイクロシステムズ社から1996年にリリースされましたが、同社が2010年にオラクルに吸収合併され、Javaの版権もオラクルに移行しました。
Javaの特徴をまとめてみると、
▪Java自体は無償で利用が可能
▪C言語をベースに開発された人気の言語
▪プラットフォームに依存せず、JVM(Java仮想マシン)と呼ばれるソフトウェアを用いてWindowsやMac、LinuxなどあらゆるOS環境で動かすことができる
▪プログラムをモノとしてとらえるオブジェクト指向言語
▪ガベージコレクション機能により、メモリを浪費しない
といった点が挙げられます。
JDKとは
JDKとは「Java Development Kit」の略語で、Javaのプログラム開発や実行に用いるキットです。JDKにはJavaプログラムを実行するためのJRE、Java プログラムのコンパイラ、デバッグツールなどが含まれます。 JDKを用いることで、Java を使ったアプリケーション開発やアプリケーション実行までを一通り行えます。JDKにはオラクル提供の「Oracle JDK」とOpenJDKコミュニティが提供する「OpenJDK」があり、「OpenJDK」はオープンソースですので無償です。
今回、無償化で話題になったのは、この前者である「Oracle JDK」です。
Javaを動かすために必要なもの
JavaとJDKの関係はある程度理解されたかと思いますが、実際にJavaを動作させるには、Javaだけでは足りません。Javaを理解するには、Javaを動作させるために何が必要なのかを知っておく必要があります。Javaプログラム以外には次のものが必須です。
JVM(JREに含まれる)
JVMは「Java Virtual Machine」(Java仮想マシン)の略称です。Javaのプログラムは、このJVM上で動作します。
Javaがプラットフォームに依存せず、あらゆるOSで動くのは、このJVMがプログラムとOSの橋渡しをしてくれるからです。 JVMはJavaを動かすために最低限必要なソフトをまとめたJRE(Java Runtime Environment)に入っています。これらは全てオラクル公式サイトからダウンロードの形で提供されています。
【参考】:Java Downloads
API(JREに含まれる)
APIはライブラリーのようなもので、Javaには次の3種類のAPIがあります。APIはJavaを動かすためには必須で、JREに含まれています。
▪Java SE 「Java Platform, Standard Edition」の略称で、標準APIです。
▪Java EE 「Java 2 Platform, Enterprise Edition」の略称、「Java SE」に企業(Enterprise)サーバー用の機能が追加されているAPIです。
▪Java ME 「Java 2 Platform, Micro Edition」の略称、情報家電や組み込み機器などに向けた機能セットのAPIです。
コンパイラ(JDKに含まれる)
人間が認識できる言語で書かれたプログラムを、コンピュータが解釈し、実行できる形式に変換するためのソフトウェアのことですが、コンパイラはJREではなく、JDKに含まれているので、プログラミングを行う場合は必ずJDKが必要です。 ちなみにコンパイル必須の言語を「コンパイラ言語」と称し、代表的なものとしては「Java」「C#」「C言語」などがあります。一方、コンパイルが不要な言語は「インタプリタ言語」と言い、「 PHP」「 Ruby」「Python」などがあります。
Oracle JDKの有償化、無償化の経緯
Oracle JDKは17から再度無償提供されることとなりましたが、それまではどのような提供方式だったのでしょうか?なぜ一度有償化したのか、再び無償化したのはなぜか、その経緯について推察を交えて見ていきます。
Java 10までのOracle JDK
Java10まで(~2019年4月15日)、オラクルはBCL「Oracle Binary Code License」というライセンス形態を採用し、デスクトップおよびサーバーによる商用・本番環境での無償利用を許可していました。
Oracle JDK11から有償化
2019年4月16日(現地時間)から、オラクルは「Oracle JDK11」のライセンスを変更し、新ライセンス形態の“Oracle Technology Network License”では、個人利用の開発には「OpenJDK」の提供によって無料とし、商用利用については、“Oracle Java SE Subscriptions”の購入が条件としました。 すなわち、「Oracle JDK11」から実質有償化されたのです。ただし「Oracle JDK」は最低8年間の有償サポートが付いています。
Oracle JDK17から無償化
「Oracle JDK 11」は2019年4月から有償提供となりましたが、「OpenJDK」が半年ごとにバージョンアップをしているため、2021年9月のLTS(長期サポート)の対象バージョンが「Oracle JDK 17」となり、ここから再び無償提供に戻ったというわけです。
Javaの提供は、オラクルの「OpenJDK」や「Oracle JDK」以外にも多数あります。 従来からIBMやRed Hatなどが提供してきたディストリビューション以外にも、オープンソースの非営利団体Eclipse Foundation提供の「Eclips Temurin」やAWS提供の「Amazon Corretto」、マイクロソフト提供の「Microsoft Build of OpenJDK」などがありました。
このようにJavaの無償ディストリビューションには多くの選択肢が出現しています。
「OpenJDK」を各社取り入れたことにより、Oracle JDKがJavaのデファクトスタンダードであることを維持する必要があり、以前のライセンス条項に戻したのが背景です。
【参考】:JDKの新しいリリース・モデルおよび提供ライセンスについて
【参考】:Oracle Java SE Supportロードマップ
JDKの有償化でもオラクル離れがさほど起きなかった理由
JDKの有償化が発表された頃、SNSなどではオラクル社を非難する意見が散見されましたが、実際にはオラクル離れはさほど起きなかったとみられます。 その理由は個人利用には「OpenJDK」という無償のJDKが残され、個人利用に大きな支障が生じなかったこと、またオラクルブランドにこだわる企業が多く、オラクルDB導入企業などには「Oracle JDK」の有償化がさほど大きな問題にならなかったことなどが想定されます。
▪ライバルの登場 AWSとMicrosoft AzureのJava環境がそれぞれのクラウドサービスとして定着を始めると、AWSやAzureに慣れ親しんだJavaユーザーが次々と脱オラクルに動き出し、オラクルのJavaに対する影響力が低下していくことが考えられます。 これはオラクルとしては絶対に避けたい事態であり、「Java = オラクル」の図式の崩壊は、オラクルブランドの失墜にもなりかねません。2019年に「Oracle JDK」の有償化に踏み切った当時とは明らかに状況が変わってしまったのです。
▪強気のビジネススタイルから柔軟なビジネススタイルへ オラクル社はこれまで強気のビジネスを展開してきましたが、コンペティターの出現により、背に腹は代えられなくなったのでしょう。オラクルにとって一旦有償化した「Oracle JDK」を無償化し、引き続きサポートを続ける決断はトップの大英断だったでしょう。
Javaの将来性について
ここまで、オラクル社の「Oracle JDK」の無償化を題材にして、Javaに関する基本知識や、Javaアプリ開発に必要な部品、Javaを取り巻く環境の変化などについて解説してきました。
それでは、今回の「Oracle JDK17」再無償化によって、Javaに対するニーズや、Javaエンジニアの需要はどう変わっていくのでしょうか。
Java離れの動き?
確かに一部にはJava離れの動きも見られます。Androidの標準開発言語はJavaですが、推奨言語としてKotlinの人気が高まり、またGo言語もAndroid開発で使われています。こうしたことから、Androidに強いと言われてきたJavaの相対的地位が低下しつつあるようにも見えます。
それでもJavaの案件は豊富
それでも、Javaは依然として需要は高く、Javaエンジニアの求人数もプログラム言語の中では常にトップランクてす。
それは、歴史があり、汎用性に優れたJavaが多くの場面で使われ、Java文化を形成しているからです。Javaは堅牢な言語であり、高い品質が求められる金融機関の大規模システムでも使われています。Androidスマホアプリの分野でもJavaが圧倒的な地位を占めています。 一度作り上げられたシステムは改修はありますが、スクラップされ、他の言語にリプレイスされることは多くはありません。実際、Javaによる新規開発案件以外に、Javaで構築したシステムの改修、運用・保守などの求人案件は豊富にあります。
Javaをベースに他の言語も身に付けよう
多くのエンジニアの方は、最初の言語としてJavaを選択されたのではないでしょうか。しかし、これから将来に渡ってJavaだけで食べていける保証はどこにもありません。他の言語も習得すべきです。
またJavaを習得した方は、比較的容易にC#やPHP、Ruby等、他のオブジェクト指向言語の習得にも役立ちます。使える言語を増やすことで仕事の機会は広がり、ステップアップのチャンスが生まれるでしょう。 Javaを習得したエンジニアの皆さんは、この機会にぜひ他の言語もマスターしてみてください。
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから