Firefox in WebAssembly: Porting a Browser to WASM
Firefox in WebAssembly: Porting a Browser to WASM
Firefox in WebAssembly 概述
Firefox in WebAssembly 是一个技术演示,旨在将 Firefox 浏览器引擎移植到 WebAssembly (WASM),从而允许在一个浏览器内部运行一个完整的浏览器。该项目通过基于 WebGL 的 Web 内容渲染实现了 GPU 加速,并包含一个实验性的 JavaScript-to-WASM 即时编译 (JIT) 编译器,以提高执行速度。
技术架构与实现
渲染与执行
- GPU 加速:该项目利用 WebGL 处理 Web 内容的渲染,在 WASM 环境中提供硬件加速。
- 实验性 JIT:为了解决性能问题,该项目包含一个 JS $\rightarrow$ WASM JIT 编译器。开发者指出,此功能为实验性功能,可能包含错误。
- 网络:Web 内容并非由 WASM 实例直接加载;相反,它通过 WebSockets 代理到由 Puter 托管的 Wisp 服务器。这种架构意味着网络流量源自代理服务器,而非用户的本地机器。
兼容性与要求
- JSPI 支持:该项目需要 WebAssembly JavaScript Promise Integration (JSPI) 才能运行。运行不支持 JSPI 的浏览器的用户将无法加载该演示。
- 递归执行:作者确认,在技术上运行 "firefox-wasm inside firefox-wasm inside firefox" 是可行的,尽管系统在这种程度的递归下会变得非常不稳定。
社区洞察与技术挑战
性能与开发成本
移植工作涉及在 AI 辅助编程方面的重大投入。作者提到,移植成本超过了 "25k in opus/fable tokens for debugging and JIT research",强调了 LLM 在复杂移植任务中的作用。
安全与隐私担忧
社区成员对基于代理的网络模型提出了担忧。由于流量通过 Puter 托管的服务器进行路由,用户的 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.
实际应用场景与局限性
用户们识别出了该移植版本的几个潜在应用和局限性:
- 绕过限制:一些用户建议使用此工具在受限的操作系统环境(例如 VIDAA OS)中运行广告拦截器(如 uBlock Origin),因为这些环境的原生浏览器禁止使用扩展程序。
- 移动端支持:该项目目前缺乏强大的移动端支持。报告的问题包括 IME/键盘无法使用、复制粘贴功能失效以及 Android Chrome 上的触摸滚动失败。
- 稳定性:一些用户在尝试于特定浏览器版本(例如 aarch64 上的 Firefox 152.0.6)运行演示时,报告了
SecurityError和unsupported syscall: __syscall_madvise错误。
与前人工作的比较
技术讨论指向了 WebKit.js,将其作为 WebKit 渲染引擎被移植到 JavaScript 的先例,这表明了将完整的渲染引擎嵌入 Web 平台的趋势。