WASI (WebAssembly System Interface) — standard API для WebAssembly вне браузера. Даёт WASM access to filesystem, network, env vars в sandboxed way. Enables server-side WASM: Fastly Compute@Edge, Fermyon Spin, Docker WASM containers, Envoy WASM filters. Сompetes с containers для lightweight serverless. Runtimes: Wasmtime (Mozilla), WasmEdge, WasmCloud.
Ниже: подробности, пример, смежные термины, FAQ.
Бесплатный онлайн-инструмент — проверка HTTP-заголовков: результат мгновенно, без регистрации.
// Rust → WASI
// Cargo.toml
[dependencies]
wasi = "0.13"
// main.rs
use std::fs;
fn main() {
let content = fs::read_to_string("/data/input.txt").unwrap();
println!("{}", content);
}
// Build: cargo build --target wasm32-wasi
// Run: wasmtime --dir=/host/data main.wasmWASI (WebAssembly System Interface) — это стандартный интерфейс, который позволяет WebAssembly (Wasm) модулям взаимодействовать с операционной системой и внешними ресурсами. Он обеспечивает возможность выполнения Wasm кода вне браузера, предоставляя доступ к файловым системам, сетевым соединениям и другим системным ресурсам. WASI направлен на создание безопасной среды выполнения, что позволяет разработчикам писать кроссплатформенные приложения, которые могут работать на различных устройствах и в разных средах.
WASI определяет набор системных вызовов, которые могут использовать Wasm программы. Эти вызовы включают такие функции, как:
fd_read и fd_write, позволяя программам читать и записывать данные.Для реализации WASI необходимо использовать компиляторы, поддерживающие этот стандарт, такие как Wasmer или Wasmtime. Например, для компиляции программы на Rust с использованием WASI, вы можете использовать следующую команду:
wasm-pack build --target web --release -- --features wasiРассмотрим пример создания простого приложения на Rust, которое использует WASI для чтения и записи файлов. Для начала, убедитесь, что у вас установлен wasm-pack и необходимые зависимости.
cargo new wasi_example --libCargo.toml:[dependencies]
wasm-bindgen = "0.2"
wasm-bindgen-wasi = "0.2"
use std::fs;
#[no_mangle]
pub fn read_file(path: &str) -> String {
fs::read_to_string(path).unwrap_or_else(|_| "Ошибка при чтении файла".to_string())
}
wasm-pack build --target web --releaseТеперь вы можете использовать скомпилированный модуль в вашем веб-приложении, что позволит вам выполнять операции с файлами через WASI. Это упрощает взаимодействие с файловой системой и делает вашу программу более универсальной.
WASI: much faster start, smaller (KB vs MB), language-neutral. Containers: больше compatibility с existing software. Для serverless/edge — WASI win.
Preview 2 released 2024 stable. Fastly, Cloudflare Workers используют внутри. Для mainstream — 2026+.
Не замена, а complement. Containers сохранятся для legacy apps. Новые edge functions, plugins, serverless — WASI.
Бесплатный тариф — 10 мониторов, проверки каждые 5 мин, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.