WASI (WebAssembly System Interface) — стандарт системных вызовов для WASM-модулей вне браузера (server, CLI, edge). Позволяет WASM читать файлы, открывать сокеты, работать с clock — но только через capability-based access (caller передаёт handle, модуль не может gethostname-аллочить). WASI 0.2 (2024) построено на Component Model. Runtimes: Wasmtime, WasmEdge, Spin.
Ниже: подробности, пример, смежные термины, FAQ.
// Rust → WASI binary
$ cargo build --target wasm32-wasi --release
$ wasmtime --dir=. target/wasm32-wasi/release/app.wasm
// Fermyon Spin app.toml
[[component.trigger]]
route = "/"
[component.source]
path = "target/wasm32-wasi/release/hello.wasm"Docker = linux kernel + container runtime. WASI = capability-API, isolation без kernel, cold-start ~1ms vs ~100ms Docker.
Для CLI, plugins, serverless — да (Fastly, Shopify). Full web-server на WASI — пока experimental (нет async sockets в preview2).
WASI 0.2 добавляет async (poll_oneoff). Tokio для WASI — в процессе интеграции.