Windows Mobile用Java SE対応JVM「Mysaifu JVM」の開発者に聞く
2009年2月24日12:59
OSDN Magazine編集部
SourceForge.JP では、同サイトを利用するオープンソース・プロジェクトを毎月1つピックアップし、その開発者にインタビューする「今月のプロジェクト 」というコーナーを設けています。今回は、Windows Mobileで動作するJava SE対応仮想マシン「Mysaifu JVM 」を開発するfreebeansさんにお話をうかがいました。
プロジェクトの概要
このソフトウェアはどんなソフトウェアですか? どんな特徴を持っていますか?
Pocket PC 2003 SEおよびWindows Mobile上で動作するJava仮想マシンです。モバイル端末上で一般的なJava ME (Java Micro Edition)ではなく、デスクトップやサーバで利用されているJava SE (Java Standard Edition)をサポートしていることが特徴です。
プロジェクトを始めた動機は? また、どうやって始めましたか?
2004年9月に、東芝のe830を購入したのがきっかけです。CPUクロックは520Mhz、メインメモリが128MBもあり、さらに解像度はVGAでした。「これだけの性能があれば、デスクトップPCとほぼ同じことができるのでは」と考え、いろいろなプログラムを入れて遊んでいました。 Javaプログラムも動かしてみたくなったのですが、JavaSE (Java Standard Edition)の実行環境がSunから提供されていなかったので、自分でJava仮想マシンを作ってみようと思い立ちました。
Java Virtual Machine Specification (Second Edition) を読みながら、クラスファイルの解析、バイトコードの実行、ガベージコレクタの作成、複数スレッドの並列実行……と少しずつ作っていき、2004年12月頃にJava仮想マシン自体は動くようになってきました。
2005年4月15日に最初のバージョンである Version 0.0.1 を公開した後、バージョンアップを繰り返してきました。15回目のリリースである Version 0.1.5から現在に至るまで、ずっと!Sourceforge.JPのサービスを利用させていただいています。
プロジェクト開始当時と現在で、周辺状況にどのような変化がありましたか?
一番の大きな変化は、JDKのオープンソース化です。プロジェクトを開始した2004年当時、SunはJDKのオープンソース化には反対で、FSFのGNU Classpathプロジェクトが独自にオープンなJavaの開発を行っていました。2006年11月にJDKのソースが公開され、これで様々なプラットフォームへJava実行環境が移植され、Mysaifu JVMは不要になると思いました。しかし、現時点でもまだWindows Mobile端末上でJava SEをサポートするJVMは公開されていないようなので、Mysaifu JVMの開発を続けています。
このソフトウェアのターゲット・ユーザーは?
ターゲットは特に考えていなかったのですが、ソフトウェア開発者の方や、情報処理を専攻している学生の方からよくメールを頂きます。また、業務用システムで使おうとしている勇気ある方もいらっしゃるようです。
このソフトウェアをどれくらいのユーザーが利用しているとお考えですか?
ダウンロード数が大体40万ぐらいで、バージョンアップを40回程していますので、非常に大雑把ですが5,000人から1万人ぐらいの方が使っているのではないかと思います。
プロジェクトがうまく行っていると感じるのはどんなときですか?
機能を追加して、今まで動かなかったプログラムを動作させることができたときです。最初に「SwingとJava3Dが動いたらすごいよな」と漠然と考えていたので、特にこの二つが実際に動いたときは非常にうれしかったです。
Swing on e830W
Java3D on Axim X51v
このプロジェクトをやっていて最も驚いた出来事は?
問い合わせメールやバグ報告をよく頂くのですが、そのほとんどが海外の方から寄せられることです。海外ではかなりWindows Mobile端末ユーザが多いことが分かりました。
このプロジェクトで最も苦労している点は?
性能が全然出ないことです。デスクトップPC上のJVMと比べると、3桁以上多くの実行時間が必要となっています。インタプリタ方式なので遅いかな、とは思っていたのですが、実際に動かしてみてここまで遅いとは思いませんでした。いろいろ工夫しているのですが、効果が出ていません。また、Java2Dの機能も多くが未実装のままになっています。1週間に2~3時間ぐらいしか開発する時間がないので、なかなか進みません。また、海外の方からたくさんのメールをいただくのですが、英語が苦手なのでなかなか返事が書けず、どんどんたまってしまっています。返事ができていないものの中には「開発に協力しようか」というものも含まれていますので、もったいない状態になっています。
今後のプロジェクトの方向性は? また、最終的な目標は?
最終的な目標は、Java SEを完全にサポートするJava仮想マシンを作ることです。これは作り始めたときから変わっていません。デスクトップPCやサーバ上で動いているプログラムを、そのままWindows Mobile上で実行できるようにしたいです。まだまだ機能も足りませんが、地道に作っていくつもりです。
どのような要望がユーザーからあがっていますか?
様々なご要望を頂きますが、中でも多いのは「性能を上げてくれ」「Java2D関連機能を全部実装してくれ」というものです。
このソフトウェアあるいはプロジェクトについて誇れるところは?
Windows Mobile上でJava SEをサポートする数少ないJava仮想マシンという点です。また、いろいろなライブラリをWindows Mobileに移植しています。クラスライブラリであるGNU Classpathを始め、libxml, libiconv等を移植しています。JVM本体の開発に一番重宝しているのがkmmallocというライブラリです。これはヒープのエラーチェックを行ってくれるメモリ管理ライブラリで、Mysaifu JVMではmalloc()/free()をkmmallocで置き換えています。確保した領域を超えた部分にデータを書き込んでしまうような厄介なバグは、該当箇所をなかなか見つけにくいのですが、kmmallocはすぐに検知してくれます。
このプロジェクトでどこかやり直せるとしたら、どこを変更したいですか?
Mysaifu JVMは様々なオープンソースライブラリを組み合わせて作っていますが、Java VM本体はスクラッチで作りました。もし今からプロジェクトをはじめるとしたら、Java VM本体もOpenJDKやphoneME等のオープンソース実装をベースにしたほうが良いと思います。その方が互換性が高く、かつ高速に動作するJVMが作れると思います。
あなたの本業は何ですか?
システムインテグレーション会社の研究開発部門で働いています。ただ、Windows MobileやJavaとは全く関係ない仕事をやっています。
あなたの開発環境は?
JVM本体とネイティブライブラリのビルドにはVisual Studio2005を、Javaライブラリの開発は秀丸とJDKを使って開発しています。全てWindows XPが載っているPC上で開発しています。
バージョン・ヒストリー:
Version 0.0.1 – 最初のバージョン。(2005/4/13)
Version 0.1.5 – SourceForge.JPの利用開始。(2005/10/8)
Version 0.1.8 – libiconvを移植し、英語以外の言語が利用可能になった。(2005/12/2)
Version 0.2.0 – バイトコードベリファイヤを実装。(2006/2/8)
Version 0.2.2 – javax.soundパッケージを実装し、音声出力が可能になった。(2006/3/3)
Version 0.2.9 – libxml2を移植し、javax.xmlパッケージが利用可能になった。(2006/8/26)
Version 0.4.2 – FreeTypeの利用により、TrueTypeのロードをサポート。(2009/2/2)
このプロジェクトに貢献するには?
Mysaifu JVM上で様々なプログラムを動かしてみて、その結果をお知らせいただけるとうれしいです。また、インタプリタの高速化方法やJava2D実装について協力していただけるとさらにうれしいです。
SourceForge.JPへの要望をお聞かせください。
以前はCVSリポジトリに悩まされていたのですが、SVNに移行してから快適に使わせていただいています。ひとつ要望を上げさせていただくとすれば、SourceForge.netとユーザ情報を共有できるようにしていただけるとうれしいです。