WebAssemblyをPOSIX対応に拡張した「WASIX」登場、bashやcurl、WebサーバなどLinuxアプリが実装可能に。Wasmerが発表
WebAssemblyランタイム「Wamer」の開発元であるWasmer社は、WebAssemblyでファイルやネットワーク、メモリなどのシステムリソースを抽象化する業界標準のAPI仕様である「WASI」(WebAssembly System Interface)を拡張してPOSIX対応にする新技術「WASIX」を発表しました。
WASIとPOSIX
WebAssemblyはもともと、Webブラウザ上でネイティブコード並の実行速度でアプリケーションを実行することを目的に策定されたバイナリフォーマットです。
そのWebAssemblyを、LinuxやWindows、macOSなどのOS上でWebAssemblyランタイムを用いて直接実行する際に、OSのシステムコールを抽象化することでOS依存をなくす目的で作られたのが「WASI」でした。
そのためWASIはファイルシステムやネットワークなど、OSで提供されるAPIのうち基本的なものが用意されています。
一方、POSIXとは「Portable Operating System Interface」の略で、主にUNIX系のOS間の互換性を実現するための標準規格です。Linuxを始めとする多くのUNIX系OSは、おおむねPOSIX対応を意識して作られています。
WebAssemblyでbashやcurlが動く
今回Wasmer社が発表したWASIXは、WASIを拡張してPOSIX対応にすることで、POSIXで定義されているスレッドやソケット、フォークなどの多くの機能をWebAssemblyアプリケーションから利用可能にするものです。
これによってWebAssemblyでLinuxアプリケーションの実装が容易になります。下記は「Announcing WASIX」の記事で紹介されている、WebAssemblyで実装されたcurlが実行されたところ。
ほかにもbash、CPython、static-web-serverなど多くのソフトウェアがWASIXで実装されていると説明されています。
「Announcing WASIX」から、WASIXの説明を引用します。
WASIX is the long term stabilization and support of the existing WASI ABI plus additional non-invasive syscall extensions that complete the missing gaps sufficiently enough to enable real, practical and useful applications to be compiled and used now.
WASIXは、長期的に安定しサポートされている既存のWASI ABIを変えることなくシステムコールの拡張を追加することで、いま実際に有用なアプリケーションをコンパイルし利用可能にする上で必要なギャップを埋めるものです。
現在WASIXはRust、C、AssemblyScriptで開発するためのツールチェーンが用意され、ドキュメントとして「API Reference」が公開されています。ランタイムは当然ながらWasmerが対応しています。
ただしWASIXはあくまでWasmerが提唱した技術であり、WASIを策定したByteCodeAllianceを始めとする業界の支持が得られているわけではありません。
一方でWASIの策定をしているByteCodeAllianceは、次バージョンのWASIでコンポーネントモデルを採用する方向での進化を検討中です。
参考:WebAssemblyの「WASI Preview 2」で、WebAssemblyコンポーネントの組み合わせによるアプリケーション開発を実現へ
そのためWASIXは興味深い技術ではありますが、今後の普及と標準化にはまだ課題が残っているといえそうです。
あわせて読みたい
KotlinでiOSのUI開発がマルチプラットフォーム対応に。「Compose Multiplatform for iOS」アルファ版が登場
≪前の記事
「PostgreSQL 16 Beta 1」がリリース。フルジョインの並列性改善による性能向上など