Running component without WASI
Closed this issue · 2 comments
Context
I have a Rust project that loads and executes wasm components using wasmtime
.
The wasmtime
usage can be seen here.
If I try to instantiate a component generated using componentize-py
, I get an error concerning a type mismatch with a WASI type
import `wasi:clocks/wall-clock` has the wrong type
Questions
- Am I forced to use WASI when I want to run a wasm component generated by
componentiue-py
?- If yes, how would I configure
wasmtime
?
- If yes, how would I configure
Apologies if these questions should be clear from the documentation. I was just not able to figure these out, even after trying for some time.
Links
- wasm component binary widget.wasm.zip
- wasm component project
Am I forced to use WASI when I want to run a wasm component generated by componentiue-py?
You can use WASI-Virt to wrap the component with a virtual WASI implementation, e.g. wasi-virt my-component.wasm -o my-component-virt.wasm
. The result should not import any WASI functions. Note that you won't see any stdout or stderr output from your component if you go this route, since WASI-Virt
will just swallow it.
Alternatively, you can add wasmtime-wasi
to the wasmtime
Linker
. Here's an example: https://github.com/bytecodealliance/wasmtime/blob/9e97d8e158f8a783d32f46f90b9b06f8261ed695/crates/test-programs/tests/reactor.rs#L49-L80
Note that WASI Preview 2 is still under development and changing rapidly, so you need to make sure you use a compatible version of wasmtime
and wasmtime-wasi
. Your best bet right now is to match the version which componentize-py
uses (see the wasmtime
submodule in this repo). I'm planning to update that to Wasmtime 13 once it's released.
I'm closing this to tidy up the issue list. @eliabieri please feel free to reopen if you feel there's more to discuss on this topic.