4 ポイント 投稿者 GN⁺ 2025-04-15 | 1件のコメント | WhatsAppで共有
  • ブラウザで Linux と Windows NT を実行できる JavaScript/WASM ベースの PC エミュレータで、Fabrice Bellard が 2011 年に最初の x86 JS エミュレータとして開始し、現在まで発展させてきたプロジェクト
  • TinyEMU ベースの C コードを emscripten でコンパイルし、VirtIO デバイスを活用してファイルシステム・ネットワーク・ブロックデバイスをサポート
  • x86 64 ビット CPU エミュレーションは AVX-512, APX など最新の拡張命令まで含む高い完成度
  • RISC-V 32/64 ビット CPU エミュレーションにも対応し、Alpine Linux, Buildroot などさまざまなディストリビューションを実行可能
  • JavaScript エンジンの性能ベンチマーク、ブラウザ内での Unix 学習、レガシー PC ソフトウェアの実行など 実用的な活用例 を持つ

歴史

  • 2011 年の最初のバージョンは JavaScript で書かれた 最初の PC/x86 エミュレータ で、QEMU の x86 ヘルパーとデバイスコードを再利用
  • 2015 年に asm.js サブセットを適用し、これをサポートするブラウザで速度向上を達成
  • 2016 年に RISC-V エミュレータ TinyEMU を作成した後、C コードを emscripten で JavaScript に変換
    • jor1k(Sebastian Macke)に着想を得た VirtIO 9P ファイルシステム を追加し、リモートファイルシステムへのアクセスやファイルの import/export を容易化
  • VirtIO デバイスを x86 JS エミュレータにも再利用するため、JSLinux の asm.js コードを C に変換した後、再び emscripten で JavaScript に再変換 する過程を経る
    • 細かなチューニングにより、手作業の asm.js バージョンより さらに高速な性能 を達成
  • Windows NT 実行のため、初期にはエミュレートされた Linux 内部で QEMU をネスト実行 する方式を使用
    • x86 エミュレータが AMD SVM 仮想化拡張をサポートするため、ネスト実行でも実用的な水準で利用可能
  • 現在のバージョンは PS/2 キーボード/マウス、IDE ディスク、ダミー VGA など 不足していた PC デバイスを直接エミュレーション して Windows NT をネイティブ実行

x86 CPU エミュレーション

  • x86 CPU エミュレーションとして、以下の機能をサポート:
    • Pentium クラス CPU
    • x87 80 ビット浮動小数点(bit exact)
    • PAE
    • CMOV 命令群
    • MMX, SSE2 対応
    • AMD SVM 仮想マシン拡張(Nested Page Table 対応)
    • RDPMC による命令カウント読み取り
  • 既知の制限事項:
    • メモリアクセス時に セグメント制限および権限チェックを未実施
    • デバッグ未対応(DRx レジスタ)

エミュレートされるデバイス

  • 8259 PIC(Programmable Interrupt Controller)
  • 8254 PIT(Programmable Interrupt Timer)
  • 16450 UART(デバッグ専用)
  • Real Time Clock
  • PCI バス
  • VirtIO コンソール、9P ファイルシステム、ネットワーク、ブロックデバイス、入力
  • Simple framebuffer
  • IDE コントローラ、PS/2 キーボード/マウス、ダミー VGA ディスプレイ(いずれもオプション)

RISC-V CPU エミュレーション

  • 32 ビットまたは 64 ビット RISC-V CPU エミュレーションで、64 ビット FPU および 圧縮命令(compressed instructions) をサポート
  • 現在は RISC-V 64 ビット Buildroot および Fedora ディストリビューションを提供
  • RISC-V 32 ビットイメージも引き続き利用可能だが、もはや積極的にはメンテナンスされていない
    • buildroot-riscv32 のコンソール版および X Window 版を提供

性能

  • 2017 年時点で一般的なデスクトップ PC 上の Firefox ブラウザでは、x86 エミュレータが約 100 MIPS で動作
  • 内蔵の vmtime ユーティリティにより 詳細なベンチマーク を実行可能

JavaScript ターミナル

  • 元の JSLinux ターミナルの改良版で、スクロールバーURL ハイライト をサポート

Linux ディストリビューション

  • Alpine LinuxBuildroot ディストリビューションを使用
  • vfsync, qemacs, tcc など カスタムパッケージ を追加
  • Fluxbox ウィンドウマネージャによるオプションの X Window 対応

ネットワーキング

  • エミュレータ内部から インターネット接続可能
  • Benjamin Burns 提供の websocket VPN を使用
  • 帯域幅は 40 kB/s に制限され、共有 IP ごとに最大 2 接続 まで許可

用途

  • JavaScript エンジンの ベンチマーク(例: Linux 起動所要時間の測定)や asm.js、WASM など新しいブラウザ技術の活用
  • ブラウザを離れずに コマンドライン Unix ツールを学習
  • ブラウザ内での 安全なファイルアクセス(vfsync)
  • レガシー PC ソフトウェア の実行

ソースコードと類似プロジェクト

  • RISC-V 版のソースコードは TinyEMU プロジェクトで提供され、事前コンパイル済みで簡単に導入できるデモも用意
  • 類似プロジェクト:
    • jor1k: OpenRISC OR1K CPU エミュレータ
    • v86: PC エミュレータ
    • angel: RISC-V CPU エミュレータ

1件のコメント

 
ndrgrd 2025-04-16

CORSの設定が誤っているため、リンク先は https://www.bellard.org/jslinux/ ではなく https://bellard.org/jslinux/ にアクセスしないと正常に動作しませんね。