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