- 一般的にPDFファイルは静的な文書だと思われがちだが、実際には JavaScript をサポートする機能が含まれている
- PDF標準には独自の JavaScript 標準ライブラリがある
- Chromium や Firefox のような現代的なブラウザは、セキュリティ上の理由からごく限られた API しか実装していない
- Adobe Acrobat だけが PDF 内 JavaScript の完全な仕様をサポートしており、3Dレンダリング、HTTPリクエスト、ユーザーのすべてのモニター検出など、非常に広範な機能を含んでいる
- 制限されたブラウザ API を前提としても、必要な計算ロジックは実行できるが、I/O 部分は非常に制限される
- Cコードを asm.js にコンパイルして PDF 内で実行できる
- 古いバージョンの Emscripten(asm.js ターゲットをサポートする 1.39.20 など)を使用する
- TinyEMU RISC-Vエミュレータを改変して asm.js にコンパイルし、PDF で実行する構成
- 画面出力と入力方式は DoomPDF(PDF内で Doom を実行する)で使われていたものと同じ
- 画面は1行を1つのテキストフィールドとして使い、ASCII文字でピクセルの状態を表現する
- 入力は仮想キーボードとテキストボックスを通じて VM にキー入力を渡す
- パフォーマンス上の問題が大きく発生する
- 例: Linuxカーネルの起動に30〜60秒ほどかかり、通常の実行と比べて100倍以上遅い
- Chrome の PDF エンジンの V8 では JIT が無効化されているため、性能が大きく低下する
- ルートファイルシステムは64ビット版または32ビット版を選択できる
- デフォルトでは32ビットの Buildroot システム(もともと TinyEMU のサンプルから持ってきたもの)を使う
- 64ビット版の Alpine Linux もあるが、性能が約2倍遅いため、通常は使われない
4件のコメント
Doom並みの狂気、Linuxwww
これはロマンなのか狂気なのか ブルブル
すごい…
うわ……