WebAssemblyでBashやCurlが動く、業界標準APIを拡張した「WASIX」を発表 Wasmer:WASIを拡張、POSIXに対応
Wasmerは、業界標準のAPI仕様である「WASI」を拡張してPOSIXに対応した新技術「WASIX」を発表した。WASIXを利用すれば、コードを修正することなく、既存アプリケーションをWebAssemblyで実行できる。
WebAssembly(Wasm)ランタイムを開発するWasmerは2023年5月30日(米国時間)、「WASI」(WebAssembly System Interface)を拡張してPOSIX(Portable Operating System Interface)に対応した「WASIX」を発表した。
WASIXは、WebAssemblyでネットワークやファイル、メモリなどのシステムリソースを抽象化するAPI仕様であるWASIを拡張したものだ。Wasmerは発表の中で、以下のように述べている。
「2019年に発表されたWASIは、Wasmコミュニティーにとって大きな後押しとなったが、改善のペースの遅さが普及を妨げてきた。WASIXはWASIの提案を拡張し、POSIXとの完全な互換性を持つことで、有用で生産的なアプリケーションを構築できる」
WASIXとは一体何なのか
WASIXは、既存のWASI ABIの長期的な安定化とサポートに加え、実用的で有用なアプリケーションを今すぐコンパイルして使用できるように、WASIに足りないギャップを十分に補うためのシステムコール拡張を追加するものだ。
スレッドやバークレーソケット、フォークなど、POSIXのほとんどで利用可能だった機能をサポートすることで、どのようなアプリでも簡単にWasmにコンパイルして、どこでも実行可能になる。
最小限の修正でWasm/WASIXにコンパイルできるようになったプログラムは、CurlやcPython、Bash、tokio、axumなどだ。
WASIXで拡張される機能とは
WASIXでは、以下の機能を拡張しているという。
- 効率的なマルチスレッドの完全サポート
- ソケットの完全サポート
- IPv4、IPv6
- UDP、TCP
- マルチキャスト、エニーキャスト
- RAWソケット
- カレントディレクトリの変更
- asyncify wizardyを介したsetjmp/longjmpサポート
- pthreadsのサポート
- プロセスのフォーク
- サブプロセスの生成と待機
- TTYサポート
- ソケットとファイルの非同期ポーリング
- パイプとイベントのサポート
- DNS解決支援
WASIXを使い始めるには
WASIXプログラムは、ブラウザとサーバのどちらでも公式サイトから試すことができる。
Wasmerの作成したwasmer-webでは、あらゆるWASIXプログラムが、ブラウザ上で実行するWasmerでも動作することを示している。Wasmerは、以下のように述べている。
「実装上の問題点も幾つかあるが、WasmerはWASIXを他のビルドターゲットと同じように信頼性が高く、使いやすいものにするために日々取り組んでいる。そして、CアプリケーションをWASIXに簡単にコンパイルできるようにするために、C用のツールチェインを開発中だ」
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- C/C++でWebAssembly――「Emscripten」を体験する
第4回は、WebAssembly開発で人気のあるC/C++とEmscriptenによる開発事例を紹介します。標準的なC/C++の関数の出力をWebページに反映させる事例の他に、C/C++の関数をJavaScriptから呼び出す事例も紹介します。 - GoでWebAssembly――Go標準のWebAssemblyサポートを体験する
第6回は、Go言語における開発事例を紹介します。GoからのJavaScript関数呼び出し、JavaScriptからのGo関数の呼び出しについても紹介します。 - Kotlinチーム、プログラミング言語「Kotlin 1.8.20」を公開 WebAssemblyバイナリを生成する「Kotlin/Wasm」のα版が利用可能に
Kotlinチームは、プログラミング言語「Kotlin」の最新版となるバージョン1.8.20を公開した。