3 ポイント 投稿者 GN⁺ 2024-07-12 | 1件のコメント | WhatsAppで共有
  • WebVM は WebAssembly ベースでブラウザ内に Linux 環境を実行し、サーバーなしで x86 バイナリをクライアント側で扱えるようにする
  • 中核基盤の CheerpX は、x86-to-WebAssembly JIT コンパイラ、仮想ブロックベースのファイルシステム、Linux システムコールエミュレータによってブラウザ仮想化を構成する
  • 実行はブラウザの サンドボックス 内で処理され、x86 バイナリの実行はサーバーではなくユーザーのデバイス上で行われる
  • 例示コマンドには python3gccobjdumpvimcurl などが含まれ、curl --max-time 15 parrot.live にはネットワーキングが必要
  • 別途体験環境として Alpine / Xorg / i3 WebVM が提供され、BrowserCode はブラウザで Claude Code を実行する関連項目

WebVMの実行方式

  • WebVM は WebAssembly を通じてブラウザで動作する仮想 Linux 環境
  • 基盤エンジンの CheerpX が x86 バイナリを安全なサンドボックス内で実行する
    • 実行処理は完全に クライアント側 で行われる

CheerpXのブラウザ仮想化構成

  • CheerpX はブラウザベースの仮想化のために次の要素を含む
    • x86-to-WebAssembly JIT コンパイラ

      • 仮想 ブロックベースのファイルシステム
      • Linux システムコールエミュレータ

体験環境と例示コマンド

  • Alpine / Xorg / i3 WebVM を新しい WebVM 体験環境として提供
  • 基本的な WebVM の例では次のコマンドを提案している
    • python3 examples/python3/fibonacci.py
    • gcc -o helloworld examples/c/helloworld.c && ./helloworld
    • objdump -d ./helloworld | less -M
    • vim examples/c/helloworld.c
    • curl --max-time 15 parrot.live
      • このコマンドには ネットワーキング が必要

関連項目

  • BrowserCode は WebAssembly を通じてブラウザで Claude Code を実行する関連項目

1件のコメント

 
GN⁺ 2024-07-12
Hacker News の意見
  • 似たようなプロジェクトはほかにもいくつかある。VM 系では https://copy.sh/v86/https://bellard.org/jslinux/https://jamesfriend.com.au/pce-js/https://github.com/jsdf/pce)、https://www.pcjs.org/ があり、最後のものは対応するハードウェアや OS が多い(https://github.com/jeffpar/pcjs
    Mac OS 系では https://infinitemac.org/https://blog.persistent.info/2023/03/infinitemac-dot-org.htm...)、https://jamesfriend.com.au/projects/basiliskii/BasiliskII-wo...https://jamesfriend.com.au/pce-js/pce-js-apps/ もある

    • これらはフルシステムエミュレータで、WebVM はエミュレートされたユーザー空間バイナリ向けの互換レイヤーに近い。つまり「Linux システムコールエミュレータ」なので少し高レベルで、その分だけ使いやすく柔軟なほうだ
    • https://exaequos.com
    • Minecraft 内で作られた高度なコンピュータは、こうしたプロジェクトや WebVM と比べて、精巧さの尺度ではどのあたりに位置するのか気になる
      https://duckduckgo.com/?q=comptuers+built+in+minecraft
  • ベースになっているプロジェクトはオープンソースではなさそうだ。「WebVM は、私たちがホストしている CheerpX ビルドをベースにしています。ユーザーが WebVM の独自バージョンをデプロイすることは推奨しますが、現時点では CheerpX エンジン自体のセルフホスティングは許可していません。この公開 CheerpX ビルドは現状のまま提供され、技術調査、テスト、非商用利用には無料です。CheerpX/WebVM の上に製品を作りたい場合はご連絡ください」とある
    https://labs.leaningtech.com/blog/mini-webvm-your-linux-box-...

    • 残念だ。最初は期待していたのに、もうこのプロジェクトへの興味がなくなった
  • WebVM のリード開発者で、Leaning Technologies の CTO だ。質問があれば答えるが、こちらはかなり遅い時間なので数時間後になるかもしれない。Discord に参加してもよい: https://discord.gg/yTNZgySKGa

    • 参加してくれてありがとう。馬鹿げた質問かもしれないが、なぜこういうものを作るのかが気になる。どんなユースケースを想定しているのかも知りたいし、Discord ではなく IRC サーバーやチャンネルはないのかも聞きたい
      取り組みは素晴らしい。軽い皮肉に聞こえないことを願う。付け加えると、vi を開いたら Esc がブラウザの問題なのかうまく効かず、「vi を終了できない」をまた言うことになるとは思わなかった
    • WebVM と Leaning Tech のほかの取り組みが本当に好きだ。ネットワーキング部分でlwIP を扱った実装がオープンソースなのか気になる
      以前リンクされていたネットワーキング関連の記事は読んだが、具体的にどんなアプローチを取ったのか見てみたい
    • Linux の Firefox でテストしたところ、おおむねよく動くが、コピー&ペーストができないので、プログラミングのような編集作業にはかなり致命的かもしれない
      また、時々画面が固まり、キー入力が表示されなくなる。たいてい Backspace を押すと画面が戻る。Firefox の about:performance には該当タブの CPU 使用率が表示されず、自分のマシンの Linux htop でも Firefox が変に見えることはない
      質問もある。タブを閉じて開き直しても新しいファイルが残っているのを見たが、開発者ツールで localStorage などは確認していない。それを使っているのか、それとも別のブラウザ機能を使っているのか気になる。これらのファイルは実際どのくらい永続的なのか?
    • 努力に感謝する。GUI アプリケーション対応のロードマップがあるのか気になる
    • Tailscale と関係があるのか気になる。Tailscale はプロキシのようなものなのか、ほかの選択肢はあるのか、Tailscale もオープンソースなのか知りたい
      ほかの返信を見た: https://labs.leaningtech.com/blog/webvm-virtual-machine-with...
  • タイトルは「WebVM はブラウザで動作する WebAssembly VM」くらいに直せばよさそうだ

  • バズワードが格好いい。結局はブラウザで動くLinux コマンドライン環境で、遅い

    • 同意する。今の説明はむしろ余計に混乱する。いまや Web ブラウザが実行する JavaScript コードも「サーバーレス」と見なすのかと思ってしまう
  • “CheerpX enables you to run existing 32-bit x86 native binaries” とある。奇妙なことに、ブラウザの wasm64 対応は何年も停滞していて、残念なことだ

    • WebAssembly、WebGL、WebGPU の機能の大半は、ブラウザに入るまで本当に長くかかり、ほぼ 10 年単位で見たほうがいい
  • ネットワーキングを Tailscale で提供しているのが賢い。潜在的な問題をいくつか回避してくれる

  • https://bellard.org/jslinux/よりずっと遅く感じる

    • ベンチマークゲームの mandelbrot.c のシングルスレッド版をコンパイルして実行してみたところ、jslinux は 12秒webvm は 1.2秒で終わった。同じ gcc フラグでホスト上では 0.03秒だった
  • 格好いいが、キー入力が頻繁に表示されないので実質的には使いにくい。Web IDE のローカル開発環境というユースケースで見ても、十分に速いようには見えない
    node --version は初回実行後は速いが、JavaScript の実行は非常に遅い:
    user@:~$ time node -e "console.log('Hello')"
    Hello
    real 0m7.693s
    user 0m0.012s
    sys 0m0.000s

  • こういうものの実用的なユースケースが何なのか気になる

    • この技術は非常に柔軟だ。ぱっと思いつくだけでも、Linux、プログラミング、セキュリティ教育、任意の言語やバイナリライブラリ向けの実行可能なドキュメント、歴史的ソフトウェアやゲームの保存、レガシーな Windows 企業向けアプリの仮想化、Web IDE 向けの開発環境などがある
      いくつかの例にすぎず、リストはもっと長くなり得る
    • WebVM 自体ではないが、WebContainers を使って作られた例として https://demo.graphweaver.com/ がある
      ブラウザ内で Node.js サーバーとフロントエンドを実行するため、コンピュータにブラウザ以外は何もインストールしたり実行したりせずに、Graphweaver で何ができるかを確認できる。この例では SQLite データベースを REST API と組み合わせ、Graphweaver がその結果として GraphQL API を提供する