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.
Бесплатный онлайн-инструмент — проверка HTTP-заголовков: результат мгновенно, без регистрации.
// 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 (WebAssembly System Interface) — это стандарт, позволяющий WebAssembly (Wasm) выполнять системные вызовы, необходимые для взаимодействия с операционной системой. WASI предоставляет разработчикам API для работы с файловой системой, сетью и другими системными ресурсами, обеспечивая при этом безопасность и изоляцию выполнения кода. Это делает Wasm более универсальным для создания веб-приложений и серверных решений.
Для использования WASI в вашем проекте, необходимо интегрировать Wasm-библиотеку с поддержкой WASI. Рассмотрим пример использования WASI с помощью инструмента wasmtime. Сначала установите wasmtime:
curl https://wasmtime.dev/install.sh -sSf | bashПосле установки создайте файл hello.wat с простым кодом:
(module
(import "wasi_unstable" "args_get" (func $args_get (param i32 i32) (result i32)))
(import "wasi_unstable" "args_sizes_get" (func $args_sizes_get (param i32 i32) (result i32)))
(func (export "main")
(call $args_sizes_get (i32.const 0) (i32.const 0))
)
)Скомпилируйте его в Wasm:
wasm2wat hello.wat -o hello.wasmЗапустите его с помощью wasmtime:
wasmtime hello.wasmЭтот пример демонстрирует, как можно использовать WASI для получения аргументов командной строки. WASI предоставляет функции для работы с аргументами, что значительно упрощает разработку приложений.
Внедрение WASI в ваши проекты имеет множество преимуществ:
В итоге, использование WASI дает возможность разработчикам создавать более мощные и безопасные приложения, которые могут работать в различных окружениях. Это особенно актуально в условиях растущего интереса к серверным функциям и облачным вычислениям.
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 — в процессе интеграции.
Бесплатный тариф — 10 мониторов, проверки каждые 5 мин, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.