Wasmer – Universal Binaries Powered by WebAssembly
wasmer.ioHow is this different from what Java was a few years back?
You can compile Rust/C/etc executables to it, the stdlib might be different or nonexistant (unclear to me), WASM doesn't have a GC (yet) and you can get stacklike semantics, probably fewer security holes, the installer probably doesn't bundle other softfare.
But yes, technically speaking it's not that much different from JVM bytecode execution. Software is more consensus than breakthroughs though, so WASM might succeed where Java failed (well, kind of) because we're ready for it and the major players want it.
For people who like the idea, check Terrarium[1] from Fastly. They use Wasmer with Fastly services to have edge computing capabilities. Think AWS Lambda but in a CDN. It looks promising!
Surely they’re not using wasmer. They’re using cranelift with their own runtime, correct? This talk mentions a cranelift runtime fastly built in-house. https://youtu.be/FkM1L8-qcjU
Yes you are right. I got confused with all the techs out there... Thank you for your correction.
> Think AWS Lambda but in a CDN.
So, AWS Lambda@Edge
Yes I didn't know this existed already. Thank you to point that
It's a lot of fun. Enjoy. :-)
> Once installed, you will be able to run any wasm module (including Nginx!)
If you're running on Linux, I suppose that applies only to WASM modules that interface with a POSIX system (?)
Doesn't WASM interface with a JS/WASM VM, which is then responsible for interfacing with the OS? There are plenty of POSIX compatible VMs, including V8, the Chrome engine.
What is the interface called then?
Sorry for being confused. Isn't Nginx coded for a POSIX system? Or did they specifically port it to WASM (with its own interface)
The "posix" needs to be on the other side. Things like v8 use a posix interface for interacting with the OS. However they don't provide a posix interface the code which is running inside the VM.
I think what was needed was that someone implemented posix APIs inside webassembly, by delegating to the javascript APIs that e.g. node.js provides, or by building a native module that proxies those calls.
Ah, I misunderstood the question.
Is there anywhere I can find actual numbers in terms of performance gains from running NGINX like this vs "the usual way"?
They both should have very similar numbers in performance. Right now there is a bit of slowdown at startup time because of function compilation, but we are planning to improve this quite soon!
I’d be surprised to see any “gains” (but also thankful for specific figures).
Stupid question - how are they handling system calls in wasmer? I can't seem to find the answer easily.
We first wanted to focus on running Emscripten-generated WebAssembly files, so we are wrapping the syscalls that Emscripten is using with the real syscalls under the hood.
Here's an example of that: https://github.com/wasmerio/wasmer/blob/master/src/apis/emsc...
Would support for something like wasm-bindgen be possible eventually?
I'm not very well informed but I assume that you just call functions which are implemented by the VM, in the same manner you do filesystem operations in nodejs.