TL;DR

WASM の処理系の 1 つ。WebAssembly Component をコンパイルし、サンドボックスの中で実行する。

仕組み

Rust などのコードからも、CLI からも実行できる。CLI は Cargo でインストールできる。

$ cargo install wasmtime-cli

例

サンドボックスの中で動くので、Component からはシェルと異なるファイルシステムが見える。シェルからは見えるファイルも、Wasmtime 上の Component からは存在しないものとして扱われる。アクセスさせたいディレクトリは、実行時に --dir で明示する。

$ wasmtime --dir . target/wasm32-wasip1/debug/grep-wasi.wasm file src/main.rs

環境変数も切り離されている。次のコードは、cargo run で実行すると設定されている環境変数の一覧を表示するが、Wasmtime 上で実行すると何も表示しない。

use std::env;
 
fn main() {
    for (key, value) in env::vars() {
        println!("{key}: {value}");
    }
}

注意点

ファイルシステムと環境変数のほか、ソケットの状態や、Component が使うメモリ空間も、Wasmtime が動く環境から切り離されている。

関連

出典