組込みプラットフォームはJavaへシフトしきれるか

2007年には、組込み分野の開発環境がJavaへシフトする、と睨んでいたのだが、果たしてどういう状況か、簡単に振り返ってみたい。公の調査結果というよりも、現場の生の雰囲気を通してということなので、かなりアナログな感想なのはお許しいただきたい。

1.Javaは使われているが、単体の製品か研究開発であり、製品プラットフォームとまではいかない・・・Javaを使った事例はよく聞くが、あくまでもメインストリームではない。単体のトライアル製品であったり、研究開発プロジェクト止まりというのがせいぜいだ。こういった事例が大幅に増えているとはいえるだろうが、実際の製品になってメインストリームに載ってこないと、Sun Microsystemsも重い腰を上げられないだろう。

2.ダイナミックなアプリケーションプラットフォーム(JavaアプリやOSGi)・・・Javaの組込み開発では一歩先を行く携帯分野が示したように、簡単にインストールしたりアンインストールしたりできる、ダイナミックなアプリケーションプラットフォームとしては、Javaは最適だ。この概念を標準化していっているといえるのが、OSGiという標準規格で、Javaで仕様が決められている。この部分では日本でもNTTを中心にして大きな流れが進行中である。

3.携帯もCDCへ・・・これは予想通り進んでいるといえるのではないだろうか。主流の次世代プラットフォームはCDCベースであり、CLDCは後方互換性を維持するために使われるぐらいだろう。もちろん日本は世界で最も複雑で優れたケータイ市場なので、中国など新興市場では、次世代プラットフォームといえど、依然としてCLDCが主流だと思われる。つまり組込み分野のJavaへのシフトは、主にCDCを中心に行われると考えられる。

こういったことをざっと振り返ってみると、CDCの上に、予想以上に複雑なアプリケーションが乗っかってきていることが分かる。つまりこれまでも十分に複雑で難しかった組込み開発が、またそれゆえに日本は組込みで強いのだが、さらにダイナミックなアプリケーションプラットフォームを載せてより複雑化していると言える。この場合、より顧客にとって重要なアプリケーションに比重があるため、既存のネイティブプラットフォームを残してというよりは、新しいJavaのプラットフォームを中心にして、下にネイティブコンポーネント、上にダイナミックなアプリケーションという構成になっていると思われる。

こうしてみると、次世代プラットフォームの形が見えてくるが、依然として前途多難である。一般的に言えば、性能が出ない。これが今日でも主な原因だ。しかしここで厄介なのが、基本的にJava自体が遅いとはいえないということである。もちろんここでリソースは消費されるが、それだけのために性能要求が満たせないということはまれで、そのようなものはそもそもLinuxなどのOSも邪魔だろうし、まさにハードウェアで速くするしかない。そうではなくて、非常に大きな問題だと思われるのが、Javaという抽象的なレイヤが入ることで、これまでも極めて厄介だった、単体では正常に動くコンポーネントが全体ではうまく動かなくなる問題を、さらに厄介にしてしまうことである。こういった問題を解消するツールや手法も、まだまだ確立されていない。そしてこのような場合にうまく交通整理ができないと、結果として製品の性能が出ない、品質が悪い、そういった結果になってしまうのである。

Javaへのシフトを成功させるためには、もっともっと業界(コミュニティ)全体で取り組んでいかないとならないと、近頃は強く感じている。私もデータベースという枠を超えて、できるだけやっていこうと考えている。例えばdb4oはオブジェクトデータベースなので、実行時に、ある時点のオブジェクト構造のスナップショットを撮る事ができる。GCがメインプログラムからオブジェクトを辿ってGCするのと同じようにである。そしてその結果をあとで解析してグラフィカルに見ることができたら、デバイス上でのデバッグに役立つだろう(デバイス上ではJVMTIなどJavaデバッグAPIは使えない)。いつ撮るか、どの範囲を撮るか、どのスレッドから見た場合か、検討課題は多いが、近いうちにオープンソースプロジェクトにするなどして、この組込み開発のJavaへのシフトを手助けできるようがんばりたい。