LoginSignup
5
2

More than 5 years have passed since last update.

この記事は、Fujitsu Advent Calendarの12/18の記事です。
12月に入って、突然、Incubator ModuleがOpenJDK JEP 11として登録されました。この記事では、このIncubator Moduleについて簡単に紹介します。

Incubator Moduleとは

Incubator Moduleは簡単に言うと、正式なJava SEの仕様ではないが、お試し版としてOpenJDKに入れるモジュールのことです。現在、HTTP/2などが候補となっています。

このJEP11は、他のJEPと違っている点が2つあります。

一つは、冒頭で「突然」と言いいましたが、JEP2.0のプロセスでは、通常、ステータスがCandidate(OpenJDKのロードマップに入る)になる前に、メーリングリストなどで議論されることになっていますが、今回は特になかったようです。

もう一つは、番号が11番になっていること。JEPの番号は101番から振られて、現在302番まであります。(1番はJEP自身のこと、2番はテンプレートで、3~100までは欠番になっていました。)新しいJEPなら303番になるはずが、これまで使われてこなかった11番が割り当てられています。

この2点について、そうなっている理由は共通で、Incubator Moduleが、Feature JEPではなく、Informational JEPであるためです。Informational JEPは、Feature JEPのワークフローにのらないということで、特別な議論なくCandidateになり、番号もFeature JEPとは違う採番になりました。ただし、Information JEPはこれまでも他にあり、101番以降が使われています。(例 JEP 188: Java Memory Model Update)

仕様

Incubator Moduleのライフタイムは限定的で、その機能がJCPで標準化されないなら、削除されることになります。

Incubator Moduleのモジュール名は、「jdk.incubator.xxx」とします。

Incubatorの機能は、Incubator Moduleからのみ、exportされます。将来、この機能が標準化された暁には、パッケージ名が変わり、Incubator Module以外のモジュールからexportされます。Incubator ModuleとそのAPIはなくなることがありますが、その場合「@Deprecated」アノテーションはつけるべきではないとされています。Deprecatedとは別の概念です。したがって、Incubator Moduleを使う場合は、将来の非互換についてリスクを取る必要があります。

Incubator Moduleは、Incubator機能のみをexportでき、「java.」とか「javax.」のAPIをexportできません。Incubator Moduleは、「jdk.unsupported」モジュールとも関係なく、sun.misc.Unsafe等のAPIもexportできません。

Incubator Moduleは、JREには含まれません。JDKランタイムには含まれますが、アプリケーションから自動的に使うことはできません。アプリケーションから使うには、javaコマンドに「--add-modules」オプションが必要となります。

背景

OpenJDKは、OSSである一方で、Java SEのRI(参照実装)という側面があります。Java SEの仕様はJCPで標準化されますが、それ以外の機能をOpenJDKは自由に加えることは可能です。ただし、RIにある機能がde-fact標準になってしまう恐れがあり、そうなるとJCPでの標準化の意義が薄れてしまいます。ですが、そうは言っても、JCPでの標準化には時間がかかり、最新技術をタイムリーに提供できないのも困ります。

というようなジレンマを解決するための施策のようですが、本当に解決になっているのかどうなのかという議論はあります。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2