先日行われたGoogleのAndroid SDKのリリース(source)と共に、APIとモバイル分野において与えられる影響に関するディスカッションが盛んであった。しかしながらJavaコミュニティにおいて重大なディスカッションを引き起こした分野は、Androidプラットフォーム(source)の基礎であるDalvikバーチャルマシーンである。
Dalvikと標準のJavaバーチャルマシーン(JVM)間での大きな違いは、JVMはスタックベースである一方Dalvikはレジスタベースであることである。Dalvikにレジスターベースのアプローチが選ばれた理由として、携帯電話のような制限された環境において有益であり、より効率的な事前の最適化を可能にする(source)からであると推測される。レジスターベース対スタックベースのバーチャルマシーンに関する詳細な解析(PDF・英語)によって、レジスタベースのVMはコンパ イルされた時により大きなプログラムを代償として、更に速い実行時間を可能にするという結論が出された。
Dalvikは制限されたメモリ内で複数のバーチャルマシンのインスタンスを同時に動作させるのを可能にするよう最適化されていて、一つ一つの Dalvikアプリケーションが別々のLinuxプロセスとして動作する。Neil Bartlett氏(ブログ・英語)は、それぞれのアプリケーションにそれぞれのプロセスを与えることによって動的なインストール、活性化、非活性化を可能にするが、 Dalvikがなぜ、単一のプロセス内でこれを可能にするOSGiを使用する代わりに前者を選んだかということに疑問を掲げている(source)。その疑問に対して、Radoslav Gerganov氏は別々のプロセスはVMがもしクラッシュした際に全てのアプリケーションが閉じてしまうのを防ぐからであると返答している。Carl Rosenberger氏(source)もまた、OSGiがAndroidプラットフォームに導入できる事を提示し(source)、一方Jilles van Gurp氏(source)はなぜグーグルはインタープロセスコミュニケーションのようなコンポーネントを再実装すること(source)を選択したのかということを問うている。
今やDalvikが対象としている言語はJavaだけではない。今までにDalvik上でScalaを動作させる(source)という成功例があり、Hecl(source)もまた導入さ れている(source)。Groovyを動作させることも試みられたが(source)まだ成功は収められていない。Monoプロジェクト(サイト・英語)の設立者であるMiguel De Icaza氏(ブログ・英語)もまた、Dalvikのソースコードが有効になり次第MonoとDalvikを統合することに興味を示しており(source)、Android SDKで提供されるJava-to-Dalvikに類似したCIL-to-Dalvikリコンパイラを含んで、これを成功させるいくつかの方法に関する推測も行われてきた。
Dalvikの完成はJavaプラットフォームの最初の重要な割裂が進行しているという懸念を持ち上げた。何人かの人は、Dalvikをマイクロソフトの JVM(source)やSunのマイクロソフトに対する訴訟(source)に結び付けて、同じようなことがグーグルに起こるのではないかと懸念しており、一方他の人たちはマイクロソフトがJava実装を主張していた一方、グーグルはDalvikがそうであるとを主張していないこと(source)を指摘している。Sunはこの潜在的な割裂に関する懸念を表明(source) しており、DalvikとJVMの互換性を確実にするべく、グーグルに協力することを提案している。グーグルはそれに対してDalvikが現在 Java MEのプラットフォームに存在している亀裂を解消し、また制限の少ないライセンスを所有したプラットフォームを提供するための試みであったと返答している。またこれがJavaの将来においてSunとGoogleのより大きな権力争いをもたらす前兆であるという見解もあった。Ian Skerrett氏(source)はDalvikの完成がOpenJDK用(source)のガバナンス委員会の設立における進展の欠如と同様に、Java MEからの収益源を支配、また確保しようとするSunの試みに対する反応(source)であるとみなしている。これが発端となり、Dalibor Topic氏(source)はグーグルがSunと同じ道を歩むかどうか(source)という質問を投げかけている。
そこで面白いのはもちろん、OpenJDKについては尋ねたのに、なぜ誰も同じ質問をグーグルに関しては尋ねる勇気がないのかということである。
Androidはオープンソースとして販売されているにも関わらず、専売特化されたものである。またAndroidにはサインされ、ブラックボックス化された互換性に関する誓約がある。Androidにはガバナンスモデルがなく、またいつかそれを所有するという兆しもない。Androidには仕様がなく、 また、SDKライセンスにおいてグーグルによって使用許可されていないので、そのライセンスは代案の実装を禁止している。 Androidは完全にグーグルによって管理されており、またグーグルはグーグルの財政上支障をきたすものであれば、競合のアプリケーションを抹殺する権限等を所有している。そのオープン性は意図的にグーグルの財政上の利害に沿ったものとなっているのだ。あのJavaの独占性を他の容器に入れたのと同じで ある。
私たちはまるでJCPの再生を目撃しているような感じである。オープンソースコミュニティのストリートにおける信頼性を、単一の独占された実装の周りにいるもう一つの閉ざされたベンダー連合に貸そうと人々が列を成しているのである。それが今回はSunでなくグーグルなだけである。
Stefano Mazzocchi氏(source)がJava MEとDalvikにまつわるライセンス問題を詳細に分析した記事(source)を掲載し、Dalvikはモバイル市場において影響を及ぼすのに都合の良い位置にいることを結論付けた。グーグルは今までに訴訟を起こされる可能性のあるポイントを避けるよう心がけてきたが、Mazzocchi氏はいずれSunはグーグルに対し知的財産に関する訴訟を起こすと考えている(IBMの可能性もある)。また彼はJCP外で操作することによって、グーグルはAndroidを遥かに速く修正することができ、またSunのJCPにおける変更を拒否する能力を妨害することも可能なのである。また彼らは基礎的なJava ME実装において有効ではないUSBやBluetoothのようなコンポーネント用のインターフェースを付加することもできるのである。最終的に DalvikのソースコードをApacheライセンス下でライセンスすることによって、携帯電話所持者はライセンス費用を払う必要なく使用、また修正できるので、それを採用する率が高いのである。
DalvikはJavaコミュニティにおいてかなりの議論を巻き起こしているが、あなたはどう思うだろうか?