Linuxがブラウザに登場: カーネルはWebAssemblyで実行される

Linuxがブラウザに登場: カーネルはWebAssemblyで実行される

初めて、 Linuxカーネルはウェブブラウザ内で直接実行できるエミュレータや仮想マシンなしで。これは これは一連のパッチのおかげで可能になった を実装する Wasmアーキテクチャ (WebAssembly)をカーネル内で実行することで、ウェブ環境で実行可能な中間コードにコンパイルすることができる。 これは実験的な概念実証です。は、オペレーティング システムと Web テクノロジの融合における転換点となります。

2年以上開発が進められているこのプロジェクトでは、Webブラウザ内でLinuxを起動し、BusyBoxとmuslをベースにした環境(WebAssemblyにコンパイル済み)を使用して標準プログラムを実行できます。Xterm.jsはユーザーインタラクション用のターミナルエミュレーターとして使用され、ブラウザ内で機能的なコンソールを提供します。

さらに、Chromium ブラウザと部分的に Firefox と互換性のある公開デモがあり、最新のコンピューターで 1 秒未満で Wasm カーネルを読み込むことができます。

Wasm では Linux はどのように動作しますか?

従来のアーキテクチャとは異なり、 WebAssemblyではスレッドの一時停止やコードの変更は許可されない 実行時に、 これはカーネル タスク スケジューラにとって課題となります。これらの制限を克服するために、開発者は独創的な解決策を採用しました。 各タスクまたはスレッドは、Web Workersによって管理される個別の仮想CPU上で実行されます。 ブラウザの。このように、マルチタスクはホストオペレーティングシステムとして機能するブラウザエンジン自体を通じて実装されます。

結果は Linuxカーネルが隔離されたWeb環境内で実行されるモデル真のマルチタスクとメッセージチャネル(postMessage()とSharedArrayBuffer)を介したプロセス間通信を備えています。ただし、 中断と信号はまだ完全に機能していない。 また、vfork() や longjmp() などの一部の重要な関数はサポートされていないままです。

中でも 現在の制限にはMMUの欠如が含まれる。 (メモリ管理ユニット)、 ロードされたコードを変更できず、散発的にクラッシュする 数分使用した後、コンソールに「BusyBox」というエラーメッセージが表示されます。しかしながら、テストではシステムが基本的なBusyBoxコマンドを実行し、バックグラウンドでプロセスをアクティブに維持できることが示されており、このアプローチの可能性を裏付けています。

デモを超えて:Wasmの新たな地平

このプロジェクトの範囲は、単にブラウザで Linux を実行するだけにとどまりません。 Linux用のWasmアーキテクチャは、クロスプラットフォームのWebAssemblyアプリケーションを作成するための基盤として機能する可能性がある。 カーネル全体に依存せず、Linuxシステムコールを統合。これにより、WASI(WebAssembly System Interface)を用いた独立したアプリケーションの実行や、極めて移植性の高いサンドボックスシステムの開発が可能になります。

開発者 また、EGL と OpenGL ES を実装して、グラフィカル環境へのサポートを拡張する予定です。 WebGLに関しては、ブラウザ内でビジュアルインターフェースを実行できるようになります。さらに、DWARFデバッグ形式のサポートも計画されており、ブラウザのツールから直接Cコードを行単位でデバッグできるようになります。

技術的な課題と次のステップ

El プロジェクトは依然として安定性の問題に直面しているランダムなクラッシュやメモリ破損エラーなど。これらの欠点は詳細に文書化されており、元々Webアプリケーション用に設計された環境に完全なオペレーティングシステムを適応させる際の固有の困難を反映しています。それでもなお、 開発責任者は、将来の拡張が スレッドの一時停止、スタックの切り替え、機能的な MMU などの WebAssembly 標準の機能により、現在の制限を克服できます。

パフォーマンスの点では、現在のバージョンでは速度よりもデバッグが優先されます。 しかし、起動前のWasmシステムを休止状態にするなどの将来の最適化により、カーネルを瞬時にロードできるようになることが期待されています。Atomics.waitAsync()の使用とワーカー間の直接通信によって、JavaScriptとWebAssemblyコード間のオーバーヘッドも削減される見込みです。

体験への招待

レポジトリ wasm-linuxはスクリプトとビルド環境を提供します これにより、誰でもローカル環境またはDockerを使用してこの適応を試すことができます。わずか数ステップで、LLVM、カーネル、BusyBox、muslをコンパイルし、ブラウザ上で完全に機能するLinux環境を構築できます。

まだ安定性や安全性には程遠いものの、この実験はウェブ上のオペレーティングシステムの将来について議論を呼び起こす。Wasmは、あらゆるデバイスや隔離された環境でLinuxを実行できるユニバーサルプラットフォームになるのだろうか?今後数年で明らかになるだろう。

デモウェブサイト: https://joelseverin.github.io