- ブラウザで 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 Linux と Buildroot ディストリビューションを使用
- 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件のコメント
CORSの設定が誤っているため、リンク先は https://www.bellard.org/jslinux/ ではなく https://bellard.org/jslinux/ にアクセスしないと正常に動作しませんね。