Linuxカーネル内にWebAssemblyランタイムを実装し、ネイティブバイナリよりも高速に実行可能にする「Kernel-WASM」登場
代表的なWebAssemblyランタイムの1つであるWasmerを開発しているWasmer社は、Linuxカーネル内にWebAssemblyランタイムを実装することで、安全かつ通常のLinuxバイナリよりも高速にWebAssemblyバイナリを実行可能にするオープンソースソフトウェア「Kernel-WASM」を公開しています。
(2023/2/13追記 このKernel-WASMの開発は2020年で止まっておりましたことを見落としていました。最近になって海外で話題になっており、新しい話題だと勘違いしたことが原因です。古い情報であることを基にした記事となっておりますことをお詫びいたします)
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カーネル内でコードを実行することは非常に危険であるため、現時点でスタックオーバーフローのチェックやメモリ境界のチェックなどのセキュリティ確保のための仕組みはあるものの、今後さらにセキュリティ面の強化もしていくとしています。
あわせて読みたい
GitHubがSubversionのサポート終了を発表、2024年1月8日まで。その後は全面的にGitに注力予定
≪前の記事
WebAssemblyとJavaScriptの非同期処理を橋渡しするAPI「JSPI」、Google V8が実験的に実装