JNode0.2.6

早速触ってみました。
激しく遅いのはVMWare上だからどうにもならないものとして(ディスクからブートすると違うのかなぁ?)、「startawt」コマンドでGUI環境に入ってからが見所なんでしょうね。
心持ちWindowsのような、GNOMEのようなUIです。左下のスタートボタンから色々アプリを開けます。
メニューの開いた後にゴミが残ります。再描画がまだ未調整のようです。

  • AWTDemo

Gnuclasspathいつものアレですね。awtのボタンに対するpackが上手く働いていないのかボタンの一部が出ません。
また、ダイアログ関連も何となく挙動が怪しいです。
ウィンドウの装飾はInternalFrameのもの。やっぱり実装は巨大なWindow内にInternalFrameとしてFrameを実装していますね。

  • SwingTest

テキストエディタなど、いくつかのアプリは動きます。
全体的にSwingのJMenuの描画が今一つです。フォントのascentがうまく取れてないような気がします。
JTextareaのキャレットもおかしなところに行きます。これもきっと、フォントのboundsが取れてないんでしょうねぇ。
あと、最大化をウィンドウの装飾でやろうとするとそのまま固まることがあるようです。
全体的にまだあちこち不安定のようです。


ただ、JavaソースをAOTコンパイルしたVMでCPUパワーによっては大変重く解釈されてしまうかもしれませんが、Graphicsやawt,SwingまわりはGNU Classpathの機能で割合安定してそうではあるんですよね。
同じGNU Classpathを使っているMysaifu JVMでSwingのアプリを動かしたときには、すごく重いながらももっと描画回りはしっかりしてたんだけどなぁ。
独自グラフィックドライバが悪さしてるのかな?


私はJNodeほど大それたことは考えてなくて、「何かのosの上で動いているアプリと明示的なサービスは全部一つのJavaVMインスタンス上」という環境を考えてます。ネイティブアプリというものを使わなくてもコンピュータはおおむね扱えるよね、という。
ちなみにAndroidのDalvikはプロセスごとにVMインスタンスを生成する発想みたいです。JITをキャッシュしないならこれでもいいのかも。ま、余談ですが。
JavaだけでIPCという考えをあまりしないで済むならスレッド間の割り込みは単純に収まるよね、という発想です。ま、スレッドは大概協調動作しなくても困りませんが。
ともあれ、JNodeは私の考えていた世界をかなり極端な感じで実装している素敵な環境です。
スレッドとオブジェクトのハンドリングを所与として受け入れれば、OSの実装はかなりシンプルになるはずですし。ガベージコレクタなどのプリミティブなOSには無いはずの機能も実装する必要はありますが。


最近、id:propellaさんが「イメージは所詮ライブラリのキャッシュ」という言い方をしていましたが、プラグインをどがどがと取り込んでオブジェクトメモリを大量消費しているところを見ると、なるほどなと思います。このスナップショットを何らかの形でとっておこうとするとSmalltalkのイメージになるんですね。いえ、Javaにはメモリイメージとスレッドのダンプと再開という発想はありませんが。
そういや、JNodeではプラグイン(クラス)のアンロードってどうしてるんだろ? どこかのタイミングで使わないクラスをアンロードしないと際限なくメモリを使いそうなんだけど。インスタンスと同様にガベージコレクトの対象になるのかな?