1# Tiers of Support in Wasmtime
2
3Wasmtime's support for platforms and features can be distinguished with three
4different tiers of support. The description of these tiers are intended to be
5inspired by the [Rust compiler's support tiers for
6targets](https://doc.rust-lang.org/rustc/target-tier-policy.html) but are
7additionally tailored for Wasmtime. Wasmtime's tiered support additionally
8applies not only to platforms/targets themselves but additionally features
9implemented within Wasmtime itself.
10
11The purpose of this document is to provide a means by which to evaluate the
12inclusion of new features and support for existing features within Wasmtime.
13This should not be used to "lawyer" a change into Wasmtime on a precise
14technical detail or similar since this document is itself not 100% precise and
15will change over time.
16
17## Current Tier Status
18
19For explanations of what each tier means see below.
20
21#### Tier 1
22
23| Category             | Description                                |
24|----------------------|--------------------------------------------|
25| Target               | `x86_64-apple-darwin`                      |
26| Target               | `x86_64-pc-windows-msvc`                   |
27| Target               | `x86_64-unknown-linux-gnu`                 |
28| Compiler             | Cranelift [^support]                       |
29| Compiler             | Winch [^support]                           |
30| WebAssembly Proposal | [`mutable-globals`]                        |
31| WebAssembly Proposal | [`sign-extension-ops`]                     |
32| WebAssembly Proposal | [`nontrapping-float-to-int-conversion`]    |
33| WebAssembly Proposal | [`multi-value`]                            |
34| WebAssembly Proposal | [`bulk-memory`]                            |
35| WebAssembly Proposal | [`reference-types`]                        |
36| WebAssembly Proposal | [`simd`]                                   |
37| WebAssembly Proposal | [`component-model`]                        |
38| WebAssembly Proposal | [`relaxed-simd`]                           |
39| WebAssembly Proposal | [`multi-memory`]                           |
40| WebAssembly Proposal | [`tail-call`]                              |
41| WebAssembly Proposal | [`extended-const`]                         |
42| WebAssembly Proposal | [`memory64`]                               |
43| WASI Proposal        | [`wasi-io`]                                |
44| WASI Proposal        | [`wasi-clocks`]                            |
45| WASI Proposal        | [`wasi-filesystem`]                        |
46| WASI Proposal        | [`wasi-random`]                            |
47| WASI Proposal        | [`wasi-sockets`]                           |
48| WASI Proposal        | [`wasi-http`]                              |
49| WASI Proposal        | `wasi_snapshot_preview1`                   |
50| WASI Proposal        | `wasi_unstable`                            |
51| Embedding API        | Rust                                       |
52| Embedding API        | C                                          |
53
54[`mutable-globals`]: https://github.com/WebAssembly/mutable-global/blob/master/proposals/mutable-global/Overview.md
55[`sign-extension-ops`]: https://github.com/WebAssembly/spec/blob/master/proposals/sign-extension-ops/Overview.md
56[`nontrapping-float-to-int-conversion`]: https://github.com/WebAssembly/spec/blob/master/proposals/nontrapping-float-to-int-conversion/Overview.md
57[`multi-value`]: https://github.com/WebAssembly/spec/blob/master/proposals/multi-value/Overview.md
58[`bulk-memory`]: https://github.com/WebAssembly/bulk-memory-operations/blob/master/proposals/bulk-memory-operations/Overview.md
59[`extended-const`]: https://github.com/WebAssembly/extended-const
60[`reference-types`]: https://github.com/WebAssembly/reference-types/blob/master/proposals/reference-types/Overview.md
61[`simd`]: https://github.com/WebAssembly/simd/blob/master/proposals/simd/SIMD.md
62[`wasi-clocks`]: https://github.com/WebAssembly/wasi-clocks
63[`wasi-filesystem`]: https://github.com/WebAssembly/wasi-filesystem
64[`wasi-io`]: https://github.com/WebAssembly/wasi-io
65[`wasi-random`]: https://github.com/WebAssembly/wasi-random
66[`wasi-sockets`]: https://github.com/WebAssembly/wasi-sockets
67[`wasi-http`]: https://github.com/WebAssembly/wasi-http
68[`tail-call`]: https://github.com/WebAssembly/tail-call/blob/main/proposals/tail-call/Overview.md
69
70[^support]: Compiler support is further broken down [below](#compiler-support)
71  into finer-grained target/wasm proposal combinations. Compilers are not
72  required to support the full matrix of all tier 1 targets/proposals.
73
74#### Tier 2
75
76| Category             | Description                | Missing Tier 1 Requirements |
77|----------------------|----------------------------|-----------------------------|
78| Target               | `aarch64-unknown-linux-gnu`| Continuous fuzzing          |
79| Target               | `aarch64-apple-darwin`     | Continuous fuzzing          |
80| Target               | `s390x-unknown-linux-gnu`  | Continuous fuzzing          |
81| Target               | `x86_64-pc-windows-gnu`    | Clear owner of the target   |
82| Target               | Support for `#![no_std]`   | Support beyond CI checks    |
83| WebAssembly Proposal | [`custom-page-sizes`]      | Unstable wasm proposal      |
84| WebAssembly Proposal | [`exception-handling`]     | fuzzing, dependence on GC   |
85| WebAssembly Proposal | [`function-references`]    | production quality          |
86| WebAssembly Proposal | [`gc`]                     | production quality          |
87| WebAssembly Proposal | [`threads`]                | fuzzing, API quality        |
88| WebAssembly Proposal | [`wide-arithmetic`]        | Unstable wasm proposal      |
89| Execution Backend    | Pulley                     | More time fuzzing/baking    |
90| Embedding API        | C++                        | Full-time maintainer        |
91
92[`memory64`]: https://github.com/WebAssembly/memory64/blob/master/proposals/memory64/Overview.md
93[`custom-page-sizes`]: https://github.com/WebAssembly/custom-page-sizes
94[`multi-memory`]: https://github.com/WebAssembly/multi-memory/blob/master/proposals/multi-memory/Overview.md
95[`threads`]: https://github.com/WebAssembly/threads
96[`component-model`]: https://github.com/WebAssembly/component-model/blob/main/design/mvp/Explainer.md
97[`relaxed-simd`]: https://github.com/WebAssembly/relaxed-simd/blob/main/proposals/relaxed-simd/Overview.md
98[`function-references`]: https://github.com/WebAssembly/function-references/blob/main/proposals/function-references/Overview.md
99[`wide-arithmetic`]: https://github.com/WebAssembly/wide-arithmetic/blob/main/proposals/wide-arithmetic/Overview.md
100[`exception-handling`]: https://github.com/WebAssembly/exception-handling
101[`stack-switching`]: https://github.com/WebAssembly/stack-switching
102
103#### Tier 3
104
105| Category             | Description                       | Missing Tier 2 Requirements |
106|----------------------|-----------------------------------|-----------------------------|
107| Target               | `aarch64-apple-ios`               | CI testing, full-time maintainer |
108| Target               | `aarch64-linux-android`           | CI testing, full-time maintainer |
109| Target               | `aarch64-pc-windows-msvc`         | CI testing, full-time maintainer |
110| Target               | `aarch64-unknown-linux-musl` [^4] | CI testing, full-time maintainer |
111| Target               | `armv7-unknown-linux-gnueabihf`   | full-time maintainer |
112| Target               | `i686-pc-windows-msvc`            | CI testing, full-time maintainer |
113| Target               | `i686-unknown-linux-gnu`          | full-time maintainer |
114| Target               | `powerpc64le-unknown-linux-gnu`   | CI testing, full-time maintainer |
115| Target               | `riscv32imac-unknown-none-elf`[^5]| CI testing, full-time maintainer |
116| Target               | `riscv64gc-unknown-linux-gnu`     | full-time maintainer        |
117| Target               | `wasm32-wasip1` [^3]              | Supported but not tested    |
118| Target               | `x86_64-linux-android`            | CI testing, full-time maintainer |
119| Target               | `x86_64-unknown-freebsd`          | CI testing, full-time maintainer |
120| Target               | `x86_64-unknown-illumos`          | CI testing, full-time maintainer |
121| Target               | `x86_64-unknown-linux-musl` [^4]  | CI testing, full-time maintainer |
122| Target               | `x86_64-unknown-none` [^5]        | CI testing, full-time maintainer |
123| WASI Proposal        | [`wasi-nn`]                       | More expansive CI testing   |
124| WASI Proposal        | [`wasi-threads`]                  | More CI, unstable proposal  |
125| WASI Proposal        | [`wasi-config`]                   | unstable proposal           |
126| WASI Proposal        | [`wasi-keyvalue`]                 | unstable proposal           |
127| WASI Proposal        | [`wasi-tls`]                      | unstable proposal           |
128| *misc*               | Non-Wasmtime Cranelift usage [^1] | CI testing, full-time maintainer |
129| *misc*               | DWARF debugging [^2]              | CI testing, full-time maintainer, improved quality |
130
131[`wasi-nn`]: https://github.com/WebAssembly/wasi-nn
132[`wasi-threads`]: https://github.com/WebAssembly/wasi-threads
133[`wasi-config`]: https://github.com/WebAssembly/wasi-config
134[`wasi-keyvalue`]: https://github.com/WebAssembly/wasi-keyvalue
135[`wasi-tls`]: https://github.com/WebAssembly/wasi-tls
136[`gc`]: https://github.com/WebAssembly/gc
137
138[^1]: This is intended to encompass features that Cranelift supports as a
139general-purpose code generator such as integer value types other than `i32` and
140`i64`, non-Wasmtime calling conventions, code model settings, relocation
141restrictions, etc. These features aren't covered by Wasmtime's usage of
142Cranelift because the WebAssembly instruction set doesn't leverage them. This
143means that they receive far less testing and fuzzing than the parts of Cranelift
144exercised by Wasmtime.
145
146[^2]: Currently there is no active maintainer of DWARF debugging support and
147support is currently best-effort. Additionally there are known shortcomings
148and bugs. At this time there's no developer time to improve the situation here
149as well.
150
151[^3]: Wasmtime's `cranelift` and `winch` features can be compiled to WebAssembly
152but not the `runtime` feature at this time. This means that
153Wasmtime-compiled-to-wasm can itself compile wasm but cannot execute wasm.
154
155[^4]: Binary artifacts for MUSL are dynamically linked, not statically
156linked, meaning that they are not suitable for "run on any linux distribution"
157style use cases. Wasmtime does not have static binary artifacts at this time and
158that will require building from source.
159
160[^5]: Rust targets that are `#![no_std]` don't support the entire feature set of
161Wasmtime. For example the `threads` Cargo feature requires the standard library.
162For more information see the [`no_std` documentation][nostd]. Additionally these
163targets are sound in the presence of multiple threads but will panic on
164contention of data structures. If you're doing multithreaded things in `no_std`
165please file an issue so we can help solve your use case.
166
167[nostd]: ./stability-platform-support.md
168
169#### Unsupported features and platforms
170
171While this is not an exhaustive list, Wasmtime does not currently have support
172for the following features. Note that this is intended to document Wasmtime's
173current state and does not mean Wasmtime does not want to ever support these
174features; rather design discussion and PRs are welcome for many of the below
175features to figure out how best to implement them and at least move them to Tier
1763 above.
177
178* Target: [AArch64 FreeBSD](https://github.com/bytecodealliance/wasmtime/issues/5499)
179* Target: [NetBSD/OpenBSD](https://github.com/bytecodealliance/wasmtime/issues/6962)
180* Cranelift Target: [i686 (32-bit Intel targets)](https://github.com/bytecodealliance/wasmtime/issues/1980)
181* Cranelift Target: ARM 32-bit
182* Cranelift Target: MIPS
183* Cranelift Target: SPARC
184* Cranelift Target: PowerPC
185* Cranelift Target: RISC-V 32-bit
186* WebAssembly Proposals: see [documentation here](./stability-wasm-proposals.md)
187* [WASI proposal: `proxy-wasm`](https://github.com/proxy-wasm/spec)
188* [WASI proposal: `wasi-blob-store`](https://github.com/WebAssembly/wasi-blob-store)
189* [WASI proposal: `wasi-crypto`](https://github.com/WebAssembly/wasi-crypto)
190* [WASI proposal: `wasi-data`](https://github.com/WebAssembly/wasi-data)
191* [WASI proposal: `wasi-distributed-lock-service`](https://github.com/WebAssembly/wasi-distributed-lock-service)
192* [WASI proposal: `wasi-grpc`](https://github.com/WebAssembly/wasi-grpc)
193* [WASI proposal: `wasi-message-queue`](https://github.com/WebAssembly/wasi-message-queue)
194* [WASI proposal: `wasi-parallel`](https://github.com/WebAssembly/wasi-parallel)
195* [WASI proposal: `wasi-pubsub`](https://github.com/WebAssembly/wasi-pubsub)
196* [WASI proposal: `wasi-sql`](https://github.com/WebAssembly/wasi-sql)
197* [WASI proposal: `wasi-url`](https://github.com/WebAssembly/wasi-url)
198
199#### Compiler Support
200
201Compiler backends of Wasmtime, at this time Cranelift and Winch, are further
202refined in the below table in their support for various architectures and
203WebAssembly features. Tier 1 WebAssembly feature are required to be supported by
204at least one compiler on all Tier 1 targets, and similarly for Tier 2 features
205and so on.  Note that architecture here is independent of OS, meaning that
206support is uniform across Wasmtime's supported target for each tier. The legend
207here is:
208
209* ✅ - fully supported
210* �� - work-in-progress
211* ❌ - not supported yet
212
213##### x86\_64
214
215| Feature                                 | Cranelift | Winch  |
216|-----------------------------------------|-----------|--------|
217| [`mutable-globals`]                     | ✅        | ✅     |
218| [`sign-extension-ops`]                  | ✅        | ✅     |
219| [`nontrapping-float-to-int-conversion`] | ✅        | ✅     |
220| [`multi-value`]                         | ✅        | ✅     |
221| [`bulk-memory`]                         | ✅        | ✅     |
222| [`reference-types`]                     | ✅        | ❌[^a] |
223| [`simd`]                                | ✅        | ✅     |
224| [`component-model`]                     | ✅        | ✅     |
225| [`relaxed-simd`]                        | ✅        | ❌     |
226| [`multi-memory`]                        | ✅        | ✅     |
227| [`threads`]                             | ✅        | ✅     |
228| [`tail-call`]                           | ✅        | ❌     |
229| [`extended-const`]                      | ✅        | ✅     |
230| [`memory64`]                            | ✅        | ✅     |
231| [`function-references`]                 | ✅        | ❌     |
232| [`gc`]                                  | ✅        | ❌     |
233| [`wide-arithmetic`]                     | ✅        | ✅     |
234| [`custom-page-sizes`]                   | ✅        | ✅     |
235| [`exception-handling`]                  | ✅        | ❌     |
236| [`stack-switching`]                     | ��        | ❌     |
237
238##### aarch64
239
240| Feature                                 | Cranelift | Winch[^c] |
241|-----------------------------------------|-----------|-----------|
242| [`mutable-globals`]                     | ✅        | ✅        |
243| [`sign-extension-ops`]                  | ✅        | ✅        |
244| [`nontrapping-float-to-int-conversion`] | ✅        | ✅        |
245| [`multi-value`]                         | ✅        | ✅        |
246| [`bulk-memory`]                         | ✅        | ✅        |
247| [`reference-types`]                     | ✅        | ❌[^a]    |
248| [`simd`]                                | ✅        | ❌        |
249| [`component-model`]                     | ✅        | ✅        |
250| [`relaxed-simd`]                        | ✅        | ❌        |
251| [`multi-memory`]                        | ✅        | ✅        |
252| [`threads`]                             | ✅        | ❌        |
253| [`tail-call`]                           | ✅        | ❌        |
254| [`extended-const`]                      | ✅        | ✅        |
255| [`memory64`]                            | ✅        | ✅        |
256| [`function-references`]                 | ✅        | ❌        |
257| [`gc`]                                  | ✅        | ❌        |
258| [`wide-arithmetic`]                     | ✅        | ❌        |
259| [`custom-page-sizes`]                   | ✅        | ✅        |
260| [`exception-handling`]                  | ✅        | ❌        |
261| [`stack-switching`]                     | ❌        | ❌        |
262
263##### s390x
264
265| Feature                                 | Cranelift | Winch  |
266|-----------------------------------------|-----------|--------|
267| [`mutable-globals`]                     | ✅        | ❌     |
268| [`sign-extension-ops`]                  | ✅        | ❌     |
269| [`nontrapping-float-to-int-conversion`] | ✅        | ❌     |
270| [`multi-value`]                         | ✅        | ❌     |
271| [`bulk-memory`]                         | ✅        | ❌     |
272| [`reference-types`]                     | ✅        | ❌[^a] |
273| [`simd`]                                | ✅        | ❌     |
274| [`component-model`]                     | ✅        | ❌     |
275| [`relaxed-simd`]                        | ✅        | ❌     |
276| [`multi-memory`]                        | ✅        | ❌     |
277| [`threads`]                             | ✅        | ❌     |
278| [`tail-call`]                           | ✅        | ❌     |
279| [`extended-const`]                      | ✅        | ❌     |
280| [`memory64`]                            | ✅        | ❌     |
281| [`function-references`]                 | ✅        | ❌     |
282| [`gc`]                                  | ✅        | ❌     |
283| [`wide-arithmetic`]                     | ✅        | ❌     |
284| [`custom-page-sizes`]                   | ✅        | ❌     |
285| [`exception-handling`]                  | ✅        | ❌     |
286| [`stack-switching`]                     | ❌        | ❌     |
287
288##### riscv64
289
290| Feature                                 | Cranelift | Winch  |
291|-----------------------------------------|-----------|--------|
292| [`mutable-globals`]                     | ✅        | ❌     |
293| [`sign-extension-ops`]                  | ✅        | ❌     |
294| [`nontrapping-float-to-int-conversion`] | ✅        | ❌     |
295| [`multi-value`]                         | ✅        | ❌     |
296| [`bulk-memory`]                         | ✅        | ❌     |
297| [`reference-types`]                     | ✅        | ❌[^a] |
298| [`simd`]                                | ✅        | ❌     |
299| [`component-model`]                     | ✅        | ❌     |
300| [`relaxed-simd`]                        | ✅        | ❌     |
301| [`multi-memory`]                        | ✅        | ❌     |
302| [`threads`]                             | ✅        | ❌     |
303| [`tail-call`]                           | ✅        | ❌     |
304| [`extended-const`]                      | ✅        | ❌     |
305| [`memory64`]                            | ✅        | ❌     |
306| [`function-references`]                 | ✅        | ❌     |
307| [`gc`]                                  | ✅        | ❌     |
308| [`wide-arithmetic`]                     | ✅        | ❌     |
309| [`custom-page-sizes`]                   | ✅        | ❌     |
310| [`exception-handling`]                  | ✅        | ❌     |
311| [`stack-switching`]                     | ❌        | ❌     |
312
313##### Pulley
314
315Note that the pulley "architecture" is a stand-in for Wasmtime's baseline
316support for all platforms. This is how Wasmtime's interpreter works and this is
317intended to work on all platforms. The columns here are for compiler support for
318emitting Pulley bytecode.
319
320| Feature                                 | Cranelift | Winch  |
321|-----------------------------------------|-----------|--------|
322| [`mutable-globals`]                     | ✅        | ❌     |
323| [`sign-extension-ops`]                  | ✅        | ❌     |
324| [`nontrapping-float-to-int-conversion`] | ✅        | ❌     |
325| [`multi-value`]                         | ✅        | ❌     |
326| [`bulk-memory`]                         | ✅        | ❌     |
327| [`reference-types`]                     | ✅        | ❌[^a] |
328| [`simd`]                                | ✅        | ❌     |
329| [`component-model`]                     | ✅        | ❌     |
330| [`relaxed-simd`]                        | ✅        | ❌     |
331| [`multi-memory`]                        | ✅        | ❌     |
332| [`threads`]                             | ❌[^b]    | ❌     |
333| [`tail-call`]                           | ✅        | ❌     |
334| [`extended-const`]                      | ✅        | ❌     |
335| [`memory64`]                            | ✅        | ❌     |
336| [`function-references`]                 | ✅        | ❌     |
337| [`gc`]                                  | ✅        | ❌     |
338| [`wide-arithmetic`]                     | ✅        | ❌     |
339| [`custom-page-sizes`]                   | ✅        | ❌     |
340| [`exception-handling`]                  | ✅        | ❌     |
341| [`stack-switching`]                     | ❌        | ❌     |
342
343[^a]: Winch supports some features of the [`reference-types`] proposal such as
344  the change to support multiple tables and LEB-encoding table indices in
345  instructions, but it does not support GC types such as `externref` or the
346  new table opcodes in the [`reference-types`] proposal.
347[^b]: Pulley does not support the [`threads`] proposal because there is no known
348  safe way to implement this with Rust's memory model.
349[^c]: Winch's support for aarch64 is complete for Core Wasm.
350
351## Tier Details
352
353Wasmtime's precise definitions of tiers are not guaranteed to be constant over
354time, so these descriptions are likely to change over time. Tier 1 is classified
355as the highest level of support, confidence, and correctness for a component.
356Each tier additionally encompasses all the guarantees of previous tiers.
357
358Features classified under a particular tier may already meet the criteria for
359later tiers as well. In situations like this it's not intended to use these
360guidelines to justify removal of a feature at any one point in time. Guidance is
361provided here for phasing out unmaintained features but it should be clear under
362what circumstances work "can be avoided" for each tier.
363
364#### Tier 3 - Not Production Ready
365
366The general idea behind Tier 3 is that this is the baseline for inclusion of
367code into the Wasmtime project. This is not intended to be a catch-all "if a
368patch is sent it will be merged" tier. Instead the goal of this tier is to
369outline what is expected of contributors adding new features to Wasmtime which
370might be experimental at the time of addition. This is intentionally not a
371relaxed tier of restrictions but already implies a significant commitment of
372effort to a feature being included within Wasmtime.
373
374Tier 3 features include:
375
376* Inclusion of a feature does not impose unnecessary maintenance overhead on
377  other components/features. Some examples of additions to Wasmtime which would
378  not be accepted are:
379
380  * An experimental feature doubles the time of CI for all PRs.
381  * A change which makes it significantly more difficult to architecturally
382    change Wasmtime's internal implementation.
383  * A change which makes building Wasmtime more difficult for unrelated
384    developers.
385
386  In general Tier 3 features are off-by-default at compile time but still
387  tested-by-default on CI.
388
389* New features of Wasmtime cannot have major known bugs at the time of
390  inclusion. Landing a feature in Wasmtime requires the feature to be correct
391  and bug-free as best can be evaluated at the time of inclusion. Inevitably
392  bugs will be found and that's ok, but anything identified during review must
393  be addressed.
394
395* Code included into the Wasmtime project must be of an acceptable level of
396  quality relative to the rest of the code in Wasmtime.
397
398* There must be a path to a feature being finished at the time of inclusion.
399  Adding a new backend to Cranelift for example is a significant undertaking
400  which may not be able to be done in a single PR. Partial implementations of a
401  feature are acceptable so long as there's a clear path forward and schedule
402  for completing the feature.
403
404* New components in Wasmtime must have a clearly identified owner who is willing
405  to be "on the hook" for review, updates to the internals of Wasmtime, etc. For
406  example a new backend in Cranelift would need to have a maintainer who is
407  willing to respond to changes in Cranelift's interfaces and the needs of
408  Wasmtime.
409
410This baseline level of support notably does not require any degree of testing,
411fuzzing, or verification. As a result components classified as Tier 3 are
412generally not production-ready as they have not been battle-tested much.
413
414Features classified as Tier 3 may be disabled in CI or removed from the
415repository as well. If a Tier 3 feature is preventing development of other
416features then the owner will be notified. If no response is heard from within a
417week then the feature will be disabled in CI. If no further response happens
418for a month then the feature may be removed from the repository.
419
420#### Tier 2 - Almost Production Ready
421
422This tier is meant to encompass features and components of Wasmtime which are
423well-maintained, tested well, but don't necessarily meet the stringent criteria
424for Tier 1. Features in this category may already be "production ready" and safe
425to use.
426
427Tier 2 features, organized by category, include:
428
429* **Target**
430  * Tests are run in CI for this platform with a compiler, either
431    directly or via emulation. This ensures that all changes to Wasmtime are
432    tested against this target, and this additionally means that all applicable
433    Tier 1/2 features are tested on this target in CI.
434
435  * Complete implementations for anything that's part of Tier 1. For
436    example all Tier 2 targets must implement all of the applicable Tier 1
437    WebAssembly proposals, and all Tier 2 features must be implemented on all
438    Tier 1 targets.
439
440* **WebAssembly Proposal**
441  * Must be fully tested on CI. This means that it must pass tests on all
442    applicable Tier 1 and Tier 2 target/compiler combos. Note that only one
443    compiler is required to implement the feature at this time, but it must run,
444    via some compiler, on all targets.
445  * The upstream WebAssembly proposal is stage 3+.
446
447* **WASI Proposal**
448  * Similar to WebAssembly proposals this must be fully tested on CI. WASI
449    proposals at Tier 2 must support all Tier 1/2 targets, however.
450
451* **Maintenance**
452  * All existing developers are expected to handle minor changes which affect
453    Tier 2 components. For example if Cranelift's interfaces change then the
454    developer changing the interface is expected to handle the changes for Tier
455    2 architectures so long as the affected part is relatively minor.  Note that
456    if a more substantial change is required to a Tier 2 component then that
457        falls under the next bullet.
458
459  * Maintainers of a Tier 2 feature are responsive (reply to requests within a
460    week) and are available to accommodate architectural changes that affect
461    their component. For example more expansive work beyond the previous bullet
462    where contributors can't easily handle changes are expected to be guided or
463    otherwise implemented by Tier 2 maintainers.
464
465  * Major changes otherwise requiring an RFC that affect Tier 2 components are
466    required to consult Tier 2 maintainers in the course of the RFC. Major
467    changes to Tier 2 components themselves do not require an RFC, however.
468
469Features at this tier generally are not turned off or disabled for very long.
470Maintainers are already required to be responsive to changes and will be
471notified of any unrelated change which affects their component. It's recommended
472that if a component breaks for one reason or another due to an unrelated change
473that the maintainer either contributes to the PR-in-progress or otherwise has a
474schedule for the implementation of the feature.
475
476#### Tier 1 - Production Ready
477
478This tier is intended to be the highest level of support in Wasmtime for any
479particular feature, indicating that it is suitable for production environments.
480This conveys a high level of confidence in the Wasmtime project about the
481specified features.
482
483Tier 1 features, broken down by category, include:
484
485* **WebAssembly Proposal**
486  * Continuous fuzzing is required for at least one target. This means that any
487    WebAssembly proposal must have support in the `wasm-smith` crate and
488    existing fuzz targets must be running and exercising the new code paths.
489    Where possible differential fuzzing should also be implemented to compare
490    results with other implementations.
491
492  * Must meet [all stabilization requirements](./stability-wasm-proposals.md).
493
494* **Target**
495  * A target's architecture must be continuously fuzzing via at least one
496    Rust target. For example currently there are three x86\_64 targets that are
497    considered Tier 1 but only `x86_64-unknown-linux-gnu` is fuzzed.
498
499* **Compiler**
500  * A compiler, like a target, must be continuously fuzzed on at least one
501    target to be considered Tier 1 for a particular target.
502
503* **Maintenance**
504  * CVEs and security releases will be performed as necessary for any bugs found
505    in features and targets.
506
507  * Major changes affecting this component may require help from maintainers
508    with specialized expertise, but otherwise it should be reasonable to expect
509    most Wasmtime developers to be able to maintain Tier 1 features.
510
511  * Major changes affecting Tier 1 features require an RFC and prior agreement
512    on the change before an implementation is committed.
513
514A major inclusion point for this tier is intended to be the continuous fuzzing
515of Wasmtime. This implies a significant commitment of resources for fixing
516issues, hardware to execute Wasmtime, etc. Additionally this tier comes with the
517broadest expectation of "burden on everyone else" in terms of what changes
518everyone is generally expected to handle.
519
520Features classified as Tier 1 are rarely, if ever, turned off or removed from
521Wasmtime.
522