herobird 8 days ago

Wasmi author here. Glad to see Wasmi being used in embedded contexts were it really shines. :)

I just watched the demo video of Munal OS and am still in awe of all of its features. Really impressive work!

  • Gazoche 8 days ago

    Thank you! And thanks for making Wasmi, it's a really impressive project and it's the reason why I decided to go this whole WASM sandbox route (because I could embed it easily) :)

    • herobird 7 days ago

      Awww, makes me very happy to hear! :) Thank you!

  • 9d 8 days ago

    Yeah it's one of those projects were I'm so impressed that I'm saying nothing because there's nothing to say, it's just really impressive. I'm not sure what will come of this project, but it has a lot of potential to at least inspire other projects or spark important discussions around its innovations.

phickey 8 days ago

Wasmtime maintainer here - curious to hear what went wrong, I and several other users of wasmtime have production embeddings under no_std, so it should do everything you need, including building out WASI preview 2 support. You can find me on the bytecode alliance zulip if you need help.

  • Gazoche 8 days ago

    I think I was a bit spooked by the examples (https://github.com/bytecodealliance/wasmtime/tree/main/examp...), and the need to implement platform dependencies in C code (which would have complicated the build process). Makes sense since it's a more complex and mature project, but Wasmi on the other hand was just a pure Rust dependency that only required a single line in the Cargo.toml. So in short I went the lazy route :)

    • phickey 7 days ago

      All of the C primitives there implemented in (unsafe) Rust, but we built that example for an audience that already had some platform elements in C. We'll try to improve the example so that both integrating with C, and using pure Rust, are covered.

  • lasiotus 8 days ago

    I'm not the OP, but I have a similar experience with Motor OS: wasmi compiles and works "out of the box", while wasmtime has a bunch of dependencies (e.g. target-lexicon) that won't compile on custom targets even if all features are turned off in wasmtime.

    • phickey 7 days ago

      Not sure how to help with this much information but I've built and run wasmtime on some pretty squalid architectures (xtensa and riscv32 microcontrollers among others) but the right collection of features might not be obvious. We can help you find the right configuration on the Bytecode Alliance zulip or the wasmtime issue tracker if you need it.

      • lasiotus 7 days ago

        > Not sure how to help with this [...]

        I guess not much can be done at the moment: dependencies are often the primary obstacle in porting crates to new targets, and just comparing the list of dependencies of wasmtime vs wasmi gives a pretty good indication of which crate is a bit more careful in this regard:

        https://crates.io/crates/wasmtime/33.0.0/dependencies https://crates.io/crates/wasmi/0.47.0/dependencies

      • sitkack 6 days ago

        Is that wasmtime in interpreter mode? I didn't see a rv32 backend to wasmtime (in cranelift) or did I not look in the right place.

        What are the min memory requirements for wasmtime/cranelift?

    • 9d 8 days ago

      But if this benchmark is right, then wasmtime is 5x faster than wasmi for it:

      https://github.com/khvzak/script-bench-rs

      • herobird 7 days ago

        Wasmtime, being an optimizing JIT, usually is ~10 times faster than Wasmi during execution.

        However, execution is just one metric that might be of importance.

        For example, Wasmi's lazy startup time is much better (~100-1000x) since it does not have to produce machine code. This can result in cases where Wasmi is done executing while Wasmtime is still generating machine code.

        Old post with some measurements: https://wasmi-labs.github.io/blog/posts/wasmi-v0.32/

        Always benchmark and choose the best tool for your usage pattern.

        • 9d 7 days ago

          That's a good point I didn't think about.

          I guess it's like v8 compared to quickjs.

          Anyway all this talk about wasm makes me want to write a scriptable Rust app!