WebAssembly (WASM) is the first standard for software that runs anywhere. This is a series of interviews with Andreas Rossberg (co-designer of WASM, DFINITY), Ben Tizer (WASM Team Technical Lead, Google), and Bradley Nelson (Chair of W3C WASM Working Group, Google)
WebAssembly is also designed in such a way that makes it perfect for programming blockchain applications. It is also part of the execution layer of the DFINITY platform.
WebAssembly is a portable, low-level language, which is a compiler target for other languages. It's designed to be portable, it's designed to be fast and it's designed to be low-level. Low-level in the sense that it doesn't make particular prescriptive choices about high-level features, so that is something that would be compiled away from a high-level language, because it's a low-level language that it makes it universal. It's designed to be portable in the sense that you can run on many different machines. Even though it's low level, it's in the middle because you can compile many languages to it and you can run it on many different machines.
WebAssembly is a portable, low-level format for the web. I think that the most important attribute with WebAssembly is that we're using what hardware is actually good at as sort of a guiding light.
Allowing the web to sort of do all the things is a really powerful thing. I think one of the issues with the web going back a long time has been that there are things you can and can't do well on the web, and WebAssembly goes a long way towards fixing that. You've got these a powerful multi-core machines, and while there were ways to try to take advantage of that partially, prior to WebAssembly and especially some of our efforts around threads and potentially around SIMD, a lot of the full capabilities of the machine were sort of off limits. Especially for high performance applications like games, that was a problem, but it also includes productivity applications. In general, the model sort of prescribed that you had to build the applications one way, it works the way of the web platform or not at all. I think for mobile, it'll open up sort of more opportunities for folks to get applications into platforms that have had their existence focused on app stores. The lack of capabilities especially in the mobile web have meant that for a lot of applications you have to do an app that's sort of the only option, and now you'll be able to say, "Well, maybe this works better as, as something that's on the web even for mobile." I think that it'll open opportunities for different kinds of programming paradigms. Folks that didn't fit into the style of how web applications have traditionally been developed will have more options, more programming languages. The opportunity for and the unfortunately challenging peril of mixing languages in more combinations, and the inter op and all of those issues.
I have recently been giving talks with a title "neither web nor assembly" because I personally think it's kind of a misnomer because it was actually also from the get go designed to be not specific to the web. We have taken great care in designing it in a way that makes it work just as well in other environments than just the web, and the same qualities that make it interesting for the web also make it interesting in other contexts. For example, blockchain obviously is the one I should mention here first. Basically, any context where you want to run code in a way that is efficient and safe while being independent from specific hardware, so that you can write programs and distribute them to different hardware. That might be the web obviously, that might be blockchain computations, that might be mobile devices, that might be embedded devices, that might be content and delivery networks, things like that. One of its novelties is that it's completely mathematically specified with a computer verified specification. That also might be one quality that makes it interesting for blockchains because then you actually have a well-defined semantics you can reason about formally, maybe even with machine proof. You do smart contracts and there's lots of money behind them that you want to have some insurance on various levels that they do the right thing. In addition, since it's a portable format, it might also enable different platforms to communicate in a manner that they couldn't be doing so far because they all were using completely different formats of programs that didn't understand each other. It has this unifying fashion across different platforms and hardware that can potentially be useful for allowing programs to be distributed across different ecosystems even.
I see this as the ability to bring really powerful native applications to the web, so things that you might do really heavy work in, for example, AutoCAD or heavy audio or video processing, these types of applications to the web that maybe were not possible due to performance limitations, due to framework limitations. WebAssembly attempted to, and I think we did actually solve that problem to bring this type of application to the web.