【わし】

WASI とは?

💡 WebAssemblyを「ブラウザの外」でも動かす標準規格
📌 このページのポイント
WASI — Wasmからシステムへの安全な橋渡し Wasmモジュール アプリケーション (OS非依存) Rust / C / Go 呼び出し WASI API fd_read sock_connect clock_get サンドボックス境界 ファイルシステム 許可されたパスのみ ネットワーク 制限付きソケット 時計 時刻の取得 WASIが「門番」となり、許可された操作だけをシステムに通す
WASIのイメージ — サンドボックス越しにシステムリソースへアクセス
ひよこ ひよこ

なんでWASIが必要なの?

ペンギン先生 ペンギン先生

WebAssemblyはもともとブラウザ向けに設計されたから、ファイルの読み書きやネットワーク通信ができない。サーバーサイドやCLIツールとして使うには、OSの機能(システムコール)にアクセスする方法が必要。WASIがその標準的な橋渡しを提供するんだよ

ひよこ ひよこ

Dockerとの関係は?

ペンギン先生 ペンギン先生

Docker共同創設者のSolomon Hykesが「2008年にWASM+WASIがあればDockerを作る必要はなかった」とツイートして話題になった。WASMバイナリはOS・CPU非依存で、WASIサンドボックスセキュリティを担保できる。コンテナより起動が速く(ミリ秒単位)サイズも小さい。将来的にはコンテナの代替になる可能性があるよ

ひよこ ひよこ

今どこまで使えるの?

ペンギン先生 ペンギン先生

WASI Preview 1はファイルI/O、環境変数、乱数、時計などの基本機能を提供。Wasmtime、Wasmer、WasmEdgeなどのランタイムで動作する。WASI Preview 2ではComponent Modelが導入され、異なる言語で書かれたWASMモジュールを組み合わせられるようになった。Cloudflare WorkersやFastly Compute等のエッジランタイムでも採用が進んでいるよ

ひよこ ひよこ

開発者はどう活用する?

ペンギン先生 ペンギン先生

①CLIツールをRust/Goで書いてWASMにコンパイルし、どのOSでも動くバイナリを配布、②サーバーレスファンクション(Spin、Fermyon Cloud)でコールドスタートを高速化、③プラグインシステムの実装(WASMプラグインサンドボックスで安全に実行)。ExtismというWASMプラグインフレームワークが便利だよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「WASI」って出てきたら「WebAssemblyブラウザ外で動かすためのシステムインターフェース」と思えればだいたいOK!
📖 おまけ:英語の意味
「WebAssembly System Interface」 = WebAssemblyシステムインターフェース
💬 WebAssemblyにSystem Interface(システムとの接点)を提供する規格だよ
← 用語集にもどる