追記:対象としているJavaエンジニアの範囲を大袈裟にしすぎたかなと感じましたので、その辺を修正しました。
なぜ書いたのか
タイトルの件ですが、有識者の方々が様々な媒体や場所で発信をされているおかげで、以前に比べて少なくなったと感じてはいるものの、まだ時々誤解を持たれている「Javaが有償化する」と呟かれているエンジニアの方もたまに見かけます。
Oracle JDK 8およびOpenJDK 11、それぞれ最後の無償アップデートがリリースされ、これから有償または無償のLTSでアップデートを受け続けるか、OpenJDK 12に移行するのかといった選択を決めていく状況になる時にまだこのような誤解を持ったままでいいのかなと感じました。
そこで自分の経験を基に誤解をする側の立場になって、なぜ「Javaが有償化する」という誤解が生まれたのかを考察してみようと思いました。
尚、この内容は個人の見解で、間違った認識な所もあると思います。
また無駄に問題提起をしている箇所もあると思いますので、ご意見・ご感想を頂けるのもありがたいですが、スルーしてもらった方が良いかもしれません。
前提と仮定
考察に入る前に自分が認識は以下の通りです。これが間違っていたらご指摘ください。
さて誤解のポイントは、下から3つ目の
"有償になったのはOracleが生成したJDKの利用も含むサポート"
な訳ですが、これがなぜJavaが有償化と捉えられるのか3つの視点で考えてみました。
- Javaを使うときにJDKはどうやって入手するか
- Javaは誰のものと考えているか
- どこのライセンスが変わったのか
前置きが長くなってしまいました。
JDKはどこから入手するか?
これはほとんどが「OracleのHP」からダウンロードしていたのでは無いかと思っています。エンジニアの大多数が使っているであろうWindowsなら尚更です。
OSがLinux系やMacであれば、yumとかapt、brewなどを使うことでそこまでダウンロードサイトを意識することは少ないのかもしれませんが、Windowsだとそのようなパッケージ管理ソフトも無いので、Oracleのダウンロードサイトからの入手も多くなると思います。
じゃあ、今まで無償でダウンロードできていたページで「これからはダウンロードしたければ、Oracleの有償サポートに入ってね」となると、Javaが有償化したと思われるのは仕方が無いと感じます。
個人的には、Oralce JDK と jdk.java.netからダウンロードできるJDKが、Oracleが生成したものなのですから、最初の半年間だけでも両方ともOracleのHPから直接ダウンロードできればわかりやすいのかなと思いました。
こう聞かれた時に多分「Oracleのもの」って答える人が多く、もう少し付け加えると「JavaはOracleが開発してオープンソースで提供している、無料で使えるプログラミング言語」のような認識ではないかと思います。
なので、OracleのHPからダウンロードできるJDKを"Javaの正規品"のように考えていて、OpenJDKに至っては"OracleのJavaをコピーして無償で提供している派生品"くらいに考えているエンジニアは少なくないと思っています。少なくとも昔の私はそう考えていました。
こうなると、"JavaはOracleのもの" > "Javaを使いたければOracleから入手する" > "Oracleから入手するには有償サポートに入らなければならない" > "Javaが有償化したと思い込む" といった誤った認識の連鎖が生まれてしまうのは容易に想像できてしまいます。
まぁこれらは全て間違った考えなので正していくしか方法は無いのですが、効果的に知らしめる方法が必要だと思います。
JVM言語には関係ないのか?
「ScalaやKotlinを使えば有償にならない」のようなニュアンスのことを話される方をたまに見かけるのですが、 少なくとも書いたコードをコンパイルして実行するにはJVMは必要なので、JDKを入手することになります。
(Scalaのダウンロードページは「はじめにJava 8 JDKをインストールしてね。ダウンロードはここだよ」って感じでOracleのHPへのリンクがありますし。)
で「"JVM言語なら関係ない"と言うエンジニアはどこからJDKを入手しているのか?」と言う疑問が出てくるわけですが、これは当人に聞かないとわからず小心者の私にはできないため、私はScalaやKotlinを職場で使ったことが無いので憶測で考えてしまったのですが、入手先どうこうよりそもそも以下のような認識なのかな?と感じました。
要するに「都合の良い解釈をしてしまっているだけなでは?」と考えられますが、そこを辿ると、今回の有償の対象が"Javaのソースコード"だと認識してしまっているのでは無いかとも考えられました。
私自身の経験も含めてオープン"ソース"と言う言葉から、ライセンスの対象になるのはソースコードだけだと考えてしまうことがあります。
つまり、実際は『OracleのHPからダウンロードできる、Oracleが生成したJDKがライセンスを変更した』が正しいのですが、それを『Javaのソースコード自体のライセンスが変更になった』と誤解していることも考えられるわけです。
JVM言語を例にして憶測で話してしまいましたが、考察したかったのは"Javaのソースコード"のライセンスの誤認識だったわけです。
誤解を無くすためにするべきこと
冒頭にも書いた通りJava界隈の有識者の方々は毎日のように正しい情報を発信したり、誤った発信をしている人には指摘をしているのを見かけますが、それだけでは足りないと感じています。
それは、このような発信を受け取っているJavaエンジニアの数はそれほど多く無いと思っているからです。
例えば前職ではJavaを使っていたエンジニアは社内に数十人はいたと思うのですが、私以外にJJUGなどのイベントに参加している人は知らなかったです。
ここから考えられることとして、正しい情報を受け取っている人の背後には、正しい情報を知らないエンジニアが大勢いると言うことなのです。正しい情報を得ずに仕事で使っているエンジニアは自分が思っている以上にいると言うことです。
(もちろんこのような会社ばかりだとは思いませんが、実はJavaのことよく知らずに使っているJavaエンジニアの数は想像以上に多いとも思っています。)
なので自分達が得た正しい情報を身近な組織やチームに発信をすることが大事なのではないでしょうか?
- 少なくとも開発チームのテックリーダーは、正しい情報を取得することを心がける。
- 正しい情報を持っている人は、少なくとも社内やチーム内にその情報を発信する。
- 自分たちのプロダクトのJDKの選択を社外にアウトプットする
今回このブログを書こうと思った理由もそんな所で、既に今回の変更の詳細については昨年の時点で社内Wikiでは発信していていたのですが「自分や組織が理解出来ていれば良い」だと誤解は解消されないからと感じたからでした。
じゃあ自分の組織はどうしているか?
今の会社はリセラーで直接の開発はしていませんが、販売しているメーカーからは、Oracle JDK(有償)とAdoptOpenJDK(無償)の2種類を動作サポートとするようです。
また製品の既存バージョンに対しては引き続きJava 8のみをサポートし、次の新バージョンからJava 11も動作サポートするようです。すなわちJava 8または11のLTSを対象にして製品開発が進められていくと考えられます。
まとめ
今回のJavaのリリース方針とサポートプランの変更は、Javaエンジニアの半数ひょっとするかなりの人数が誤った情報を信じ、正しい情報は自分自身で取りに行かないといけない状況になってしまっていると感じています。
なので情報を得た人達が積極的に正しい情報を発信したり、誤解に気づけたなら誤解した理由を発信することも大事だと思いますので、このブログを見て共感いただけたなら社内にも社外にもどんどん発信してもらえればいいなと思います。
(追記)
こちらの記事を読んでコメントを下さった @yamadamn さんからこんな返事を頂きました。
確かにきしださんやViViさんが仰るように「全て理解しているけど、これまで考えなくて良かったことを検討・対応・調整しなければいけなくなった」といった業務としてのコストが掛かることで"実質有償化"と捉えている方もいそうですね。
逆にOpenJDKの選択肢が増えたことで、どれを選べばいいかを考える必要もありますので。
参考
この話を読んでも理解できないことは以下です。
私のこの記事を読んでも、以下のような実際にこれからもJavaを使っていくために必要な情報の答えは得られないと思いますので、こちらのリンクなどをご覧いただければと思います。
Oracle Java SE Supportロードマップ | Oracle 日本
Java SE 一般的なFAQ | Oracle 日本
JDK:新しいリリースモデル解説 @ 富山 BuriKaigi 2019
JDK、Oracle JDK、OpenJDK、Java SEってなに? - Qiita
Javaは今も無償です - Google ドキュメント
JDKの長期商用サポート(LTS)の提供ベンダー比較(無償利用についても言及あり) - Qiita
Javaはオラクルのもの?」、「いいえ、これからもJavaコミュニティのものです!」――Javaエバンジェリスト寺田佳央氏が、Javaの現在、未来を語る | Oracle 日本