Windows Mobile用Java SE対応JVM「Mysaifu JVM」の開発者に聞く 20
MEとSEの間には深い溝がある 部門より
SourceForge.JPでは、同サイトを利用するオープンソース・プロジェクトを毎月1つピックアップし、その開発者にインタビューする「今月のプロジェクト」というコーナーを設けています。今回は、Windows Mobileで動作するJava SE対応仮想マシン「Mysaifu JVM」を開発するfreebeansさんにお話をうかがいました。
- プロジェクト名: Mysaifu JVM
- 登録日: 2005-09-01 00:15
- URL: http://www2s.biglobe.ne.jp/~dat/java/project/jvm/index.html
- プロジェクトホーム: http://osdn.jp/projects/mysaifujvm/
- 動作環境: Windows Mobile
- ライセンス: GPLv2
- 主要対話語: 英語、日本語
- プログラム言語: C, C++, Java
- プロジェクト管理者: 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が動いたらすごいよな」と漠然と考えていたので、特にこの二つが実際に動いたときは非常にうれしかったです。
このプロジェクトをやっていて最も驚いた出来事は?
問い合わせメールやバグ報告をよく頂くのですが、そのほとんどが海外の方から寄せられることです。海外ではかなり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とユーザ情報を共有できるようにしていただけるとうれしいです。
作者と利用者 (スコア:1)
前提が違うとはいえ
http://srad.jp/developers/article.pl?sid=09/02/22/1012238 [srad.jp]
とはエラい違いですな。
Re:作者と利用者 (スコア:2)
利用者の中には同じような輩はいるんじゃないかなぁ。
作者さんがスルーしてるかどうかってのが大きな違いなだけで。
と感じました。
実際のとこ、どうなんでしょうね。
Re: (スコア:0)
VMに注文をつけられる人ってそんなにいないんじゃないですかね?
なので無茶な注文が来るとしても絶対量が違うかと。
試そうと思いつつ試してませんが (スコア:1)
期待しているので無理のない範囲で歩を進めてほしいものです。WindowsMobileはLinuxZaurusにくらべて開発選択肢が貧弱すぎるので……
SourceForge.JPへの要望 (スコア:0)
Re: (スコア:0)
次の人ヨロシク
部門名 (スコア:0)
MEとSHEの間には深い溝がある部門より。
に見えた
Re: (スコア:0)
質問です (スコア:0)
現在は独自実装のJava仮想マシンについて、Sun Microsystemsのテストを通過しなくても「Java仮想マシン」と述べて問題なくなったのでしょうか? それとも互換性テストに合格されているのでしょうか? もしも後者の場合には費用が発生したかどうか、手順はどうだったかなどを教えていただければ幸いです。
Re:質問です (スコア:2, 参考になる)
互換性テストに合格せずにJavaだのJavaVMだのと名乗ってるのをSunの人に見つかったら怒られるのは、今でも一緒じゃないかな。個人でやってる分にはお目こぼしされるかも。ですが、Javaロゴを使ったりすると間違いなくやばいです。
以前、携帯のフルブラウザの1つであるjigブラウザが独自のJavaVMを搭載した時も、当初は「JavaVM搭載」なんて公式サイトに書いてましたが、今では「jigletVM」という表現に変わってます。おそらく類似の問題が起きたか起きそうになったかしたのだと思います。
尚、互換性テストは、JSR [jcp.org]毎に用意されています。ですが、そもそも現行最新のJavaSE 6ことJSR270の仕様が、他の複数のJSR仕様のサポートを要求しているので、「JavaSE 6対応」と名乗るには、該当する複数の仕様全ての互換性テストをパスしなければなりません。
そして、互換性テストのライセンスは有償で、普通に買えば、JSR1つあたり数百万円程度です。もし、「JavaSE 6対応」と名乗るために必要な互換性テストを全部そろえようとしたら、1000万円超えてもおかしくはないです。
Re:質問です (スコア:1, 参考になる)
Re: (スコア:0)
元ACです。該当ページを読んでみました。これは互換ライセンスの変更というよりは「OpenJDKコミュニティ」に新しいライセンスとそのためのツール、ドキュメント等が提供されたもののようですね。これ以外のコミュニティにそのままこのライセンスが適用されるという記述はないことから、独自実装だとまた別のライセンスが必要そうな気がします。これが提供されていないのであれば、従来のライセンスと同じ手段を踏む方法がある....のでしょうか?
# OpenJDKもSunは商標扱いしているんですね。このページを読んでいて気づきました。
Re: (スコア:0)
># OpenJDKもSunは商標扱い
そりゃLinuxだって色々あって商標扱いですから不思議はない
http://srad.jp/linux/article.pl?sid=07/04/17/1016207 [srad.jp]
Redhatのような振る舞いをしなければ良いですね
http://srad.jp/linux/article.pl?sid=07/03/27/141234&from=rss [srad.jp]
Re: (スコア:0)
元ACです。30分制限でコメントをあとでつけようとして、その後ばたばたしていて書くのが遅くなりました。すみません。結構お金がかかるのですね。情報ありがとうございました。
Re:Pocket PC (スコア:2)
Re: (スコア:0)
いまだにOS/2使ってる人だっているんだ、それに比べたら…
Re: (スコア:0)
まさに今それで書き込みしてます@トイレ(大)
Re: (スコア:0)
Re: (スコア:0)
OSはPocket PCなんですけどね。