Skip to content
EN

Что такое WASI

Коротко:

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.

Проверить свой сайт →

Подробности

  • WASI Preview 1: basic POSIX-like interface (deprecated — 2019)
  • WASI Preview 2 (2024 stable): component model, world interfaces
  • Sandboxing: capability-based security (explicit file/net access)
  • Start time: 1-5 ms vs container 100ms+ vs JVM 1s+
  • Languages: Rust, C/C++, Go, Python, TinyGo all compile to WASI

Пример

// 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.wasm

Смежные термины

Что такое WASI?

WASI (WebAssembly System Interface) — это стандартный интерфейс, который позволяет WebAssembly (Wasm) модулям взаимодействовать с операционной системой и внешними ресурсами. Он обеспечивает возможность выполнения Wasm кода вне браузера, предоставляя доступ к файловым системам, сетевым соединениям и другим системным ресурсам. WASI направлен на создание безопасной среды выполнения, что позволяет разработчикам писать кроссплатформенные приложения, которые могут работать на различных устройствах и в разных средах.

Технические особенности WASI

WASI определяет набор системных вызовов, которые могут использовать Wasm программы. Эти вызовы включают такие функции, как:

  • Файловый ввод-вывод: WASI предоставляет доступ к файловым системам с помощью вызовов, таких как fd_read и fd_write, позволяя программам читать и записывать данные.
  • Сетевые операции: WASI поддерживает сетевые вызовы, что позволяет модулям осуществлять HTTP-запросы и взаимодействовать с удалёнными сервисами.
  • Безопасность: Каждый вызов WASI происходит в изолированной среде, что минимизирует риски безопасности и предотвращает доступ к критически важным системным ресурсам.

Для реализации WASI необходимо использовать компиляторы, поддерживающие этот стандарт, такие как Wasmer или Wasmtime. Например, для компиляции программы на Rust с использованием WASI, вы можете использовать следующую команду:

wasm-pack build --target web --release -- --features wasi

Пример использования WASI в практическом проекте

Рассмотрим пример создания простого приложения на Rust, которое использует WASI для чтения и записи файлов. Для начала, убедитесь, что у вас установлен wasm-pack и необходимые зависимости.

  1. Создайте новый проект:
cargo new wasi_example --lib
  1. Добавьте зависимости в файл Cargo.toml:
[dependencies]
wasm-bindgen = "0.2"
wasm-bindgen-wasi = "0.2"
  1. Напишите код для работы с файлами:
use std::fs;

#[no_mangle]
pub fn read_file(path: &str) -> String {
    fs::read_to_string(path).unwrap_or_else(|_| "Ошибка при чтении файла".to_string())
}
  1. Скомпилируйте проект с использованием WASI:
wasm-pack build --target web --release

Теперь вы можете использовать скомпилированный модуль в вашем веб-приложении, что позволит вам выполнять операции с файлами через WASI. Это упрощает взаимодействие с файловой системой и делает вашу программу более универсальной.

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

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

WASI vs containers?

WASI: much faster start, smaller (KB vs MB), language-neutral. Containers: больше compatibility с existing software. Для serverless/edge — WASI win.

Когда production-ready?

Preview 2 released 2024 stable. Fastly, Cloudflare Workers используют внутри. Для mainstream — 2026+.

Замена containers?

Не замена, а complement. Containers сохранятся для legacy apps. Новые edge functions, plugins, serverless — WASI.

Запустить инструмент, который описан в этой статье

Бесплатный тариф — 10 мониторов, проверки каждые 5 мин, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.