Skip to content

WASI — WebAssembly System Interface

Коротко:

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.

Попробовать бесплатно →

Детали

  • Capability-based security: WASM модуль не имеет ambient authority
  • Sandboxed-by-default: по умолчанию нет доступа к fs, network, env
  • WASI Preview 2 (0.2) = Component Model + разбитый API на интерфейсы
  • Preview 1 — legacy (wasi_snapshot_preview1), ещё работает в Wasmtime
  • Typical use: serverless (Fermyon Spin), CDN compute (Fastly), plugins (Shopify Functions)

Пример

// 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"

Связанные термины

Больше по теме

Часто задаваемые вопросы

WASI vs Docker?

Docker = linux kernel + container runtime. WASI = capability-API, isolation без kernel, cold-start ~1ms vs ~100ms Docker.

Production-ready?

Для CLI, plugins, serverless — да (Fastly, Shopify). Full web-server на WASI — пока experimental (нет async sockets в preview2).

Поддержка async?

WASI 0.2 добавляет async (poll_oneoff). Tokio для WASI — в процессе интеграции.