WASI 0.3.0 リリースノート

WASI 0.3.0 は、WebAssembly System Interface を Component Model ベースのアーキテクチャに移行し、アクターやストリームなどの非同期機能を導入します。このリリースは、シンプルな Unix ライクな API から、サーバーサイド Wasm ランタイム向けに設計されたより構造化され、相互運用可能なコンポーネントシステムへのシフトを表しています。

Component Model への移行

WASI 0.3.0 は WebAssembly Component Model を基盤とし、レガシーなモノリシック API アプローチから離れています。このアーキテクチャの変更は、.wit (WebAssembly Interface Type) ファイルを使ってインターフェースを定義することにより、異なるエコシステム間の相互運用性を向上させることを目的としています。これらのファイルは、WASI GitHub 提案ディレクトリ で直接参照できます。

Component Model はモジュール性を促進することを意図していますが、その複雑さについて開発者間で議論が巻き起こっています。一部の批評家は、レーンな Unix ライクな API から「意見の強いコンポーネントモデル」への移行が、不要な過剰な複雑さをもたらし、WebAssembly を高速かつシンプルに保つという主な目的を妨げる可能性があると主張しています。

新しい非同期機能

WASI 0.3.0 の主要な技術的進歩は、async/await スタイルの機能の導入です。これには以下が含まれます:

  • アクター:構造化された並行性と通信を可能にします。
  • ストリーム:データフローを非同期に扱う標準的な方法を提供します。

これらの機能は、Wasm エコシステムに最新の非同期プログラミングパターンをもたらすように設計されていますが、スタックフル async がスタックスイッチング提案に依存するかどうかなどの実装詳細は、ランタイム実装者間で技術的な検討の対象となっています。

エコシステムの互換性とランタイムサポート

WASI 0.3.0 は現在、サーバーサイドランタイムを対象とし、ブラウザではネイティブにサポートされていません。また、元の WASI 提案およびレガシーバージョンをサポートしていたランタイムとの間で互換性の断絶を維持しています。

今日、変更せずに C/C++ プログラムとライブラリを WebAssembly にコンパイルする必要がある開発者には、WASI 0.3.0 のツールングギャップのため、WASIX などの代替手段がより実用的なオプションとしてしばしば挙げられます。さらに、言語サポートはまだ進化中であり、たとえば Rust 開発者は、新しいリリースを十分に活用するための専用の WASI 0.3 ターゲットを待っています。

コミュニティの視点と批判

リリースに対するコミュニティからのフィードバックは、透明性とコンポーネントモデルの有用性に焦点を当てて極端に分かれています:

"wasi コンポーネントの約束は果たされていません。市場はアーティファクトをホットロードし、動的にリンクしたいと考えています。wasi プロジェクトは、そのように使用するために内部の魔法を必要とします:提供物は、出荷前にコンポーネントを静的にリンクしています。"

他の開発者は、0.3.0 リリースに向けた開発プロセスへの公の可視性の欠如に不満を表明しており、発表のかなり前まで進展が公に明確に見えなかったと示唆しています。

主な変更のサマリー

Feature WASI 0.2 / Legacy WASI 0.3.0
Architecture モノリシック / Unix-like Component Model ベース
Async Support 限定的 / 同期的 Async/Await, アクター, ストリーム
Interface Definition C スタイルのヘッダー/API .wit ファイル
Primary Target 一般的な Wasm サーバーサイド ランタイム

Sources