One of the most powerful innovations in recent past decades for the internet, WebAssembly is an open standard which defines a portable binary-code format for executable programs. Along with that, it also defines an associated textual assembly language and interfaces for enabling interactions between such programs and their host environment. The major objective of WebAssembly is to facilitate high-performance apps in web browsers, but the format is built to be executed and integrated with other environments also.
Before the coming of WASM, you could write Javascript code, and the browser was able to execute the code using web APIs. The main programming language that we have on the web today is Javascript, which was started as a very tiny scripting language. When it comes to processing, the language has its limits and is challenging for it to perform low-level tasks without creating a performance impact. As you use JS for large files and apps, it increases the download-parse-compile cycle. This takes more time and causes a performance impact.
To overcome this issue, WebAssembly came to light and was created in 2015. It is a low-level assembly-like language that has a compact binary format, and runs with almost-native performance and provides languages such as C++ and Rust with a compilation target so that they can run on the web. This means that it basically WASM allows you to run apps written in C++ and other languages on the web at near-native performance. All modern browsers have support for WASM. It allows developers to load WASM modules into a browser and enables them to manage memory and some table instances.
WebAssembly became a World Wide Web Consortium recommendation in December 2019, and in addition to HTML, CSS, and JavaScript, it is the fourth language to run natively in browsers. In order to use WASM in browsers, developers use Emscripten SDK to compile C++ (or any other LLVM-supported language like D or Rust) source code into a binary file. The file then can run in the same sandbox as conventional JavaScript code.
WebAssembly’s sandbox ability gives users a safe multi-tenancy environment. Applications are allotted as WASM files and can be instantly loaded, so there is no requirement to begin runtime environment and the cold start time is reduced drastically.
What’s The Big Deal With WASM?
What’s game-changing about WebAssembly is that it brings the performance of native applications to the web in a way that’s completely secure, yet enabling a full functionality expected from games, major applications and the entire spectrum of software you can run on a computer. The main problem that WebAssembly is aiming to solve is that while we have JavaScript on the web, it wasn’t really designed to be fast to start up a very large application. WebAssembly is just built as a binary format and very compact to download, and also very efficient to compile and execute. There’s a whole bunch of optimisations coming that will drive that even further, allowing huge applications to load up quickly, even on mobile devices.
In addition, we should get significant benefits and throughput too. Meaning once the code is compiled, it will run faster. WebAssembly fills the gap of high-performance execution without needing to use any kind of plug-ins. So now with WebAssembly, we can have real 64-bit integer data types. The other thing is more control over memory management in general, something we couldn’t do before.
Innovators and open source developers are continuously adding to the feature set of WebAssembly until we’re able to efficiently capture all the major languages. They are excited about the idea of having a universal compile target that could eventually unlock the ability for any language to target it.
How Can It Benefit Developers?
WebAssembly can be used by developers as a secure, portable, and effective tool to deploy models anywhere, across browsers and devices. WebAssembly is better than containers because even though containers permit transferring a company’s existing Python stack, packages, and models etc., containers are usually slow and more complex in terms of portability and deployment across environments. On the other hand, with WASM, companies can have models to be much more portable, and allow data scientists to rebuild models when they transfer them from servers to IoT devices to mobile phones to web-browsers. After generating a .wasm binary, which follows the WASI standard to make it fully portable, it can be run anywhere, in the browser, and on edge. This generates new use-cases: object recognition models on drones, run recommender models on the user’s browser.
WebAssembly now means that developers of all types can bring their native C applications, and C++ applications to the web and achieve full performance and the full set of capabilities that they have running native on Windows or Mac just in a web browser, which is revolutionary because it means now users can just go to a webpage and start using the app. No download, no installation, no security risk. It’s a really revolutionary approach. You get close to your native performance, but portable, across platforms, using a browser. Being able to write your code in one language, and then port it to all the platforms, that’s, definitely huge engineering advantages.
Use Cases
WASM has emerged as one of the leading performance boosters for web apps, and it is now available across major browsers. WASM allows developers to deliver powerful apps on the web and mobile devices, something which was not possible prior to the coming of this innovation.
As it is a virtual machine, it has been designed to easily compile to a lot of architectures with incredible portability. So when you write some code in whatever language and you compile it to WebAssembly, that code will get compiled to the instruction set of that virtual machine. And then those instructions get stored in a binary format, usually in a .wasm file. And because that virtual machine is designed to easily compile to real processors, this file can now be ingested by a runtime such as the browser. Here, an important application achieved with WASM is machine learning in the browser.
For example, TensorFlow.js combines machine learning and JavaScript, and now the open-source ML library operates with a WebAssembly backend for various use cases. TensorFlow.js was designed by Google to allow JavaScript developers to get into machine learning without the need to learn advanced programming or technical skills. The WASM backend for TensorFlow.js extends support for the browser and Node.js and is created to heighten performance on lower-end mobile devices. WASM provides native decoding that is way quicker than what JavaScript can parse. According to experts, the WASM backend will grow to be more attractive as light web ML models for edge devices become prevalent. Tensorflow WASM backend gives a novel choice for a developer to directly run inference on a mobile CPU, and with better performance and portability.
The browser can turn that .wasm file into actual machine code off the actual machine the browser is running on, and then execute that code. Some big companies are using WebAssembly to bring their existing products, that they probably wrote in C++ for example, to the web. So for example, AutoCAD, who had been working on AutoCAD for years and it’s a well-known product. But now they’ve put in the effort of compiling it to WebAssembly. And suddenly it was running in the browser, which is kind of mind-blowing when you think about it.
A lot of game engines are using WASM too. After game developers build a game, then can compile it to Playstation, or to Xbox, or other systems. And what is impressive is that the browser and WebAssembly are able to deliver the performance necessary to run these kinds of games. So whatever code is written to run on a system should just magically run on the web.