Firefox in WebAssembly: Porting a Browser to WASM
Firefox in WebAssembly: Porting a Browser to WASM
Firefox in WebAssembly Overview
Firefox in WebAssemblyは、FirefoxブラウザエンジンをWebAssembly (WASM) に移植する技術デモンストレーションであり、フルブラウザを別のウェブブラウザ内で実行することを可能にします。このプロジェクトは、ウェブコンテンツのWebGLベースのレンダリングによるGPU加速を実装しており、実行速度を向上させるための実験的なJavaScript-to-WASM Just-In-Time (JIT) コンパイラを含んでいます。
Technical Architecture and Implementation
Rendering and Execution
- GPU Acceleration: このプロジェクトはWebGLを利用してウェブコンテンツのレンダリングを処理し、WASM環境内でのハードウェア加速を提供します。
- Experimental JIT: パフォーマンスに対処するため、プロジェクトには JS $\rightarrow$ WASM JIT コンパイラが含まれています。開発者は、この機能は実験的であり、バグが含まれている可能性があると述べています。
- Networking: ウェブコンテンツはWASMインスタンスによって直接ロードされるのではなく、代わりにWebSocketsを介してPuter-hosted Wispサーバーを経由してプロキシされます。このアーキテクチャでは、ネットワークトラフィックはユーザーのローカルマシンではなく、プロキシサーバーから発生します。
Compatibility and Requirements
- JSPI Support: プロジェクトの動作にはWebAssembly JavaScript Promise Integration (JSPI) が必要です。JSPIをサポートしていないブラウザを使用しているユーザーは、デモをロードすることができません。
- Recursive Execution: 著者は、「firefox-wasm inside firefox-wasm inside firefox」を実行することは技術的に可能であると確認しましたが、このレベルの再帰ではシステムが非常に不安定になります。
Community Insights and Technical Challenges
Performance and Development Cost
移植の展開には、AI支援コーディングへの多大な投資が必要でした。著者は、移植コストが「デバッグとJIT研究のためにopus/fableトークンで25k以上」かかったと述べており、複雑な移植タスクにおけるLLMの役割を強調しています。
Security and Privacy Concerns
コミュニティメンバーは、プロキシベースのネットワーキングモデルに関する懸念を提起しています。トラフィックがPuter-hostedサーバーを経由してルーティングされるため、ユーザーのIPアドレスはマスクされ、サーバー所有者はトラフィックを可視化できます。
All the network traffic from that browser is routed through a server. My IP inside that browser was in India and on CloudFlare network. I don’t particularly trust Puter.
Practical Use Cases and Limitations
ユーザーは、この移植のいくつかの潜在的な用途と制限を特定しています。
- Bypassing Restrictions: 一部のユーザーは、制限されたOS環境(例:VIDAA OS)において、ネイティブブラウザが拡張機能を禁止している場合に、広告ブロック(uBlock Originなど)を実行するためにこれを使用することを提案しています。
- Mobile Support: プロジェクトは現在、堅牢なモバイルサポートが不足しています。報告されている問題には、IME/キーボードが機能しない、コピー&ペースト機能の破損、Android Chromeでのタッチスクロールの失敗などが含まれます。
- Stability: 一部のユーザーは、特定のブラウザバージョン(例:aarch64上のFirefox 152.0.6)でデモを実行しようとした際に、
SecurityErrorやunsupported syscall: __syscall_madviseエラーを報告しています。
Comparison to Prior Art
技術的な議論では、WebKit.jsがWebKitレンダリングエンジンをJavaScriptに移植した先行例として指摘されており、ウェブプラットフォーム内にフルレンダリングエンジンを埋め込む傾向を示唆しています。