We are designing a single open intermediate language that all major languages can compile to and that is implemented on all major backends, including web, mobile, and embedded devices.
We are collaborating with the WebAssembly Community Group to make WebAssembly accessible to more languages, interoperable with existing infrastructure, and repurposable beyond the web.
We aim to create a world in which computation is generated, shared, and consumed just as conventiently and safely as data.
For more details, read our prospectus.
What is SOIL?
What about the JVM and the CLI/CLR/.NET?
Both of these (proprietary) systems were designed to primarily support a single language, and while many languages have managed to shoehorn into those designs, these solutions have been less than ideal—the fact that both of these systems needed extensions specifically to support dynamically typed languages are demonstrative of their failure to be
What about LLVM?
LLVM is primarly designed to be an intermediate representation for a compiler toolchain rather than an intermediate language for communicating across platforms. This difference in roles is apparent in, say, how LLVM uses undefined behavior in contrast to WebAssembly. LLVM uses undefined behavior to enable
A forum for developers of and researchers of low-level languages to exchange thoughts, projects, updates, and questions.
Monday, December 7th at 12pm ET
An Indexed Type System for Fast and Safe WebAssembly
Adam Geller—University of British Columbia
Often in low-level languages (i.e., assembly languages), potentially expensive run-time mechanisms are used to catch unsafe behavior. The lack of abstractions in low-level languages can make reasoning about unsafe behavior difficult, as every aspect of a program (e.g., state) has to be dealt with explicitly. Expressive type systems can statically ensure complex safety properties of programs. We present the Wasm-prechk language, an assembly language based on WebAssembly. Wasm-prechk is equipped with a type system that allows expressing simple constraints over program values to ensure the same level of safety as WebAssembly while justifying the static elimination of run-time checks.
We are an international team of world-class researchers coordinating our efforts with each other and with industry to develop a single open intermediate language for all languages on all platforms.
I have worked with many industry teams on researching principled designs with efficient implementations, and I am eager to develop such a design for the next generation of WebAssembly to make it support a broad range of major industry languages.
My research focuses on low-level types and language interops. I am excited to make WebAssembly not only a platform for many languages but one where a single code base can cleanly interweave multiple languages together.
I have co-led the design of a language-neutral IR for managed languages and have extensive experience in the design and implementation of garbage collectors. I am excited to bring memory safety to WebAssembly.
I work on language design, runtime systems, program analyses, and verification for security. I am excited to use and extend Wasm to build more secure systems and applications.
My research combines programming languages and computer architecture. I'm interested in thinking of safe low-level languages like WebAssembly as the next generation of ISAs for machines in the post-Moore era.
WebAssembly is an opportunity to develop foundations for the web in which security has been considered at every level, from design to deployment, enabling new notions of trust and new applications that can build upon that trust.
I work on programming-language design and implementation, systems, and web security. I am deeply interested in making WebAssembly more expressive with algebraic effects and more secure with containers.
In something as fundamental as WebAssembly, even a forgotten obscure corner case can lead to a world-wide vulernability. With mechanical verification, I aim to ensure that WebAssembly provides a new robust foundation for the web.
Customizable Memory Layout
We need a way to support the diverse range of memory layouts that languages rely upon for good performance.
Modern runtimes and paradigms need to be able to manage and inspect stacks and stack frames just as they do heaps and objects.
Browsers need a way to independently check or enforce that all operations in a program will be safe and secure.
Quick Load Times
Programs need to be decomposable into small, quick to audit, and easy to compile units that they execute as they download.
We need a formal standard or verified implementation so that programs can count on consistent cross-platform behavior.