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 연구를 위해 "25k in opus/fable tokens for debugging and JIT research" 비용이 발생했다고 언급하며, 복잡한 포팅 작업에서 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: 프로젝트는 현재 견고한 모바일 지원이 부족합니다. 보고된 이슈는 Android Chrome에서의 IME/키보드 작동 불능, 복사-붙여넣기 기능 오류, 터치 스크롤 실패 등이 있습니다.
- Stability: 일부 사용자는 특정 브라우저 버전(예: aarch64의 Firefox 152.0.6)에서 데모를 실행하려고 할 때
SecurityError및unsupported syscall: __syscall_madvise오류를 보고했습니다.
Comparison to Prior Art
기술적 논의에서는 WebKit.js를 WebKit 렌더링 엔진이 JavaScript로 포팅된 이전 사례로 언급하며, 웹 플랫폼 내에 전체 렌더링 엔진을 임베딩하는 추세가 나타나고 있음을 시사했습니다.