Emulin 公式ページ

Emulin = (java-based EMU lation technology for L inux I a-32 N ative application)

email: Kiyoka Nishiyama

Sorry, only in Japanese ...
一言: Java2 SE 1.3正式版 なかなか出ないですね...

N. What's New

  1. 0.2.13b リリース ( 11,Feb.2000 )

  2. DNSが引けるようになりました。
  3. 0.2.12b リリース ( 17,Jan.2000 )

  4. SIGINTシグナルでコマンド実行の中断ができるようになりました。
  5. 0.2.11b リリース ( 4,Dec.1999 )

  6. local disk のマウントができるようになりました。
  7. 0.2.10b リリース ( 7,Nov.1999 )

  8. freewnn-1.10 のjserverが動作するようになりました。(注意:かなり重い)
  9. FAQ Java大賞 の応募論文を公開しました。( 1,Nov.1999 )

0. 目次

  1. Emulinとは?
  2. 現在の状況と歴史
  3. 動作環境
  4. 配布
  5. 文書
  6. なぜ開発を始めたの?
  7. Emulin の今後
  8. やる予定のないこと
  9. さらなる夢 (たわごとに近いです)
  10. 参考文献

1. Emulinとは?

     Emulin はフリーソフトウェアです。
     Linux for IA-32 バイナリを実行するエミュレータです。
     java で記述されています。
     Emulin は GNU General Public License(GPL2)のもとで配布されています。 

2. 現在の状況と歴史

  • 現在の状況
  •        まだ本格的に使える段階ではありません。
           実際に触ってみたいという人のために、実験的にリリースしています。
    
           * 現在動作しているアプリケーション ( 詳細は FAQ  を参照してください )
             . gzip, tar, nkf, GNU の fileutils, shellutils, textutils, findutils, diffutils, inetutils の一部が動作しています。
             . ash からほとんどの基本コマンドが動作するようになっています。
             . jvim, less も使えるようになりました。(超遅いです。要PentiumII 500MHz以上 ^_^;)
             . ネットワークアプリとして ftp,telnet が動作するようになりました。
             . freewnn-1.10 の jserverが動作するようになりました。
    
           * 現在動きかけているアプリケーション
             gcc                    ( ld だけが動いていません。)
             configure script       ( なぜか途中で落ちます。)
    
           * 現在取り掛かっている作業 ( 優先度順 )
             1. Swing によるコンソールサポート ( 100% Pure Javaを狙いたい )
             2. network 関連のシステムコールの完全なサポート ( samba,lpd を動かしたい )
             3. bash の動作へ向けて 不足しているシステムコールのサポート
             *. 細かいバグの修正は随時重要なものから直していく
    
           まだ、他にも動作するプログラムがあるかもしれませんが確認していません。
           最新バージョンでも以下のような制限があるため注意してください。
    
  • dynamicリンクされたバイナリをサポートしていません。 (staticリンクされたアプリケーションしか動作しません。)
  • FPU命令をサポートしていません。 (浮動小数点ライブラリを使えば、実数を扱うアプリケーションも実行できます。)
  • 歴史
  • emulin-0.2.13b.jar -- 11,Feb.2000
  •             * RingBuffer.java を作成し、 SubProcess.java の構造をシンプルにした。
                * バグ修正 : ストリームデータの到着順が入れ替わるバグを修正した。
                     -> ftp のログインが不安定な問題が解決した。
                * バグ修正 : recvfrom( ) システムコールがセットするアドレス情報の sin_family のエンディアンが逆だった。
                     -> DNSの リゾルバが動作するようになった。
                * バグ修正 : Segment.peekbs( ) で配列のインデックスがマイナスになり、Javaが落ちる。
                * バグ修正 : 64bit リード関数 Memory.load64( )関数にアドレス指定バグがあった
                     -> sed が動いた。
    	    * バグ修正 : Windows 2000 で find -print をやると NullPointerAccess で止まるバグ
              
    
  • emulin-0.2.12b.jar -- 17,Jan.2000
  •             * Signalの実装を行った。(Singal.java Siginfo.java) 追加
                * NativeConsole から SIGINT シグナルを送信できるようにした。
                * Process.java に psigによるシグナル受信チェックを組み込んだ。
                * ネイティブコンソールでの動作時 Swing による Windowがでるようにした。(SIGINT送信用)
                * インストール後のセットアップの自動化を進めた。 setup, setup.bat
                * セットアップ用スイッチ -S 追加 ( bootスクリプト生成用 )
                * インストールされるディレクトリ構成を変更した。( README参照のこと )
    	     ->  ネイティブコンソールから SIGINTを送信して、実行中のプロセスの中断ができるようになった。
              
    
  • emulin-0.2.11b.jar -- 4,Dec.1999
  •             * システムコール未サポートのエラーで、Emulinが落ちるのを修正した。
                    ( そのプロセスだけを exitするようにした。 )
                * mount    システムコールをサポートした。
                * alarm    システムコールをダミーサポートした。
                * fchmod   システムコールをダミーサポートした。
                * readlink システムコールをダミーサポートした。 常に EINVAL(シンボリックリングでない)を返すようにした。
                * sync     システムコールをダミーサポートした。なにもせず常に 0 を返す。
                * umount   システムコールをサポートした。
                * BUG修正: tarの実行で Emulin Error : Unsupported system call... id=[182] のエラーで落ちるバグを修正した。
                   (system call ID 164-190 までのシステムコールをなにもせずリターンするようにした。(Linux 2.0のソースはそうなっている))
    	     ->  local disk のマウントができるようになった。
              
    
  • emulin-0.2.10b.jar -- 7,Nov.1999
  •             * FILD int64 命令をダミー登録した。
                * subprocess を finfo にぶらさげた。 一つのファイルディスクリプタにつき一つの入力監視用サブプロセスとした。
                * subprocess で listenポートの監視をサポートした。
                * listenしたポートは何度でも acceptできるようにした。(これがUNIXとしての正しいスペックである)
                * flockシステムコールをダミーサポートした。
                * ftruncateシステムコールをダミーサポートした。
                * wait4( ) システムコールのバグ修正
                   (status_p 引数が 0 の時、アドレス 0 に終了ステータスを書き込もうとしてSegVで落ちる。)
                * SubProcess : Socketからの先読みバッファのバッファフルチェックをいれた。
                * SubProcess : 先読みのタイミングにWAITをいれないようにした。(sleepせず、最高速で回る。)
                * console.dll を emu_con.dll に変更した。(Windows 2000の console.dllとバッティングするため)
    
              
    
  • emulin-0.2.9b.jar -- 20,Sep.1999
  •             * fork( )    システムコールでプロセスのファイルテーブルの情報が正しくフォークされないバグを修正した。
                * pause( )   システムコールをサポートした。 ( 無限にsleep するだけで、まだ signal を受け付けない )
                * shutdown( )システムコールをダミーとした。
                * accept( )  システムコールでオープンしたファイルがSTREAMではなく、DGRAMソケットになってしまうバグを修正した。
                * gcj によるコンパイルが通るようにした。 ( 但し、gcjは Threadがサポートされていないようなので、正しく動作しなかった。)
              
    
  • emulin-0.2.8b.jar -- 2,Sep.1999
  •             * ネイティブコンソールの ioctl( )パラメータの c_iflagをサポートした。 (IGNCR,ICRNL,INLCRのみ)
    	     -> telnet : リモートのemacs内のシェルバッファが正しく動作するようになった。 ( DNSは引けない )
              
    
  • emulin-0.2.7b.jar -- 25,Aug.1999
  •             * read( ), write( ) システムコール : データグラムパケットの R/Wをサポートした。
                * ネットワークのリード、コンソールからのリードを、スレッドにより先読みするようにした。
                * recvfrom( ) システムコールのバグを修正した。( 受信パケットの ip アドレスが 常に 0.0.0.0 だった )
                * select( ) システムコールのタイムアウト引数をサポートした。
                  -> telnet が 動作した。( DNS は引けない )
              
    
  • emulin-0.2.6b.jar -- 7,Aug.1999
  •             * socket( )   システムコールをサポートした。
                * bind( )     システムコールをサポートした。
                * accept( )   システムコールをサポートした。
                * connect( )  システムコールをサポートした。
                * listen( )   システムコールをサポートした。
                * revc( )     システムコールをサポートした。
                * send( )     システムコールをサポートした。
                * recvfrom( ) システムコールをサポートした。
                * sendto( )   システムコールをサポートした。
                * select( )   システムコールをサポートした。
                * ROR,ROL命令のバグを修正した。(1,2バイトオペランドに対して正しい動作ができていなかった。)
                * FLD命令をサポートした。
                * FSTP命令をサポートした。
                * FST命令をサポートした。
                * BSF命令をサポートした。
                * BSR命令をサポートした。
                * FST命令をサポートした。
                * FILD命令をサポートした。
                * RET offset 命令が RET 命令になるバグを修正した。
                * FCHS命令をサポートした。( ダミー )
                * FXCH命令をサポートした。( ダミー )
                  -> ftp が 動作した。( DNS は引けない )
                  -> smbclient が動作した。 ( 但し Linux 上でしか動いていない。 Windows 上では動かない )
                  -> dl_open( ) が動作するようになり、シェアードライブラリの読み込み実行ができるようになった。
              
    
  • emulin-0.2.5b.jar -- 29,May.1999
  •             * getrlimit( ) システムコールをサポートした。
                * dup2( ) システムコールをサポートした。
                * dup( )  システムコールが常に 0 を返すバグを修正した。
                * 名前無しパイプをリングバッファ状にした。
                * kernel のメインループと内蔵 init のスレッド優先度を下げた。
                * メモリフェッチに cache 機構を内蔵した。( パフォーマンスが約2倍になった )
                * wait4( ) システムコールで、リターンステータスを正しく返さないバグを修正した。
                * movsx 命令のバグを修正した。(転送元サイズの間違い)
                * movzx 命令のバグを修正した。(転送元サイズの間違い)
                * open( ) システムコールの O_TRANC 指定時のバグを修正した。
                * Nativeコンソールを実装した。( Linux, Windows のみ )
                * カレントワーキングディレクトリを プロセスごとに持つようにした。
              
    
  • emulin-0.2.4b.jar -- 25,Apr.1999
  •             * pipe  システムコールをサポートした。
                * getcwd( ) の戻り値が常に NULL となるバグを修正した。 ( /.. /. パスの扱いができていなかった )
                * 書き込みファイルのオープンのバグを修正した。( 既にあるファイルは更新できないバグがあった。)
                * accessシステムコールのバグを修正した。 ( その結果,which コマンドが正しく動作しなかった。)
              
    
  • emulin-0.2.3b.jar -- 11,Apr.1999
  •             * fork  システムコールをサポートした。
                * wait4 システムコールをサポートした。
                * execveシステムコールをサポートした。
                * 内蔵型 initプロセス をサポートした。
                * マルチタスクをサポートした( Javaのスレッド機能を使用した。 )
                * デバッグ情報に、どのプロセスが出したものかがわかるようにタグを付けた。
                * emulin.cnf の pid,gid,gid パラメータを無効にした。(意味が無くなった)
                * READMEの CLASSPATH設定方法 の間違いを直した。 ( -> Thanks to Kazuyuki SHUDO ! )
              
    
  • emulin-0.2.2b.jar -- 4,Apr.1999
  •             * lseekシステムコールが常に 0 を返すバグを修正した。
                * mmapシステムコールのバグを修正した。(file をメモリにマップすると、NullPointerExeptionで落ちるバグ)
                * mmapシステムコール: 割り当てるアドレスの指定を無視するバグを修正した。
                * cmpb,cmbw 命令のバグ修正した。(符号拡張していなかった)
                * stos,lods 命令のバグを修正した。(更新してはいけないレジスタを更新していた)
                * STDERR(fd=2)への出力をしようとするとNullPointerExceptionで落ちるバグを修正した。
                * chdirシステムコールをサポートした。
                * CPU の LEAVE命令をサポートした。
              
    
  • emulin-0.2.1b.jar -- 7,Mar.1999
  •             * ファイルアクセスを行うコードを FileAccess.javaにまとめた。
                * Linux アプリケーションを別配布とした。
                * 空のディレクトリを扱おうとすると、javaの例外エラーで止まるバグ修正(tarの誤動作で発覚した)
                * Windows での実行時に、内部でファイルセパレータを正しく変換できていなためファイルアクセスに失敗するバグを修正した。
                * x86 命令デコーダのパフォーマンスを若干改善した。(実行速度が平均で約 25%アップした)
              
    
  • emulin-0.20b.jar -- 2,Feb.1999
  •             * 始めての GPL2 ライセンスでのリリース
                * 機能的には、emulin-0.11b と同じ。Copyright を追加し、リビルドした。
              
    
  • emulin-0.11b.jar -- 1,Feb.1999
  •             * 実験的にバイナリのみのリリース
                * ls, nkf, gzip, tar, GNU fileutils が動作した。
                * emulin.cnf をサポートし、初期設定値を定義できるようにした。
                * 仮想ファイルパスをサポートした。
              
    
  • emulin-0.10b.jar -- 23,Jan.1999
  •             * 実験的にバイナリのみのリリース
                * ls, nkf, gzip, tar, mkdir 程度が動作した。
              
    

    3. 動作環境

    3.1 システム構成図

    図1

    3.2 以下のシステムで動作確認しています。


    4. 配布

       現在のバージョンは、実験的リリースバージョンです。(バージョン番号の最後の 'b' はベータの意味です。)
       配布条件等は付属ドキュメントを参照してください。
       完全に無保証です。
    

    5. 文書


    5. なぜ開発を始めたの?


    6. Emulin の今後

       1. Internet サーバー等が動作する。
         apache, bind, ftpd, delegate などのインストールなどが簡単にでき、
         動かせればいいなと思っています。
         プラットフォームに依存しない、サーバーパッケージなどが作れれば
         おもしろいと思います。
    
       2. samba, nfs サーバー等が動作する。
         最終的には、 samba のようなファイルサーバーが MacOS や BeOSで動作
         すればいいなと思っています。(OSの安定性の問題がありますが)
         現在、 MacOS と Windows 間のファイル共有などは、商用ソフトを買う以外
         実現方法がないようです。
         いつまで待っても、MacOS用の samba は誰も作られないようですし...
         また、Windowsで Netatalk (IP版) が動作すれば、MacとWindows のファイル共有なんかも
         簡単になるのではないかと思います。
         ※ これらは、 AppleShare IPを買えば実現できるようです。しかしソースが公開
            されていません。それに、価格はいくらか知ってます? :-)
    
       3. Linux アプリの構築ができるようになる。
         shell環境は Cygnus社 の cygwin32 環境と同じレベルまでいければいいと思います。
         ( アプリケーションの configure & make ができるレベルまでいけるか? )
    
       4. Jini のサービスを利用できるようになる。
         プリンタ、Disk等 Jiniサービスを認識し、デバイスサポートを一本化できればシンプルだと思います。
    
       5. 簡単インストール
         バージョン 0.3.0 では、Zero G software のインストーラを使う予定です。
         エミュレーション環境が安定した後は、インストールを簡単にする必要がありそうです。
    

    7. やる予定のないこと

       1. init から動作し login を受け付け... というような完全な
           Linux 環境を動かすことまでは考えていません。
          そこまでやるのなら、本物のLinuxBoxを用意すれば?ということになると思います。
    
       2. パフォーマンスのためのチューニング
          Emulin のコードをバリバリにチューニングをすることはやりません。
          あくまでコードは読みやすい状態を保つためです。
          今後の HotSpot や gcj 、 ムーアの法則に期待するのみです。
          ※ 現在、CPUエミュレーションをやらないモードが実現できないかと考えています。
             つまり Intel系マシンではコードをそのまま走らせるわけです。
             もしくは、Plan9 のように、CPUサーバーをNative CPUのマシンで提供するなど。 
    

    8. さらなる夢 (たわごとに近いです)

       多くは語らないようにしましょう。
       実現できなかった時に悲しいですから。
    
       1. Jini対応デバイスのなかに Linux アプリを解き放て
         「今日は電子レンジのCPUパワーが開いているな... よしよし
          rc5 のクラッキングプロセスは 電子レンジに移行してと...」
          ほとんど SF に近い世界になりつつありますね ^_^;
    
       2. セガ Dream Cast を Proxyserver に
          Dream Cast には標準で、JV-Liteが入っているようです。
          modemも標準でついているということは... delegate を使って...
          CDを入れて電源をいれるだけで、DialUp proxyserver だ!
    
       3. 携帯電話でunixサーバー
          携帯電話のなかで、Sambaサーバーを動かし、いつでもWindowsと
          携帯電話のアドレス帳を共有...
    
      
    

    9. 参考文献

       Emulinを開発するために参照している本です。
       一般的にEmulator のように既にスペックが決まっているものを開発する時は、
       なるべく多くの本を持っているほうが断然効率が上がります。
       ぐっとこらえて、高価な本も買ってしまいましょう。
    
       1. 80x86/80x87ファミリー・テクニカルハンドブック
          Robert L.Hummel 著     槌田 浩一 訳
          技術評論社
          ISBN4-87408-588-1 C3055
          5800円
    
             Pentium系CPUのスペックについてはこれ一冊で十分です。
    
       2. プログラミングLinux
          Michael K.Johnson/Erik W.Troan 著   (株)クイック 訳
          アスキー
          ISBN4-7561-2044-X
          5800円
    
             Linuxアプリケーションのプログラミングについて書かれています。
             Cライブラリを含むLinuxの動作や考え方を詳しく書いているので、
             Kernelの解説書を読むよりも参考になることがあります。
    
       3. オペレーティングシステム  第2版   設計と理論およびMINIXによる実装
          A・S・タネンバウム + A・S・ウッドハル 著   千輝 順子 訳   今泉 貴史 監修
          プレンティスホール出版
          ISBN4-89471-047-1
          8800円+税
    
             アルゴリズム等が説明されており、OSの考え方が詳しくかかれています。
             OSの勉強をするためには、よいかもしれません。
             MINIXはLinux等のフルスペックUNIXに比べて、機能が少ないため、
             どこまでが、UNIXの基本的な機能なのかを理解するのには最適です。
             本の書き方としては、おおまかなことと細かいことがいっぺんに書かれて
             いるため、知りたいことを探すのに苦労します。
             勉強用としてはいいですが、OS設計のリファレンスとしては使いにくいです。
             全ページ数のうち MINIXの全ソースが1/3を占めています。
    
       4. UNIXカーネルの魔法   System V リリース4のアーキテクチャ
          バーニー・グッドハート + ジェームス・コックス 著    櫻川 貴司 監訳
          プレンティスホール出版
          ISBN4-931356-04-4
          6311円+税
    
             上記MINIXの本に比べて、こちらはフルスペックのUNIX Kernelの解説書です。
             もしこれだけを読んでいたら、いったい何から手をつけたらよいか
             分からなくなったでしょう。しかし、自分の知りたいことを探す場合は
             こちらの方が使いやすいです。
             この本の内容をながめると、自分がいまなんと無謀なことをやろうと
             しているんだろうと思うくらい規模が大きいです。
             上記MINIXの本とこの本の2冊を交互に参照して、何をやるべきか/やらないべきか
             を決定しています。
    
       5. INSIDE LINUX
          Randolph Bentson 著    槍山 正幸 監訳  (株)アイディ 訳
          レーザー 5 出版
          ISBN4-900813-21-4
          3800円+税
    
             Linuxの内部構造を解説しています。
             UNIXを実装する際に参考にできるような、具体的な内容は
             あまりかかれていません。
             Linuxの進化が早いため、内容も古くなっています。
             いまのところ、Linuxソースを読むための補助程度にしか訳に立っていません。
             ちなみにこの本は、Linux Conference 98 の後  Free BSD ,Linux 懇親会の
             ビンゴゲームで当たったものです。
    
       6. JAVAクイックリファレンス
          David Flanagan 著     日本サン・マイクロシステムズ(株) 監訳  永松 健司 訳
          オライリー・ジャパン
          ISBN4-900900-08-7
          4017円
    
             この本に書かれている APIはもう既に古いため参照していません。
             言語のスペックについては、この本を参照します。
    
       7. Java言語入門 アプレット、AWT、先進的機構
          ローラ・リメイ + チャールズ・L・パーキンズ 著
          プレンティスホール出版
          ISBN4-88735-011-2  C3055
          4800円
    
             サンプルソースが多く、参考になります。
             特にスレッドのあたりは参考になりました。
             言語リファレンスとしてはあまり使えません。
    
       8. Java Native Interface プログラミング
          ロブ・ゴードン 著   林 秀幸 訳
          プレンティスホール出版
          ISBN4-89471-080-3  C3055
          4500円
    
             コンソールの実装でJNIを使った時に参照しました。
             まだ最初の方しか読んでいません。
             コンソールの実装は簡単過ぎたので、この本はいまのところ
             手に余っています。
    
       9. Perlプログラミング
          Larry Wall and Randal L.Schwartz 著   近藤 嘉雪 訳
          ソフトバング(株)
          ISBN4-89052-384-7  C0055
          4500円
    
             超有名な本です。 Perl 4 の時の本なので、すこし古いです。
             読み物としてもリファレンスとしても、これ一冊で十分です。
             現在は Perl 5 対応の本が出版されています。
    
      10. Linux 2.0 カーネルブック
          R.Card/E.Dumas/F.Mevel 共著
          (株)オーム社
          ISBN4-274-07879-5  C3055
          5300円
    
             シグナルの実際の実装が知りたくて、買いました。
             Linux内部の具体的な定数定義なども書かれているため、
             エミュレータを作る程度なら、もうカーネルソースは読む必要が
             なさそうです。
    
      
    

    Copyright (C) 1999 Kiyoka Nishiyama. All rights reserved.
    $Date: 2000/04/26 14:26:20 $