Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add vendor-neutral apps blog #333

Merged
merged 3 commits into from Mar 20, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
55 changes: 55 additions & 0 deletions blog/wasmcloud-1.0-vendor-neutral-apps/index.mdx
@@ -0,0 +1,55 @@
---
title: "Vendor-neutral apps with wasmCloud 1.0 and WASI 0.2"
date: 2024-03-19T10:00:00-07:00
author: "Eric Gregory"
author_profile: "https://www.linkedin.com/in/egregory04/"
image: "./wC-1.0-feature-vendor-neutral.png"
description: "How wasmCloud 1.0 enables you to write apps once and run anywhere with WASI 0.2."
tags: ['wasmCloud', 'WASI', 'WebAssembly', 'Wasm']
draft: false

---

![Vendor-neutral apps with wasmCloud and WASI 0.2](./wC-1.0-feature-vendor-neutral.png)

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)](https://github.com/WebAssembly/WASI/)** and the **[Component Model](https://github.com/WebAssembly/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.
{/* truncate */}
# Flexibility for platforms and applications

[WASI 0.2 includes these APIs](https://github.com/WebAssembly/WASI/tree/main/preview2#wasi-preview-2-contents), all available for use with wasmCloud 1.0:

| API | Versions |
| ------------------------------------------------| -------- |
| https://github.com/WebAssembly/wasi-io | 0.2.0 |
| https://github.com/WebAssembly/wasi-clocks | 0.2.0 |
| https://github.com/WebAssembly/wasi-random | 0.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-cli | 0.2.0 |
| https://github.com/WebAssembly/wasi-http | 0.2.0 |

:::info[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](https://github.com/bytecodealliance/wasi-virt) to virtualize your component.
:::

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

| API | Versions |
| ---------------------------------------------- | -------- |
| https://github.com/WebAssembly/wasi-blobstore | 0.2.0-draft |
| https://github.com/WebAssembly/wasi-keyvalue | 0.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](https://wasmcloud.com/blog/wasi-preview-2-officially-launches)—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](https://github.com/wasmCloud/wasmCloud/releases/tag/v1.0.0-alpha.1) 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`](https://github.com/wasmCloud/wasmCloud/tree/main/crates/wash-cli). 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!
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.