iawia002 opened PR #7728 from iawia002:wasi-http-linker
to bytecodealliance:main
:
When I attempt to run the hello-wasi-http example using wasmtime 16, I encounter the following error(which did not occur in previous versions):
$ wasmtime serve hello_wasi_http.wasm Error: import `wasi:cli/environment@0.2.0-rc-2023-12-05` has the wrong type Caused by: 0: instance export `get-environment` has the wrong type 1: expected func found nothing
I realize that this may be related to PR #7597, where we might have trimmed too much "world" to the point where a simple HTTP hello world example cannot run. So, this patch adds some content, and now the example can run successfully:
$ ./target/debug/wasmtime serve hello_wasi_http.wasm Serving HTTP on http://0.0.0.0:8080/
Related: #7716
iawia002 requested wasmtime-core-reviewers for a review on PR #7728.
iawia002 requested fitzgen for a review on PR #7728.
alexcrichton commented on PR #7728:
Thanks for the PR, but these interfaces are all explicitly missing from the standard
proxy
world. Thewasmtime serve
subcommand has an-Scommon
flag to enable the interfaces in an opt-in basis. Otherwise though this was an intentional behavior change from https://github.com/bytecodealliance/wasmtime/pull/7597
iawia002 commented on PR #7728:
OK, but I'm getting a little confused, I know
-Scommon
flag will make it work because it adds all the linkers, in other words, can I saywasmtime serve
won't work without the-Scommon
flag? Since I'm just running the basic hello world example.but these interfaces are all explicitly missing from the standard proxy world.
So do we count this as an issue? I'm not familiar with this, I can't figure out why the proxy world needs those.
pchickey commented on PR #7728:
The issue is that the https://github.com/sunfishcode/hello-wasi-http instructions aren't up to date with wasmtime 16, which requires passing in the
-Scommon
flag. Please file an issue or PR over there to add that command line flag.
iawia002 commented on PR #7728:
The issue is that the https://github.com/sunfishcode/hello-wasi-http instructions aren't up to date with wasmtime 16, which requires passing in the
-Scommon
flag. Please file an issue or PR over there to add that command line flag.Actually, I made some updates based on hello-wasi-http to adapt to wasmtime 16. I updated cargo-component version to
0.6.0
and updatedwasi:http/proxy
to0.2.0-rc-2023-12-05
, if you use the original hello-wasi-http directly, even if the-Scommon
flag is added, it still cannot run (because the wit definition does not match):wasmtime serve -Scommon hello_wasi_http.wasm Error: import `wasi:cli/stdout@0.2.0-rc-2023-10-18` has the wrong type Caused by: 0: instance export `get-stdout` has the wrong type 1: expected func found nothing
iawia002 edited a comment on PR #7728:
The issue is that the https://github.com/sunfishcode/hello-wasi-http instructions aren't up to date with wasmtime 16, which requires passing in the
-Scommon
flag. Please file an issue or PR over there to add that command line flag.Actually, I made some updates based on hello-wasi-http to adapt wasmtime 16. I updated cargo-component version to
0.6.0
and updatedwasi:http/proxy
to0.2.0-rc-2023-12-05
, if you use the original hello-wasi-http directly, even if the-Scommon
flag is added, it still cannot run (because the wit definition does not match):$ wasmtime serve -Scommon hello_wasi_http.wasm Error: import `wasi:cli/stdout@0.2.0-rc-2023-10-18` has the wrong type Caused by: 0: instance export `get-stdout` has the wrong type 1: expected func found nothing
iawia002 commented on PR #7728:
My code: https://github.com/iawia002/hello-wasi-http/tree/adapt-wasmtime-16
The diff (basically only version and dependency updates): https://github.com/iawia002/hello-wasi-http/commit/8fa967735f40988badf3a473459cb3e4c9cb8595
Compiled wasm file: hello_wasi_http.wasm.zip
alexcrichton commented on PR #7728:
It looks like you may be running into versioning issues, so I'd recommend double-checking that the adapter in use and the Wasmtime in use are from the same version. I'll also point out that there's an adapter specific to a proxy which avoids the need for
-Scommon
iawia002 commented on PR #7728:
I'm using wasmtime 16 and cargo-component 0.6.0 which adapts wasmtime 16 and
wasi:http/proxy@0.2.0-rc-2023-12-05
which exactly the same with wit definition in wasmtime 16.$ wasmtime -V wasmtime-cli 16.0.0 (6613acd1e 2023-12-20)
So I think I've taken care of versioning issues.
alexcrichton commented on PR #7728:
Are you still getting an error about
wasi:cli/stdout@0.2.0-rc-2023-10-18
? If so that means there's a versioning problem somewhere because 2023-10-18 is a more historical version than Wasmtime 16.
iawia002 commented on PR #7728:
Oops, @alexcrichton I think you misunderstood, @pchickey says I'm encountering this issue due to the https://github.com/sunfishcode/hello-wasi-http not adapting with wasmtime 16, I'm trying to explain to you that I'm not using the original hello-wasi-http example and I did some update to make it adapt with wasmtime 16, but even I make those updates, I'm still encountering the issue in the PR description.
Using https://github.com/sunfishcode/hello-wasi-http, with or without
-Scommon
flag, we'll encounter this error:$ wasmtime serve -Scommon hello_wasi_http.wasm Error: import `wasi:cli/stdout@0.2.0-rc-2023-10-18` has the wrong type Caused by: 0: instance export `get-stdout` has the wrong type 1: expected func found nothing
Using https://github.com/iawia002/hello-wasi-http/tree/adapt-wasmtime-16 which adapts wasmtime 16, with
-Scommon
flag, it works, but without it, we'll encounter this error in the PR description:$ wasmtime serve hello_wasi_http.wasm Error: import `wasi:cli/environment@0.2.0-rc-2023-12-05` has the wrong type Caused by: 0: instance export `get-environment` has the wrong type 1: expected func found nothing
Though it will work with
-Scommon
flag, I still want to ask the same question from my previous comments:I know
-Scommon
flag will make it work because it adds all the linkers, in other words, can I saywasmtime serve
won't work without the-Scommon
flag? Since I'm just running the basic hello world example.
alexcrichton commented on PR #7728:
This all boils down to the adapter you're using. If you use the
*.reactor.wasm
adapter then yes that won't work forwasmtime serve
because it's not intended to work withwasmtime serve
. If you use*.proxy.wasm
then it will work withwasmtime serve
because it's intended to work with the subcommand.What you're basically running into here is difficulties and road bumps in how a component is built. This doesn't have all that much to do with the runtime per se. This is definitely something we need more documentation and guidance on, and we're doing our best on that.
iawia002 closed without merge PR #7728.
Last updated: Dec 23 2024 at 12:05 UTC