Skip to content

Commit 64438c3

Browse files
authored
Add Plumber's Summit 2024 articles (#84)
Publishing @ericgregory's two articles summarizing each day of Plumber's Summit 2024, having coordinated release nomenclature with the WASI 0.2 (nee "Preview 2") announcement post that immediately precedes them. * Add Plumber's Summit 2024 articles * Update 2024-02-04-plumbers-day-1.md * Update 2024-02-05-plumbers-day-2.md * Update 2024-02-04-plumbers-day-1.md * Update 2024-02-04-plumbers-day-1.md Naming consistency for WASI 0.2 * Update 2024-02-05-plumbers-day-2.md Updating for WASI 0.2 naming consistency
1 parent 82eed94 commit 64438c3

2 files changed

Lines changed: 194 additions & 0 deletions

File tree

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
---
2+
title: "Plumber’s Summit Day 1: Wasmtime and plugins, WASI 0.2.1, OCI artifacts and registry roadmap"
3+
author: "Eric Gregory"
4+
date: "2024-02-04"
5+
github_name: "ericgregory"
6+
excerpt_separator: <!--end_excerpt-->
7+
---
8+
9+
The Bytecode Alliance Plumber’s Summit gathered in Raleigh, NC on January 31, 2024 to celebrate the release of WASI 0.2 and collaborate on the next steps forward for the WebAssembly ecosystem.
10+
11+
The first day of the two-day summit focused on topics of general interest, while the second day adopted an “unconference” structure with more narrowly focused breakout sessions.
12+
<!--end_excerpt-->
13+
14+
Member Director Ralph Squillace opened the day with a celebration of the Bytecode Alliance’s milestone release of WASI 0.2, and Technical Steering Committee Director Bailey Hayes set the tone with a guiding theme of “Building better together.”
15+
16+
Day 1 topics included:
17+
18+
* Wasmtime: Native plugins and core Wasm proposals
19+
* WASI 0.2.1 planning and proposals
20+
* OCI artifacts and a registry roadmap
21+
22+
You can [watch the recording in full on YouTube](https://www.youtube.com/watch?v=eZF2MLMgXhk) or read the summaries below&mdash;each summary includes a timestamp to find the discussion in the recording.
23+
24+
<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/eZF2MLMgXhk?si=HtDgebmnPfjnd89i" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
25+
26+
## Wasmtime: Native plugins and core Wasm proposals
27+
28+
Till Schneidereit and Alex Chrichton of Fermyon led a discussion ([43:00](https://www.youtube.com/watch?v=eZF2MLMgXhk&t=2580s)) on potential approaches to implementing Wasmtime native plugins (also known as host components). Plugin functionality could deliver benefits including:
29+
30+
* A smaller binary for Wasmtime
31+
* Minimized trusted compute base
32+
* Easier deployments
33+
* Enablement of partial updates
34+
* Out-of-tree development of APIs
35+
* Easier experimentation with APIs
36+
37+
Till noted that for many users “in large-scale environments where you want to be able to specialize individual nodes to run specific content, you don’t want to have your own distribution of Wasmtime for each of these nodes.”
38+
39+
Alex and Till outlined three potential approaches to implementation:
40+
41+
1. Support dynamic libraries
42+
2. Support an RPC mechanism
43+
3. Support self-hosted APIs
44+
45+
In order to frame the decision, the group discussed whether plugins should be implemented as components or core Wasm modules, given that it would be possible to support both implementations with dylibs.
46+
47+
Luke Wagner of Fastly noted that the SDK for developing a plugin would be dramatically different for components and core Wasm, since core Wasm APIs are lower-level and memory management is more of a concern.
48+
49+
There was general agreement that RPC and dylibs need not be an either/or proposition&mdash;Alex suggested that at minimum, dynamic libraries could serve as a least common denominator, while selectively lifting certain functionalities up to RPC.
50+
51+
Representatives from multiple organizations expressed that an RPC mechanism is a compelling approach, enabling greater sandboxing of plugins. David Justice from Microsoft added that having the ability to use different languages to build these plugins would “open up our world to so many developers.”
52+
53+
Bailey Hayes added that at Cosmonic and wasmCloud, “We started with dylibs and are working on an RPC implementation.”
54+
55+
Future discussions will detail how the RPC implementation, known as **wRPC**, will integrate into `wasm-tools`. The session concluded with the sentiment that the group should work on both the dylib and RPC approaches, taking one as a baseline but pursuing both at a synchronized pace, with further details to be specified in an RFC.
56+
57+
In a later session on inclusion of core Wasm proposals in wasmtime ([6:40:30](https://youtu.be/eZF2MLMgXhk?t=24030)), Luke Wagner and Nick Fitzgerald of Fastly walked through the implementation status for several core Wasm proposals in Wasmtime:
58+
59+
* [`gc`](https://github.com/webAssembly/gc) - Adds user-defined, garbage-collected types to Wasm
60+
* [`exception-handling`](https://github.com/webAssembly/exception-handling) - Adds throw/catch-style unwinding to Wasm
61+
* [`shared-everything-threads`](https://github.com/webAssembly/shared-everything-threads) - Adds fine-grained sharing of Wasm state
62+
* [`stack-switching`](https://github.com/webAssembly/stack-switching) - Adds fibers to core Wasm
63+
64+
Exception handling requires an implementation owner to get it incorporated into Wasmtime. Taken together, these proposals will help to enable support for more languages across the ecosystem.
65+
66+
## WASI 0.2.1 planning and WASI proposals
67+
68+
Discussion of plans for WASI 0.2.1 ([1:49:15](https://www.youtube.com/watch?v=eZF2MLMgXhk&t=6555s)) touched on potential feature inclusions&mdash;timezone functionality for `wasi:clocks`, for example&mdash;but the bulk of conversation centered around the concrete implementation of patch releases:
69+
70+
* What is the scope of additions for 0.2.x updates?
71+
* How will minor version updates be experienced by users?
72+
* How can the 0.2.1 release be as smooth as possible?
73+
74+
The group agreed that 0.2.x will strictly make additions to the API, and that additions to parameters on functions are not supported.
75+
76+
Till Schneidereit stated that an improved developer experience around errors is needed&mdash;currently, if a user attempts to run a component with the “wrong” interface, they are simply told that the “expected function found nothing.” Instead, it would be helpful for users to receive error messaging that is higher-level and easier to reason about: for example, “You’re targeting version X of this interface, but version Y is the supported version.”
77+
78+
The group agreed to target April 2024 for 0.2.1, with champions for specific features to drive those features’ addition to the release.
79+
80+
In an afternoon session on WASI interface proposals ([5:42:22](https://youtu.be/eZF2MLMgXhk?t=20542)), Taylor Thomas of Cosmonic and Jiaxiao Zhou Mossaka of Microsoft discussed the status of the [`wasi-cloud-core`](https://github.com/webAssembly/wasi-cloud-core) world and included interface worlds such as [`wasi-http`](https://github.com/WebAssembly/wasi-http), [`wasi-keyvalue`](https://github.com/WebAssembly/wasi-keyvalue), and [`wasi-blobstore`](https://github.com/WebAssembly/wasi-blobstore).
81+
82+
The `wasi-cloud-core` world aims to create a set of simple, portable interfaces that are used by a majority of all types of applications running in clouds&mdash;while more specifically targeted interfaces can be created, these represent the “lowest common denominator” cloud interfaces.
83+
84+
Taylor shared that [`wasi-distributed-lock-service`](https://github.com/WebAssembly/wasi-distributed-lock-service) has been deemed out of scope for the `cloud-core world` and removed. The [`wasi-runtime-config`](https://github.com/WebAssembly/wasi-runtime-config) and [`wasi-keyvalue`](https://github.com/WebAssembly/wasi-keyvalue) proposals have recently completed interface first drafts and are ready for implementation; `wasi-blobstore` requires some refinement and [`wasi-sql`](https://github.com/WebAssembly/wasi-sql) will need significant work.
85+
86+
An important point of emphasis was that each WIT package will have its own proposal and versioning requirements and will be voted upon independently. Taylor expressed a hope that work can progress along the following timeline:
87+
88+
* **2024 Q1** - Lock in basic interface definitions (other than `wasi-sql`) with at least one POC implementation
89+
* **2024 Q2** - Get implementations in place and interfaces to Phase 2
90+
* **2024 Q3** - Phase 3 and further stabilization
91+
92+
Bailey Hayes noted that process updates will be necessary to reflect independent voting on WIT packages.
93+
94+
## OCI artifacts and registry roadmap
95+
96+
Taylor Thomas of Cosmonic introduced the group to the initiative to use the OCI standard to distribute components ([5:11:00](https://youtu.be/eZF2MLMgXhk?t=18662)). Goals for this effort include:
97+
98+
* Support for a common distribution interface
99+
* The ability to use a single OCI-compliant manifest across runtimes
100+
* Ease of adoption for container users
101+
102+
While the OCI representation will be single-layer at first, it is being designed to support an “exploded,” multi-layer view in which constituent components are organized by layer, facilitating familiar registry operation patterns and composable by either Wasm or container runtimes.
103+
104+
Taylor defined the next steps as...
105+
106+
* Working through stakeholder questions
107+
* Producing an example manifest with an accompanying spec
108+
* Returning a draft manifest to the main OCI group in 2 months or less
109+
* Submitting for inclusion in a Wasm repo&mdash;likely the Component Model
110+
111+
Next was a registry update and roadmap from Robin Brown of SingleStore and Lann Martin of Fermyon ([5:22:52](https://youtu.be/eZF2MLMgXhk?t=19372)). Robin and Lann walked through Phase 1 and Phase 2 registry goals.
112+
113+
Phase 1 emphasizes [`warg-loader`](https://github.com/lann/warg-loader) and work on OCI artifacts. This phase aims to...
114+
115+
* Support existing registries like OCI as quickly as possible
116+
* Make it possible to publish and pull components without new infrastructure
117+
* Focus on unifying the package consumer experience and integrating it into dev tools
118+
119+
All of this is intended to bootstrap adoption of the packaging system into ecosystem tooling.
120+
121+
Phase 2 will focus on supply chain security and [WebAssembly Registry (Warg)](https://github.com/lann/warg-loader), continuing work on the `warg` protocol and integration with `warg-loader`, emphasizing:
122+
123+
* Core registry functionality
124+
* Transparency design
125+
126+
The importance of component discoverability was a major topic of discussion. Discoverability was widely affirmed as a goal, but it was noted that fundamentals need to be in place to create a superior developer experience, and that this is an area where investing more resources can accelerate progress significantly.
127+
128+
## Conclusion
129+
130+
To conclude the day, Luke Wagner talked through “Luke’s Backlog”&mdash;a collection of features and projects for possible future implementation. Luke presented these as “a menu of cool stuff to think about over the next few years”&mdash;items that might happen within months, within years, or on an indefinite timescale.
131+
132+
On the menu were several features for discussion on Day 2 of the Plumber’s Summit, including async, WIT package development, and much more. Check out [our summary of Day 2](https://bytecodealliance.org/articles/plumbers-day-2) to learn more about those conversations or watch the [Day 2 stream](https://www.youtube.com/watch?v=HGspgXNFisc) on YouTube.
133+
134+
135+
136+
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
---
2+
title: "Plumber’s Summit Day 2: Async, DevEx, and the road ahead"
3+
author: "Eric Gregory"
4+
date: "2024-02-05"
5+
github_name: "ericgregory"
6+
excerpt_separator: <!--end_excerpt-->
7+
---
8+
Last week, the Bytecode Alliance Plumber’s Summit gathered in Raleigh, NC to map the road ahead for the WebAssembly ecosystem.
9+
10+
You can read a [summary of the summit’s first day](https://bytecodealliance.org/articles/plumbers-day-1) on the Bytecode Alliance blog or watch the [full recording](https://www.youtube.com/watch?v=eZF2MLMgXhk) on YouTube. While much of the second day was conducted in breakout sessions, some consistent themes ran through many of those conversations, including the implementation of **async** and **developer experience**.
11+
<!--end_excerpt-->
12+
13+
A recording of the Day 2 livestream is [available on YouTube](https://www.youtube.com/watch?v=HGspgXNFisc); the summaries below include timestamps for those portions of the recording.
14+
15+
<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/HGspgXNFisc?si=SHdhA2cWlLs_XD2j" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
16+
17+
## Async and WASI 0.3
18+
19+
Luke Wagner of Fastly delivered ([26:00](https://youtu.be/HGspgXNFisc?t=1560)) a look at his sketch for async implementation in WASI 0.3&mdash;with an eye toward bringing users simple, composable HTTP interfaces with concurrency.
20+
21+
The presentation provided a high-level design summary that delved into lifting and lowering async, and how those would come into play under a variety of circumstances in which two components are communicating with one another:
22+
23+
* Both components are async
24+
* Sync calling async
25+
* Async calling sync
26+
27+
Joel Dice of Fermyon demonstrated ([1:11:00](https://youtu.be/HGspgXNFisc?t=4260)) a prototype of the first milestone with [`isyswasfa`](https://github.com/dicej/isyswasfa) (I sync, you sync, we all sync for async), which he described as providing “a ‘polyfill’ that devs can play with today while they’re waiting for WASI 0.3 and real async.” The project aims to make it easier for developers to begin implementing async (and minimize changes needed later) while also providing implementation feedback for the WASI 0.3 design process.
28+
29+
The demo is [available on GitHub](https://github.com/dicej/isyswasfa) and shows how a component written in idiomatic Rust can await a WASI 0.2 monotonic clock poll.
30+
31+
## Developer experience
32+
33+
Two morning sessions focused on different aspects of developer experience.
34+
35+
First, Lann Martin of Fermyon led a discussion ([1:44:45](https://youtu.be/HGspgXNFisc?t=6285)) on the current experience of working with WIT packages, and how it may evolve in the future.
36+
37+
Work is underway on a tooling to push WIT packages to a Warg registry as part of the cargo component project. The group agreed that from a broader perspective, the problem of registry tooling is downstream of a larger question: what is the single source of truth for WIT packages? From this conversation emerged a consensus on creating binary artifacts from snapshots of WIT entity trees and using that as the primary distribution mechanism across repositories.
38+
39+
A related discussion ([2:07:09](https://youtu.be/HGspgXNFisc?t=7629)) led by Fermyon’s Ryan Levick dealt with developer experience around component tooling. There was general agreement that existing component tooling needs better error messaging and documentation. Dan Gohman of Mozilla noted that the process of building out tutorial documentation often drives development by surfacing feature and DevEx gaps.
40+
41+
During an afternoon breakout session, Yoshua Wuyts of Microsoft explained his project [`wasm-http-tools`](https://github.com/yoshuawuyts/wasm-http-tools), which enables components to communicate with one another over HTTP and features an in-progress bidirectional binding between WIT and OpenAPI. The group held preliminary conversations on how and whether the project might become a Bytecode Alliance project, and potential advantages in expanding the project scope to encompass other bidirectional bindings (e.g., WIT to RPC, WIT to Smithy), perhaps under a name like `wasi-api-tools`.
42+
43+
## The road ahead
44+
45+
Additional breakout sessions brought together smaller groups for focused discussions on topics including:
46+
47+
* Documentation
48+
* Bounding WASI
49+
* `shared-everything` linking in guest toolchains
50+
* Approaches to the `wasi-nn` and `wasi-sql` proposals
51+
* A potential `wasi-TLS/SSL` proposal
52+
* Diving deeper into async
53+
* Debugging Wasmtime
54+
* Diving deeper into host plugins
55+
56+
Among the many important conclusions reached on Day 2, the group decided to adopt a “tick tock” development pattern wherein feature development cycles (like the road to WASI 0.2.1) will be followed by a stabilization cycle, marking a strong commitment to ongoing stability and improvement to developer experience.
57+
58+
As the WebAssembly ecosystem enters a new era of enhanced portability and interoperability after WASI 0.2, the Bytecode Alliance is dedicated to making it as easy as possible for more developers to get involved. If you have questions or ideas, [join our Zulip chat](https://bytecodealliance.zulipchat.com/) to be part of the conversation.

0 commit comments

Comments
 (0)