日本オラクルが9月にサンフランシスコで行われた「JavaOne San Francisco 2013」の内容を国内向けに説明したという記事が出ていました:
この本宮学さんによる記事よると、
Java 8では、SEとMEの言語仕様の統一化やAPIの共通化などを図り、「Javaプログラマーがより広範囲にスキルを発揮できるようにする」。つまり、小型/大型デバイス向けの組み込みソフトを専門的に作成していた開発者も、これまで専門外だった規模の組み込みソフトを開発できるようになるというわけだ。
ということで、Java MEを大幅にJava SE側に寄せた調整を行うということを説明しています。従来のJava MEにはJ2SE 1.3ベースのCLDCとJ2SE 1.4ベースのCDCがあり、それぞれベースとなったJava規格のサブセットとなっています。CLDCは特に制限が厳しく、専用のJava仮想マシンであるKVMを採用しています。一方でCDCは専用の仮想マシンではなく、ベースとなった規格のJava仮想マシンをそのまま含んでいます。いずれのJava MEもライブラリは大幅に簡略化されており、また言語仕様はベースとなった仕様のままになっています。
これをJava SEでプログラムを書ける技術者であればJava MEでもプログラムを書けるようにするとともに、開発用のSDKもできる限り共用化できるようにすることで、開発資源の分散化を避けるという狙いがあるようです。
現状でもOracleはJava SE Embeddedという、組み込み用のJava SEをライセンスしていますが、これとJava MEのすり合わせを行うということでしょう。
これと連携するというか、完全に無関係とはいえないだろうと思われる動きとして、Javaの参照実装(OpenJDK)のJava Enhancement Proposal(JEP)によって議論されているJavaコンパイラー仕様の明確化(明文化されていない部分のポリシーを明文化するという動き)があります:
このAlex Blewittさんの記事の翻訳版から少し引用します:
Java 8 と Java 9を目標にした最近のJava Enhancement Proposalは、Javaコンパイラーによって使われる-target と -source ディレクティブのサポートモデルを成文化することを目指している。提案では、コンパイラーは、せいぜいJavaコンパイラー自身のバージョンの3つ前までサポートする、と言っている。
このように、最近の言語拡張によりサポートが困難になっている旧バージョン用のclass
ファイルの出力機能を省く方向で提案が出されています。
なぜ、この動きが前述のJava MEとJava SEのすり合わせの動きに関連するのかというと、ベースとしているJava SEのバージョンがCLDCで1.3、CDCで1.4であるというところにあります。今回のこの制限がなされると、当然のことながらこれらの従来用Java MEのclass
ファイルが出力できないという状況になります(従来用のclass
ファイルを出力する必要がある場合には、それをサポートする従来のJDKをインストールしておく必要が出てきます)。
しかし、Java MEをJava SEに寄せてしまえばそのような問題もなくなります。そして、OpenJDKの流れとは別にOracle側で保守をしているJava MEにかかるコストの削減を見込んでいるのではないかと思われます。よいことづくめにOracleには見えているのでしょう。
実際には、Java MEを搭載した端末はまだ世の中にたくさん存在しています。各社のいわゆるフィーチャーフォンや一部の組み込み系の機器などです。これらに対するサポートは依然として必要でまた需要のあるものです。比較的近い将来で従来向けのサポートを切ってしまうのはよくないのではないかと私には思えます。
また、従来のJava MEの適応領域が上ずれした分、かつてはJava MEを載せるよりも下にあった機器に対して現状のJava MEを載せることができるようになって来たという点を軽んじているように見えるんですよね…。なんだか、Java SEとJava EEに主眼が向いてしまっているのが現在のOracleのJavaの方向性のようです。
Sun Microsystems時代なら、積極的に下位の機器に攻め入っていたと思うんですが、今のOracleにはその姿勢が見られません。Java ME関連はOracleにとってコストにしか見えないのかもしれません。