17 ポイント 投稿者 xguru 2025-02-05 | 4件のコメント | WhatsAppで共有
  • 一般的に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件のコメント

 
xcutz 2025-02-06

Doom並みの狂気、Linuxwww

 
tsboard 2025-02-05

これはロマンなのか狂気なのか ブルブル

 
kuthia 2025-02-05

すごい…

 
kaydash 2025-02-05

うわ……