Updates for Hyperlight 0.13 release#389
Updates for Hyperlight 0.13 release#389jsturtevant wants to merge 5 commits intohyperlight-dev:mainfrom
Conversation
There was a problem hiding this comment.
Pull request overview
This PR removes the guest’s dependency on a dedicated “host function definition region” by having the host serialize host function definitions and pass them directly into the guest’s InitWasmRuntime call, aligning with upstream HL-core changes (issue #388).
Changes:
- Update the guest wasm runtime to parse
HostFunctionDetailsfromInitWasmRuntimeparameters (VecBytes) instead of reading from a shared region / callback. - Update the host sandbox initialization to track + serialize registered host function definitions and pass them into
InitWasmRuntime. - Remove
SandboxBuilder::with_function_definition_sizeand document the breaking change; add[workspace]stanzas to excluded crates to avoid workspace resolution issues.
Reviewed changes
Copilot reviewed 12 out of 13 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| src/wasm_runtime/src/module.rs | InitWasmRuntime now expects a VecBytes parameter containing serialized host function details and registers host funcs from it. |
| src/wasm_runtime/src/hostfuncs.rs | Removes the old get_host_function_details() path. |
| src/wasm_runtime/src/component.rs | Updates InitWasmRuntime signature in the component runtime interface (now takes VecBytes). |
| src/hyperlight_wasm/src/sandbox/proto_wasm_sandbox.rs | Tracks host function definitions as they’re registered; serializes and passes them to InitWasmRuntime. |
| src/hyperlight_wasm/src/sandbox/sandbox_builder.rs | Removes the builder API for host function definition region sizing. |
| src/hyperlight_wasm/src/sandbox/loaded_wasm_sandbox.rs | Adds a regression test ensuring missing host functions fail module load. |
| src/hyperlight_wasm/Cargo.toml | Adds hyperlight-common dependency used for flatbuffer wrapper types. |
| Cargo.toml | Adds hyperlight-common to workspace dependencies. |
| Cargo.lock | Locks hyperlight-common dependency. |
| src/rust_wasm_samples/Cargo.toml | Adds [workspace] to make the crate a standalone workspace root when built directly. |
| src/hyperlight_wasm_macro/Cargo.toml | Adds [workspace] to make the crate a standalone workspace root when built directly. |
| src/component_sample/Cargo.toml | Adds [workspace] to make the crate a standalone workspace root when built directly. |
| CHANGELOG.md | Documents the breaking removal of SandboxBuilder::with_function_definition_size. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
dblnz
left a comment
There was a problem hiding this comment.
LGTM!
I left some small comments that are not necessary to be addressed in this PR.
syntactically
left a comment
There was a problem hiding this comment.
Mostly LGTM, except for the comment about HostPrint.
| Ok(Self { inner: Some(inner) }) | ||
|
|
||
| // HostPrint is always registered by UninitializedSandbox, so include it by default | ||
| let host_function_definitions = vec![HostFunctionDefinition { |
There was a problem hiding this comment.
I'm not convinced this should be here. HostPrint is sort of an internal implementation detail? I don't think that wasm modules should be able to just import it automatically with no way to remove that.
There was a problem hiding this comment.
I wasn't sure of an alternative. We have to have it or the linker won't work. I believe this was already happening before now its just explicit. Do you have any suggestions?
There was a problem hiding this comment.
We have to have it or the linker won't work.
I'm not sure I follow? I don't think we have any wasm module code that calls HostPrint directly?
I know we use HostPrint in the wasip1 stub for fd_write, but that's just doing an explicit call_host_function call--it doesn't need to look it up in the hostfunctiondefinitions, as far as I can tell?
There was a problem hiding this comment.
The components currently expect this to be there:
hyperlight-wasm/src/wasmsamples/RunWasm.c
Line 25 in 9cbfe7a
I've pushed a change to move it to the runtime initialization. The other option would be to make the Host print a function modules register explicitly?
|
Have you tried compiling this with the latest |
Instead of using a shared memory region or a host function callback to provide host function definitions to the guest, the host now pushes the serialized definitions directly as a parameter to InitWasmRuntime. Signed-off-by: James Sturtevant <jsturtevant@gmail.com>
rust_wasm_samples, hyperlight_wasm_macro, and component_sample were missing empty [workspace] tables in their Cargo.toml files. Without this, Cargo resolves to the main checkout's workspace root when run from a git worktree, causing 'believes it's in a workspace' errors. wasm_runtime already had this marker. Signed-off-by: James Sturtevant <jsturtevant@gmail.com>
Signed-off-by: James Sturtevant <jsturtevant@gmail.com>
Signed-off-by: James Sturtevant <jsturtevant@gmail.com>
c5b5956 to
fdc9d14
Compare
Signed-off-by: James Sturtevant <jsturtevant@gmail.com>
| } else { | ||
| let wasm_bytes = unsafe { std::slice::from_raw_parts(base as *const u8, len).to_vec() }; | ||
| load_wasm_module_from_bytes(inner, wasm_bytes)?; | ||
| } |
There was a problem hiding this comment.
This isn't great, but we made map_region private in hyperlight-dev/hyperlight@ffa7d8d#diff-ff2b13b76470ee68e295ce3277b29d2557ac2f403f696f5eec5adb12af3c27f6
We will need a patch release to use here
Instead of using a shared memory region or a host function callback
to provide host function definitions to the guest, the host now pushes
the serialized definitions directly as a parameter to InitWasmRuntime.
fixes #388