Linuxカーネル内にWebAssemblyランタイムを実装し、ネイティブバイナリよりも高速に実行可能にする「Kernel-WASM」登場
今回は「Linuxカーネル内にWebAssemblyランタイムを実装し、ネイティブバイナリよりも高速に実行可能にする「Kernel-WASM」登場」についてご紹介します。
関連ワード (性能面、想像、機能等) についても参考にしながら、ぜひ本記事について議論していってくださいね。
本記事は、Publickey様で掲載されている内容を参考にしておりますので、より詳しく内容を知りたい方は、ページ下の元記事リンクより参照ください。
代表的なWebAssemblyランタイムの1つであるWasmerを開発しているWasmer社は、Linuxカーネル内にWebAssemblyランタイムを実装することで、安全かつ通常のLinuxバイナリよりも高速にWebAssemblyバイナリを実行可能にするオープンソースソフトウェア「Kernel-WASM」を公開しました。
Linuxカーネル内のWASMランタイムは第二のOS
同社はLinuxカーネル内にWebAssemblyランタイムを実装する理由として、性能と柔軟性が得られるとしています。
性能面では、WebAssemblyランタイムとはそもそも保護された仮想マシン内で命令セットを実行するものであるため、仮想マシンであるWebAssemblyランタイムをOS上のユーザー空間内で実装するよりも、カーネル内でランタイムを実装する方が、システムコール時のコンテキストスイッチやメモリ内容のコピーといったオーバーヘッドをなくせるとしています。
また、カーネル内での実装によって低レイヤでの制御ができることで、仮想メモリのような操作やパケットフィルタリングのようなカーネルでのイベント処理など、ユーザー空間で実行されるソフトウェアでは困難かもしくは処理が重くなってしまうような機能も高速に実行可能なソフトウェアが実現できるとしています。
これはある意味でLinuxの中に、WebAssemblyバイナリを実行対象とし、(Linuxのシステムコールを抽象化する)WASIをシステムコールとする第二のOSを埋め込むように見えます。
Wasmer社がKernel-WASMの前身として実装したCervusに関するブログ「Running WebAssembly on the Kernel」でも、Linuxカーネル内に実装されたWebAssemblyランタイムは「The Second OS」だと位置づけています。
LinuxにWebAssembyランタイムが組み込まれて、簡単にLinux上でWebAssemblyアプリケーションを実行できるようになれば、なかなか面白そうです。そしてそれがWindowsやmacOSなどほかのOSにも広がると想像すると、さらに面白いことになるのではないでしょうか。
WASIの実行は進行中、セキュリティもさらに強化
ただしKernel-WASMはまだ開発中で、WASIの実装は進行中。Linuxカーネルイベントのepollのサポートによる非同期ネットワーキングに対応、ソフトウェア障害を分離する完全なサンドボックスによる実行環境などは実装されており、ネイティブバイナリを上回る高速化、WebAssembly内でのeBPFの実装などはこれから実現とのことです。
またLinuxカーネル内でコードを実行することは非常に危険であるため、現時点でスタックオーバーフローのチェックやメモリ協会のチェックなどのセキュリティ確保のための仕組みはあるものの、今後さらにセキュリティ面の強化もしていくとしています。