Mini.WebVM: WebAssemblyを介してブラウザ上で仮想化されたDockerファイルからの、自分のLinuxボックス
(サマリー) WebVMは、ブラウザ上で完全にクライアントサイドで動作するLinuxライクな仮想マシンです。CheerpX: Leaning TechnologiesによるWebAssemblyのx86実行エンジンをベースにしています。本日のアップデートにより、GitHub上のレポをフォークし、含まれるDockerfileを編集するだけで、WebVMの独自バージョンをデプロイできるようになりました。GitHub Actionsワークフローによって、自動的にGitHubページにデプロイされます。 WebVMは完全なDebianベースのLinux環境であり、ブラウザ上でクライアントサイドで動作します。WebAssemblyのJITエンジンを搭載したx86仮想化技術であるCheerpXをベースにしています。 WebVMの最初の発表は約1年前で、コミュニティから多くの注目を集めました。その後に行われたネットワーキングのサポートを導入するアップデートでも同じことが起こりました。言うまでもなく、私たちはこの好意的な反応に大喜びし、やや圧倒されています。 私たちは、コミュニティが制限なくこの技術を使用できるようにすることで、一歩前進したいと考えています。2023年5月に、私たちはMini.WebVMをリリースしました。これは、GitHubのページやその他のホスティングを経由して、数回のクリックで誰でもWebVMの自分自身のバージョンをカスタマイズしてデプロイできるようにする簡素化された統合です。 WebVMとは何か? WebVMは、ブラウザ上で完全にクライアントサイドで動作するLinuxライクな環境である。これは、以下のものを組み合わせることで可能になります: CheerpX:最先端のx86-to-WebAssembly仮想化エンジン。CheerpXは、高度な実行エンジンを介して、ブラウザ上で修正されていないx86バイナリをパフォーマンスよく安全に実行できます。このエンジンは、x86バイナリコードからWebAssemblyモジュールをリアルタイムでJITコンパイルします。ランタイム生成コードと自己修正コードは完全にサポートされています。 Ext2 ディスクイメージ: CheerpXがネイティブにサポートする堅牢なファイルシステムフォーマットです。HTTPバックエンド上で完全なLinuxセットアップへの高性能アクセスを提供します。WebVMの場合、イメージにはDebianが組み込まれ、python、nodejs、gcc、clang、curlなど、多くのパッケージがインストール済みです。ディスクチャンクはオンデマンドでダウンロードされ、帯域幅の使用とブート時間を最小限に抑えます。 インブラウザネットワーキング: Tailscaleの統合により、WebVMを自分のテールネットに接続し、仮想マシンとの双方向ネットワーキングを楽しむことができます。トラフィックはTailscale経由で暗号化され、完全にプライベートです。 Xterm.js: ブラウザ上の本格的なターミナルエミュレータです。単純なコマンドラインツールだけでなく、完全なTUIsも使用できます。 WebVMの初期リリースはコミュニティから大きな関心を集めましたが、何かが足りないことは明らかでした。私たちが受け取った最も一般的なフィードバックは次のようなものでした: 「これはクールだが、自分のプロジェクトに使うにはどうしたらいいのだろう?」 数ヶ月かかりましたが、CheerpXとWebVMを最終的に使えるようにするために、すべての摩擦点を特定し、修正したと考えています。 デプロイの悪夢から… CheerpXもWebVMも、単なる静的ファイルの集まりです。HTTPサーバー以外にバックエンドコンポーネントはありません。 それでも、いくつかの技術的な要件のために、WebVMのカスタマイズされたデプロイメントを許可することは実質的にかなり困難でした。 SharedArrayBufferとクロスオリジン分離: WebAssemblyのユニークな機能の1つは、Web WorkersとSharedArrayBufferを介した本当のマルチスレッド実行機能です。残念ながら、深刻なCPUの脆弱性のため、この機能はCross-Originの分離を保証する特別なHTTPヘッダ(COEP/COOP/CORP)のセットを介してのみ有効です。私たちは経験から、この(過剰で)複雑な設定を正しく行うのは難しく、失敗するとデバッグが厄介であることを知っています。さらに、ホスティングシナリオではよくあることですが、ユーザがサーバの設定をコントロールしない場合、これらのヘッダを設定することは事実上不可能になります。 Ext2 イメージの作成: ファイルシステムを初期化するために `dd`…