bytecodealliance / javy

JS to WebAssembly toolchain
Apache License 2.0
2.16k stars 103 forks source link

Where can a dynamically linked WASM run? #590

Closed lcswillems closed 7 months ago

lcswillems commented 7 months ago

What is your question?

In the README I see written:

Javy can create very small Wasm modules in the 1 to 16 KB range with use of dynamic linking. The default static linking produces modules that are at least 869 KB in size.

If I build using dynamic linking, can I then run the .wasm by any WASM runner?

I think my question comes from the fact I don't understand properly what "dynamically linked" means.

Thank you very much for the time that will be taken to answer me :pray:

lcswillems commented 7 months ago

I've just found this section in the README:

https://github.com/bytecodealliance/javy?tab=readme-ov-file#creating-and-using-dynamically-linked-modules

which already clarifies a lot.

In my case, I am curious if I could build my JS code to WASM and then use this WASM on the MultiversX blockchain, which executes the WASM code using WASMER.

https://github.com/multiversx/mx-chain-vm-go

Because I want to run the WASM on a blockchain and that deploying code on the blockchain is very costly, I want the WASM size to be as low as possible.

jeffcharles commented 7 months ago

I am curious if I could build my JS code to WASM and then use this WASM on the MultiversX blockchain

I'm not familiar with various blockchain execution environments. The environment you're attempting to execute your Wasm module in would need to make a set of Javy imports available to the dynamically linked module. The javy-quickjs_provider Wasm file exports functions to satisfy these imports but you would need whoever is managing the runtime you're deploying against to instantiate that module and make it available to link against. Wasmer out-of-the-box will not do that, it would have to be specially configured to do that by whoever is hosting the blockchain. My guess and assumption would be that they're not doing that so you would see a module instantiation failure because of unsatisfied imports.

lcswillems commented 7 months ago

Thank you very much @jeffcharles for your explanation which clarifies a lot the situation for me :pray: :pray: