Skip to main content

Vendor-neutral apps with wasmCloud 1.0 and WASI 0.2

Ā· 3 min read

Vendor-neutral apps with wasmCloud and WASI 0.2

WebAssembly is bringing us closer than ever to a world of "write once, run anywhere." From developer platforms to the browser to embedded devices, Wasm gives us a way to write portable, efficient, sandboxed code. The WebAssembly System Interface (WASI) and the Component Model extend the power of WebAssembly with standard APIs for core functionalities like HTTP, CLI, I/O, and moreā€”as well as a specification for compiling Wasm applications as interoperable, composable components.

Now, wasmCloud 1.0 brings the Component Model and the standard APIs of WASI 0.2 to production-grade distributed computing. By embracing community standards, wasmCloud ensures that your business logic is truly vendor-neutral. Components built for wasmCloud 1.0 run anywhere that supports WASI 0.2, and any component you've built to target WASI 0.2 is ready to run distributedly with wasmCloud.

WASI 0.2 includes these APIs, all available for use with wasmCloud 1.0:

APIVersions
https://github.com/WebAssembly/wasi-io0.2.0
https://github.com/WebAssembly/wasi-clocks0.2.0
https://github.com/WebAssembly/wasi-random0.2.0
https://github.com/WebAssembly/wasi-filesystem*0.2.0
https://github.com/WebAssembly/wasi-sockets*0.2.0
https://github.com/WebAssembly/wasi-cli0.2.0
https://github.com/WebAssembly/wasi-http0.2.0
Note

As a security-first platform, wasmCloud provides stubbed implementations of wasi-filesystem and wasi-sockets that donā€™t truly interact with the host system. For functionality that depends on these interfaces, we recommend using wasi-virt to virtualize your component.

Additionally, wasmCloud supports proposed WASI APIs that are in the process of implementation and standardization:

APIVersions
https://github.com/WebAssembly/wasi-blobstore0.2.0-draft
https://github.com/WebAssembly/wasi-keyvalue0.2.0-draft
https://github.com/WebAssembly/wasi-logging[proposal]

Ultimately, WASI APIs are community-accepted standards using the common WebAssembly Interface Type (WIT) format. Because wasmCloud enables you to build custom WIT interfaces and communicate between components, WASI 0.2 is just the beginning of what you can do with WebAssembly and wasmCloud, providing a stable foundation for applications andā€”more importantlyā€”libraries.

As standard and popular libraries are built with WASI and WIT, it will be easier and easier for platform designers to create powerful, flexible, portable platforms for which developers can write simple, truly vendor-neutral code idiomatically. In these apps, business logic won't be tied to a particular cloud provider, a particular dependency stack, or even a particular version of a dependency.

With wasmCloud 1.0, this kind of deep vendor-neutrality is here today. If an application component on wasmCloud uses the high-level wasi-keyvalue interface to interact with Redis (as fulfilled by a provider component), it can be plugged into another version of Redis or another key-value store entirely. The flexibility to build on portable, standardized foundations runs all up and down the wasmCloud stack, heralding new possibilities for developers and platform engineers alike.

Conclusion

With the power of components and WASI 0.2 APIs, wasmCloud makes truly portable, vendor-neutral appsā€”and unprecedentedly flexible developer platformsā€”a reality.

The wasmCloud 1.0 alpha release (already pinned to WASI 0.2) is available on GitHub right now for testing and finalization of APIs. If you like to live on the bleeding edge, you can try out component builds with the v0.27 alpha release of wash. Install the wash alpha using cargo by running cargo install wash-cli --version 0.27.0-alpha.1. If you have questions or feedback, we'd love to hear them!