世界を動かす技術を、日本語で。

Show HN: WebAssemblyでのFirefox

概要

  • FirefoxのGeckoエンジンをWebAssemblyで動作
  • ブラウザタブ内で完全なFirefox UIとレンダリングを実現
  • WISPプロトコルによるエンドツーエンド暗号化通信
  • WASM→JS JITによる実験的な高速化機能
  • 実験的プロジェクトとして開発、より軽量な代替も存在

WebAssembly上で動作するFirefoxの概要

  • GeckoエンジンSpidermonkey JSエンジン をWebAssemblyにコンパイルし、ブラウザタブ内で実行
  • Firefoxの 本物のユーザーインターフェース を再現
  • WebGL を利用したウェブコンテンツのGPUアクセラレーション描画
  • JIT(Just-In-Time)コンパイル によるWASM→JSの実験的高速化機能
  • Wispサーバー を利用し、WebSocket経由でタブごとにウェブコンテンツをプロキシ
    • Puter.js によるブラウザ内ネットワーキング
  • エンドツーエンド暗号化 をWISPプロトコルで実現
  • 25,000 opus/fableトークン 以上をデバッグやJIT研究に投入

技術的特徴とユースケース

  • 全てのUIコンポーネント ・描画エンジンがWASMで動作
  • ブラウザ内でブラウザを動かす 実験的アプローチ
  • セキュリティ強化のための 暗号化通信
  • JIT機能 はバグが発生する可能性があるため、実験的な利用を推奨
  • メモリ消費量が高いため、実用性よりも技術デモや研究用途向け

代替案と関連プロジェクト

  • より実用的な「 browser in browser」体験を提供する browser.js も開発
    • https://github.com/HeyPuter/browser.js で公開
    • メモリ消費量が少なく、より軽量な動作を実現
  • 今回のプロジェクトは WebAssemblyの限界に挑戦 するための実験的試み

まとめ

  • FirefoxのWebAssembly移植は 技術的チャレンジWebの新たな可能性 を示すデモ
  • 本格的な利用には向かないが、 セキュリティ・パフォーマンス・互換性 の観点で貴重な知見を提供

Hackerたちの意見

あと、誰かが聞いてるなら、Firefoxの中でFirefox-wasmを動かすことができるよ!でも、これを一度だけ読み込むことができたけど、そのレベルだと結構不安定になるね。

よ、聞いたぜ。お前はFirefoxが好きだって。

うまく動かなかった。全然フリーズしちゃった。

これがあるのは本当に嬉しい。数ヶ月前からこんなことを考えてたんだ。最近、VIDAA OSっていう、すべてがウェブページからレンダリングされるロックダウンされたLinuxベースのOSのテレビを手に入れたんだけど、内蔵ブラウザは広告ブロックをサポートしてないんだ(VIDAAがテレビで広告を表示して利益を得てると思う)。新しいアプリをインストールすることもできなくて、ウェブページじゃないとダメなんだ。これを使えば、既存のブラウザ内でFirefoxを動かして、Firefox内にuBlock Originをインストールできるかも…今週末のプロジェクトはこれに決まりだな。

近いうちに、https://github.com/HeyPuter/browser.js に拡張機能のサポートを追加する予定だよ。これで、フルオーバーヘッドなしでそのようなユースケースもカバーできるといいな。

Firefoxは本当にuBlock Originをそのままバンドルすべきだと思う。結局後でインストールするけど、Mozillaの考えがよくわからない。Googleの後ろに留まりたいみたいだね。

普通、1〜2GBのRAMのテレビでブラウザの中にブラウザを動かそうとしたら、RAMが足りなくなる可能性が高いよ。例えば、pi-holeやAdGuardみたいなネットワークレベルの広告ブロッカーを使った方がいいかもね。

ブラウザのサンドボックス化は完全に解決されたね。

うーん…これが本当にそう感じるんだけど?攻撃者がユーザーのマシンで何かをしようとすると、Firefoxの脆弱性とwasmランタイムの脆弱性を見つけなきゃいけないから、かなり高いハードルだと思う。これを使うのはかなり安全だと感じるよ。唯一の疑問はパフォーマンスがどうなるかと、日常的に使う上での問題点があるかどうかだけど、それはあまり大きな問題にはならない気がする。あ、あと、攻撃者がサンドボックス内で何かを妥協する可能性があるっていういつもの注意点もあるけど、異なるインスタンスで異なるものを動かせば隔離されるからね。

先行技術:WebKit.js、JSに移植されたWebKitレンダリングエンジン https://github.com/trevorlinton/webkit.js/

このポートはデバッグとJIT研究のために25k以上のopus/fableトークンがかかった >これはWebAssemblyの限界を押し広げるための楽しい実験だったんだ。プロジェクトの大ファンだけど、聞きたいことがある。もし25kを「楽しい実験」として使うなら、真剣な作業のための閾値はどこにあるの?

本当に$25kだったの?それとも$25kのコストでサブスクリプションを通じてやったの? 今、OpenAIの$100サブに入ってるけど、よくCodexbarが1日に$250の使用量を示すんだよね。 キャッシュされたトークンシェアにもアクセスできないと思うから、それがかなり膨らませてるかも。

Hacker Newsで議論の続きを見る