Wasmer, builder of technology leveraging the WebAssembly (Wasm) binary instruction format, is unveiling WASIX, a specification and toolchain extending WASI (WebAssembly System Interface) to build applications with full Posix (Portable Operating System Interface) compatibility. The intent is to streamline compilation to Wasm.
Announced May 30 as a superset of WASI, WASIX can be used for both building apps and completing runtimes, supporting threads, Berkeley sockets, forking, and other capabilities available for almost all of the life of Posix. In developing WASIX, the Wasmer team and community have worked to enhance the existing WASI ABI, stabilizing it and making it more compatible with Posix, Wasmer said. Proponents believe WASIX will make it easier to compile any apps to Wasm, which has been positioned to bring high performance to web applications and allow other languages besides JavaScript to be used in the browser. The WASIX specification can be found at wasix.org. Developers can try it out WASIX at wasmer.sh.
Specific aspects of WASIX include long-term stabilization and support of the existing WASI ABI and additional noninvasive syscall extensions that complete missing gaps, enabling practical applications to be compiled and used now. WASIX features:
- Toolchains for compiling Rust and C/C++, now in preview, with upstream support for AssemblyScript expected soon, along with support for Zig
- Runtime support, starting with the Wasmer runtime but with more expected
- Runnable in browsers or servers
- Support for multithreading
- Support for sockets, including IPv4 and IPv6
- Asynchronous polling of sockets and files
- TTY support
- DNS resolution
Although WASI was ambitious and is still supported, its slow iteration pace had held back the progress of making Wasm available, Wasmer said. WASI was unveiled by Mozilla in March 2019 to provide a consistent mechanism for WebAssembly applications to interact with any operating system, with WebAssembly able to run outside and inside the web. Posix, which dates back to the 1980s, has been an IEEE standard defining APIs for software compatible with versions of Unix, including some Linux distributions.