21 comments

[ 2.2 ms ] story [ 55.2 ms ] thread
Stupid question - how are they handling system calls in wasmer? I can't seem to find the answer easily.
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.
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!

[1] https://wasm.fastlylabs.com/

> 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. :-)
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.
(comment deleted)
Is there anywhere I can find actual numbers in terms of performance gains from running NGINX like this vs "the usual way"?
I’d be surprised to see any “gains” (but also thankful for specific figures).
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!
> 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.

How 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.