But what makes WebAssembly really different from any other virtual machine before it, e.g. Java and .NET, aside from being language-agnostic, is that it’s just a specification. There is no single VM or corporates overhead. Just a specification to allow anyone can create their own for any purpose. No one person can monopolize it.
Fundamentally, while it is intended for the web, the standards committee fully acknowledges it’s use as a stand-alone platform. This means that you can write an application in Rust, for example, and have that WebAssembly binary run on any operating system and processor. And because it’s just a specification, it can literally be anywhere. There are already runtimes, such as wasmtime and wasmer, that are standalone WebAssembly virtual machines. WebAssembly makes it possible to do what Java takes pride in, “write once, run anywhere,” but without the language barriers.
However, WebAssembly as it exists in it’s current form is pretty bare bones. It lacks interacting with DOM, multi-threading, garbage collecting, and a proper systems API for standalone applications. These are all still being researched and will have to go through the same adaption process as HTML5 once did. But it will be worth it.