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

Target tier policy #2803

Merged
merged 166 commits into from
Apr 29, 2021
Merged
Changes from 1 commit
Commits
Show all changes
166 commits
Select commit Hold shift + click to select a range
14a9c4f
Target tier policy
joshtriplett Nov 4, 2019
2eb8f5f
Document where we should post the official target tier policy
joshtriplett Jul 11, 2020
58240cf
Expand discussion of how to track and reach target maintainers
joshtriplett Jul 11, 2020
c883f5d
s/ports/targets/
joshtriplett Jul 11, 2020
a4e88d8
Clarify "broader ecosystem"
joshtriplett Jul 11, 2020
13da5e1
Cover targets leaving portions of the standard library `unimplemented…
joshtriplett Jul 11, 2020
b3152e8
Add a note about the extent of tool support for targets
joshtriplett Jul 11, 2020
178b102
Consistently use "target" rather than "platform"
joshtriplett Jul 11, 2020
53628f8
Elaborate on "must not break any existing target"
joshtriplett Jul 11, 2020
f88d05a
Formatting improvements
joshtriplett Jul 11, 2020
43b4891
Discuss alternative means of handling team consensus
joshtriplett Jul 11, 2020
3a3b3f8
Explain subjective requirements like "substantial, widespread interest"
joshtriplett Jul 11, 2020
e52dac1
Rephrase link to platform support page, and provide link text
joshtriplett Jul 11, 2020
159dbf1
Clarify approval of CI-related requirements.
joshtriplett Jul 11, 2020
435cc9b
Update link to avoid redirect
joshtriplett Jul 11, 2020
5a37367
Drop unnecessary parentheses
joshtriplett Jul 11, 2020
d33d656
Move note about posting this policy out of the guide-level explanation
joshtriplett Jul 11, 2020
4a87994
Expand introduction for reference-level explanation
joshtriplett Jul 11, 2020
22424e4
Consistently use more precise language "may contact" for contacting t…
joshtriplett Jul 11, 2020
522d3a4
Make "at least 2 developers" a hard requirement for tier 2 targets
joshtriplett Jul 11, 2020
8b52472
Clarify that new tier 2 targets must cross-compile
joshtriplett Jul 11, 2020
ea1549c
More precise language: s/shall/must/
joshtriplett Jul 11, 2020
b30bb08
Explain that targets may be temporarily disabled in nightlies
joshtriplett Jul 11, 2020
cc7c1a5
Explicitly define terms like "target development team"
joshtriplett Jul 12, 2020
97620fa
Make it a hard requirement to document how to build and run tests
joshtriplett Jul 12, 2020
7ec7ff1
Define "CI" on first use
joshtriplett Jul 12, 2020
4dcf8d8
Note up front that the tier requirements are cumulative
joshtriplett Jul 12, 2020
7d41f4e
Note up front about approving teams and subjective judgment
joshtriplett Jul 12, 2020
395f5f1
Discuss baseline expectations for CPU features, OS versions/features,…
joshtriplett Jul 12, 2020
523c8ea
Add a (subjective) requirement to not disable an excessive number of …
joshtriplett Jul 12, 2020
c32f79a
Add a tier 1 requirement discussing implementation of the standard li…
joshtriplett Jul 12, 2020
1b28be0
Hard requirement to discuss changes to shared code with the compiler …
joshtriplett Jul 12, 2020
29c6c5e
Meet the requirements before proposing the target
joshtriplett Jul 12, 2020
39afc67
Clarifications about baseline expectations
joshtriplett Jul 12, 2020
5f839e3
Tier 2 targets may be required to pass basic smoke tests
joshtriplett Jul 12, 2020
2fdcfe1
Move approving teams out of the bullet lists of requirements
joshtriplett Jul 12, 2020
3c0dc66
Move up the note about human judgment and "spirit of the requirements"
joshtriplett Jul 12, 2020
a067660
Update summary. Remove "objective". Actually summarize the RFC.
joshtriplett Jul 12, 2020
e43096a
Add precedents for tiered target support
joshtriplett Jul 12, 2020
2ca6bf3
Elaborate on slow builds
joshtriplett Jul 12, 2020
f7f4c9e
Simplify explanation of building in CI
joshtriplett Jul 12, 2020
8884f78
Reword and unify notes about where this policy will live
joshtriplett Jul 12, 2020
bf9aa88
Expand future possibilities
joshtriplett Jul 12, 2020
da57e47
Clarify requirements to provide build and test documentation
joshtriplett Jul 12, 2020
1e98267
Add a missing comma
joshtriplett Jul 12, 2020
0ccaaff
Move demotion/removal discussion out of bullet lists
joshtriplett Jul 12, 2020
d1f08f9
Note that tier 1 direct removal is highly unlikely
joshtriplett Jul 12, 2020
571ab02
Minor wording clarification about naming consistency
joshtriplett Jul 12, 2020
1c4bc2a
Change "on call" to "available"
joshtriplett Jul 12, 2020
e386c26
Clean up wording to be less colloquial
joshtriplett Jul 12, 2020
d2e86f5
Relocate a note about the target development team
joshtriplett Jul 12, 2020
c6dcb4e
Alternatives: concrete time requirements before introduction/promotion
joshtriplett Jul 12, 2020
ebdc7f0
Unify terminology towards "target maintainers" instead of "target dev…
joshtriplett Jul 12, 2020
82f711b
Clarify "reviewers of pull requests"
joshtriplett Jul 12, 2020
2290377
Consistently use "must" for requirements
joshtriplett Jul 12, 2020
9ef6e86
Specify use of must/should/may language
joshtriplett Jul 12, 2020
2889419
Even a tier 3 target should have target maintainers on record
joshtriplett Jul 12, 2020
dcb6344
Require a compiler-team reviewer for tier 3, not just any reviewer
joshtriplett Jul 12, 2020
5fc80f8
Drop mention of appeals
joshtriplett Jul 12, 2020
d6458f6
Fix expansion of MCP, and reference it in tier 2 as well
joshtriplett Jul 12, 2020
5b4393b
Suggest a full RFC for tier 1 target proposals
joshtriplett Jul 12, 2020
da1d1cf
Allow for infra reporting consensus via a team member
joshtriplett Jul 12, 2020
3b6015c
Simplify some approval-related language
joshtriplett Jul 13, 2020
5ed4ebc
Clarify what "as much of the standard library as possible" means
joshtriplett Jul 13, 2020
d732684
C calling convention
joshtriplett Jul 13, 2020
1ff321e
Add legal and licensing requirements
joshtriplett Jul 13, 2020
4e5acef
Reword summary of tiers for clarity
joshtriplett Jul 13, 2020
751f396
A target should spend a reasonable amount of time at each tier
joshtriplett Jul 17, 2020
027542f
Rephrase guidance on a reasonable amount of time
joshtriplett Jul 17, 2020
21347b0
Clarify tier 2 requirement: niche targets are fine
joshtriplett Jul 17, 2020
07c4f35
Document requirements for providing ways to run the target
joshtriplett Sep 29, 2020
4572c26
Document requirement to not have safety-related deficiencies
joshtriplett Sep 29, 2020
8eb74fa
Wording tweak about tier 2 targets passing tests
joshtriplett Dec 14, 2020
f81e0fb
Update requirement about designated developers
joshtriplett Dec 14, 2020
c9c51f4
Add RFC PR link
joshtriplett Dec 14, 2020
444b6d8
Add note that targets require ongoing maintenance
joshtriplett Dec 14, 2020
a4aa114
Grammatical improvement
joshtriplett Dec 14, 2020
4c70962
Encourage use of consistent naming conventions
joshtriplett Dec 14, 2020
f9ac528
Allow tier 3 code to omit *or* stub out code, as appropriate
joshtriplett Dec 14, 2020
d7a209d
Make sure the policy doesn't stifle discussions about tier 3 targets
joshtriplett Dec 14, 2020
76b0684
Don't specifically refer to `unimplemented!()`
joshtriplett Dec 14, 2020
900a5b2
Grammatical tweak: remove a "the"
joshtriplett Dec 14, 2020
1d967a7
Add some samples of "onerous" license terms
joshtriplett Dec 14, 2020
837a787
Add note about future legal review processes
joshtriplett Dec 14, 2020
bb708a0
Update some git branch names
joshtriplett Dec 14, 2020
989776e
Link to Debian archive criteria source
joshtriplett Dec 14, 2020
e9154cc
Substantial expansion to cover host tools separately
joshtriplett Dec 14, 2020
90f1b79
Separate out host tool transition steps from requirements
joshtriplett Dec 14, 2020
df12647
Clarify a legal requirement
joshtriplett Dec 14, 2020
a0da271
Modify requirement for cross-compilation support
joshtriplett Dec 14, 2020
c430135
Avoid redundantly restating approving teams within host tools require…
joshtriplett Dec 14, 2020
aaad0e4
Wording tweak for host tools
joshtriplett Dec 14, 2020
2e97216
Targets and their tiers (including "with host tools") will be listed
joshtriplett Dec 14, 2020
e1be462
Clarification on target naming and disruption of renaming
joshtriplett Dec 14, 2020
ddbda1b
Move clarifiation of "onerous"
joshtriplett Dec 14, 2020
408614e
Add sample smoke test `./x.py test --no-run`
joshtriplett Dec 14, 2020
5247216
Mention target name ambiguity
joshtriplett Dec 14, 2020
d78eb1e
Clarify why naming is important even for a tier 3 target
joshtriplett Dec 14, 2020
d2fa76a
Mention the alternative possibility of renumbering tiers
joshtriplett Dec 14, 2020
f3ba93b
Simplify summary
joshtriplett Dec 14, 2020
0a424a6
Clarify summary of tier 3 targets
joshtriplett Dec 14, 2020
897c3e2
Clarify promotion timing requirements
joshtriplett Dec 14, 2020
3ceaa79
Timing of changes that might break targets
joshtriplett Dec 14, 2020
1d5a8fc
Elaborate a bit on co-evolving targets
joshtriplett Dec 14, 2020
f505fcd
Note that cross-compiling the testsuite is OK
joshtriplett Dec 14, 2020
220ce56
Mention "development platform" and "compilation target"
joshtriplett Dec 14, 2020
dc652a0
Clarify that demotion of a tier 1 target requires a full RFC
joshtriplett Dec 14, 2020
14948a0
Discussion demotion of tier 1 targets with host tools
joshtriplett Dec 14, 2020
b48aa51
Clarify that, for a demotion, a target must still meet the lower-tier…
joshtriplett Dec 14, 2020
a5c8469
Allow tier 1 targets to raise their baseline without a full RFC
joshtriplett Dec 14, 2020
2f7df80
Add some notes to help avoid conflicts of interest
joshtriplett Dec 14, 2020
bf3ddb6
Add expectations about emulation accuracy
joshtriplett Dec 14, 2020
0697637
Add further discussion and requirements regarding performance conside…
joshtriplett Dec 14, 2020
5558409
Document prior art for how to track and contact target maintainers
joshtriplett Mar 8, 2021
c996aea
Adjust language about alloc to avoid prescriptive policy about alloca…
joshtriplett Mar 8, 2021
4509ce9
Clarify requirements about signing, and apply it to all tier 1 targets
joshtriplett Mar 15, 2021
fcb6ce6
Minor rewording of references to requirements of other tiers
joshtriplett Mar 15, 2021
7a6261a
Improve clarity of tier 2 summary
joshtriplett Mar 19, 2021
d63374a
Provide some information about "host tools" when first mentioned
joshtriplett Mar 19, 2021
d1d29ec
Sync wording between the start of the guide-level and reference-level…
joshtriplett Mar 19, 2021
97ce961
Require documentation of limitations to appear in the target tier list
joshtriplett Mar 23, 2021
2d5a397
Fix typo ("of providing of")
joshtriplett Mar 23, 2021
d3f9f29
Slightly soften a "should"
joshtriplett Mar 23, 2021
a36998b
Document what happens if the compiler's safety properties broaden
joshtriplett Mar 23, 2021
e840d51
Demotion or removal will be communicated to the target maintainers
joshtriplett Mar 23, 2021
55d3c0c
Fix duplicated phrase
joshtriplett Mar 23, 2021
e60be23
Expand language about safety properties; narrow to soundness issues
joshtriplett Mar 23, 2021
86a25a4
Add requirements to not substantially raise the maintenance burden of CI
joshtriplett Mar 23, 2021
5bd47d1
Clarification on tier 1 with host tools as evaluated by the release team
joshtriplett Mar 23, 2021
10f3d18
Clarification on tier 1 as evaluated by the release team
joshtriplett Mar 23, 2021
7740056
Update tier 2 requirement about not blocking PRs to match tier 3 lang…
joshtriplett Mar 23, 2021
1df1714
Make requirements about unwanted messages more strict
joshtriplett Mar 23, 2021
0f25999
Add some subjectivity regarding communications of target demotion/rem…
joshtriplett Mar 23, 2021
afd1240
Allow for targets implementing std without having a full OS
joshtriplett Mar 23, 2021
f41e114
Clarify tier 3 requirement about breaking other tier 3 targets
joshtriplett Mar 23, 2021
39c73e8
Drop "new" as a qualifier for rules intended to apply to existing tar…
joshtriplett Mar 24, 2021
ba9d93e
Clarify recusal
joshtriplett Mar 24, 2021
d23c1ae
Minor wording tweaks in future possibilities
joshtriplett Mar 24, 2021
db9e8e6
Future possibilities: Document scope and potential communication impr…
joshtriplett Mar 24, 2021
be98dd6
Fix spacing
joshtriplett Mar 24, 2021
3350356
Allow for revocable agreements for signing keys
joshtriplett Mar 24, 2021
c174268
Require that signing processes be available to others as well
joshtriplett Mar 24, 2021
a870b01
Allow signing-related agreements to involve a nominal fee
joshtriplett Mar 24, 2021
65f5148
Drop "new" qualifier on requirement to allow developers to run their …
joshtriplett Mar 24, 2021
71ce094
Simplify language about developers running their own binaries
joshtriplett Mar 24, 2021
548de23
Ensure that developers can give binaries to others, as well
joshtriplett Mar 24, 2021
d6c6f1f
Document availability requirements for CI and non-CI resources
joshtriplett Mar 24, 2021
c1f669b
Expand target maintainer team size for tier 1
joshtriplett Mar 24, 2021
376adda
Change "their documentation" to just "documentation"
joshtriplett Mar 24, 2021
39e3299
Change "may" to "should" in note that we should audit existing targets
joshtriplett Mar 24, 2021
f21ed77
Expand text about auditing existing targets
joshtriplett Mar 24, 2021
f6d1a37
Change "long-term viability" to just "viability", and combine with "v…
joshtriplett Mar 24, 2021
d747f54
Expand discussion about documenting subjective requirements
joshtriplett Mar 24, 2021
919da1a
For communications, add "whether the target has been part of a stable…
joshtriplett Mar 24, 2021
8fb49e1
Add some discussion about target tier stability guarantees
joshtriplett Mar 24, 2021
40ed9f8
Make C interoperability a "must" at tier 2
joshtriplett Apr 5, 2021
c394f76
Add an exception allowing non-implementation of std in specific cases
joshtriplett Apr 6, 2021
da764cd
Add a missing "tier 3" qualifier on a tier 3 requirement
joshtriplett Apr 6, 2021
9f793b9
Clarify that infra is not personally responsible for signing legal ag…
joshtriplett Apr 7, 2021
8e3e9c3
Update URL for platform support page
joshtriplett Apr 7, 2021
0ee5875
Promotion/demotion doesn't typically affect past releases
joshtriplett Apr 7, 2021
bf5f44e
Qualify mentions of CI to include all components Rust's CI considers …
joshtriplett Apr 7, 2021
d13349e
Clarify the work associated with tier 2 and tier 1 targets
joshtriplett Apr 7, 2021
1979ced
Clarify use of issues to track requirements
joshtriplett Apr 14, 2021
ac31771
Document that raising baselines should be widely communicated
joshtriplett Apr 14, 2021
7c1b640
Don't hardcode the path to one source file in tidy
joshtriplett Apr 18, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
222 changes: 222 additions & 0 deletions text/0000-target-tier-policy.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,222 @@
- Feature Name: `target_tier_policy`
- Start Date: 2019-09-20
- RFC PR: [rust-lang/rfcs#0000](https://github.com/rust-lang/rfcs/pull/0000)
- Rust Issue: [rust-lang/rust#0000](https://github.com/rust-lang/rust/issues/0000)

# Summary
[summary]: #summary

We should have an official, objective policy for adding new (tier 3) targets,
joshtriplett marked this conversation as resolved.
Show resolved Hide resolved
and for raising targets to tier 2 (with rustup builds) or even tier 1.

# Motivation
[motivation]: #motivation

Rust developers regularly implement new targets in the Rust compiler, and
reviewers of pull requests for such new targets would like a clear, consistent
joshtriplett marked this conversation as resolved.
Show resolved Hide resolved
policy to cite for accepting or rejecting such targets. Currently, individual
reviewers do not know what overall policy to apply, and whether to apply solely
their own judgment or defer to a Rust governance team.

Rust developers regularly ask how they can raise an existing target to tier 2
(and in particular how they can make it available via rustup), and occasionally
ask what it would take to add a new tier 1 target. The Rust project has no
clear policy for target tiers. People not only don't know, they don't know who
to ask or where to start.

(See https://forge.rust-lang.org/platform-support.html for more information
joshtriplett marked this conversation as resolved.
Show resolved Hide resolved
about targets and tiers.)

# Guide-level explanation
[guide-level-explanation]: #guide-level-explanation

At a high level, the three tiers break down as follows:

- Tier 3 targets provide no guarantees of support.
- Tier 2 targets will always build, but may not pass tests.
- Tier 1 targets will always build and pass tests.
joshtriplett marked this conversation as resolved.
Show resolved Hide resolved

Adding a new tier 3 target imposes minimal requirements; we focus primarily on
avoiding disruption to other ongoing Rust development.

Tier 2 and tier 1 targets place work on the Rust community as a whole, to avoid
breaking the target. Thus, these tiers require commensurate efforts from the
maintainers of the target, to demonstrate value and to minimize any disruptions
to ongoing Rust development.

# Reference-level explanation
[reference-level-explanation]: #reference-level-explanation

joshtriplett marked this conversation as resolved.
Show resolved Hide resolved
Requirements for each tier:

## Tier 3 target policy

At this tier, the Rust project provides no official support for a target, so we
place minimal requirements on the introduction of targets.

- No central decision is required to add a new tier 3 target. Reviewers may
joshtriplett marked this conversation as resolved.
Show resolved Hide resolved
always use their own best judgment regarding the quality of work, and the
suitability of a target for the Rust project.
- If a reviewer wishes to consult a broader team for additional guidance, they
should contact the compiler team.
- If a proposed target or target-specific patch substantially changes code
shared with other targets (not just target-specific code), the reviewer
should consult the compiler team.
- If the proposer of a target wishes to appeal the rejection of a target, they
joshtriplett marked this conversation as resolved.
Show resolved Hide resolved
may contact the compiler team.
- Tier 3 targets must use naming consistent with any existing targets; for
instance, a target for a similar CPU or OS should not gratuitously use an
inconsistent name for that CPU or OS. Targets should normally use the same
names as used elsewhere in the broader ecosystem (such as in other
toolchains), unless they have a very good reason to diverge.
- Tier 3 targets may have unusual requirements to build or use, but must not
create legal issues for the Rust project or for developers who work on those
targets.
- Where possible, tier 3 targets may wish to provide documentation for the Rust
community for how to build and run tests for the platform, ideally using
emulation.
- Tier 3 targets must not impose burden on the authors of pull requests, or
other developers in the community, to maintain the target. In particular,
do not post comments (automated or manual) on a PR that suggests a block on
the PR based on the target. (A PR author may choose to help with a tier 3
target but is not required to.)
- Patches adding or updating tier 3 targets must not break any existing target.
joshtriplett marked this conversation as resolved.
Show resolved Hide resolved
- If a tier 3 target shows no signs of activity and has not built for some
time, and removing it would improve the quality of the Rust codebase, we may
post a PR to remove it; any such PR will be CCed to people who have
previously worked on the platform, to check potential interest.

## Tier 2 target policy
joshtriplett marked this conversation as resolved.
Show resolved Hide resolved

At this tier, the Rust project guarantees that a target builds, and will reject
patches that fail to build on a target. Thus, we place requirements that ensure
the target will not block forward progress of the Rust project.

- Any new tier 2 target requires compiler team approval based on these
requirements.
- In addition, the infrastructure team must approve the integration of the
target into CI, and the CI-related requirements. This review and approval
will typically take place in the PR adding the target to CI.
- A tier 2 target must have value to people other than its maintainers.
- Any new tier 2 target must have a designated team of developers on call to
consult on target-specific build-breaking issues, or if necessary to develop
target-specific language or library implementation details. (This team should
in almost all cases have at least 2 developers.)
joshtriplett marked this conversation as resolved.
Show resolved Hide resolved
- The target must not place undue burden on Rust developers not specifically
concerned with that target. Rust developers may be expected to not
gratuitously break a tier 2 target, but are not expected to become experts in
every tier 2 target, and are not expected to provide target-specific
implementations for every tier 2 target.
- Where possible, tier 2 targets should provide documentation for the Rust
community for how to build and run tests for the platform, ideally using
emulation.
- The target development team should not only fix target-specific issues, but
should use any such issue as an opportunity to educate the Rust community
about portability to their target, and enhance their documentation of the
target.
- The target must build reliably in CI.
- Building the target must not take substantially longer than other targets.
joshtriplett marked this conversation as resolved.
Show resolved Hide resolved
- Tier 2 targets must support building on the existing targets used for CI
joshtriplett marked this conversation as resolved.
Show resolved Hide resolved
infrastructure.
- Tier 2 targets must not impose burden on the authors of pull requests, or
joshtriplett marked this conversation as resolved.
Show resolved Hide resolved
other developers in the community, to ensure that tests pass for the target.
In particular, do not post comments (automated or manual) on a PR that
suggests a block on the PR based on tests failing for the target. (A PR
author must not break the build of a tier 2 target, but need not ensure the
tests pass for a tier 2 target, even if notified that they fail.)
joshtriplett marked this conversation as resolved.
Show resolved Hide resolved
- The target development team should regularly run the testsuite for the
target, and should fix any test failures in a reasonably timely fashion.
- A tier 2 target may be demoted or removed if it no longer meets these
requirements. Any proposal for demotion or removal will be CCed to people who
have previously worked on the platform, and will be communicated widely to
the Rust community before being dropped from a stable release.
joshtriplett marked this conversation as resolved.
Show resolved Hide resolved
- All tier 3 requirements apply.

Note: some tier 2 platforms additionally have binaries built to run on them as
a host (such as `rustc` and `cargo`). Such a platform must meet all the
requirements above, and must additionally get the compiler and infrastructure
team to approve the building of host tools.
joshtriplett marked this conversation as resolved.
Show resolved Hide resolved
joshtriplett marked this conversation as resolved.
Show resolved Hide resolved

## Tier 1 target policy

At this tier, the Rust project guarantees that a target builds and passes all
tests, and will reject patches that fail to build or pass the testsuite on a
target. We hold tier 1 targets to our highest standard of requirements.

- Any new tier 1 target requires compiler team approval based on these
requirements.
joshtriplett marked this conversation as resolved.
Show resolved Hide resolved
- In addition, the infrastructure team must approve the integration of the
joshtriplett marked this conversation as resolved.
Show resolved Hide resolved
target into CI, and the CI-related requirements. This review and approval
will typically take place in the PR adding the target to CI.
joshtriplett marked this conversation as resolved.
Show resolved Hide resolved
- In addition, the release team must approve the long-term viability of the
target, and the additional work of supporting the target.
- Tier 1 targets must have substantial, widespread interest within the
developer community, and must serve the ongoing needs of multiple production
joshtriplett marked this conversation as resolved.
Show resolved Hide resolved
joshtriplett marked this conversation as resolved.
Show resolved Hide resolved
users of Rust across multiple organizations or projects. A tier 1 target may
be demoted or removed if it becomes obsolete or no longer meets this
requirement.
- The target must build and pass tests reliably in CI.
- Building the target and running the testsuite for the target must not take
substantially longer than other targets.
- If running the testsuite requires additional infrastructure (such as systems
running the target), the target development team shall arrange to provide
such resources to the Rust project, to the satisfaction and approval of the
Rust infrastructure team.
joshtriplett marked this conversation as resolved.
Show resolved Hide resolved
- Tier 1 targets must provide documentation for the Rust community for how to
build and run tests for the platform, using emulation if possible, or
dedicated hardware if necessary.
joshtriplett marked this conversation as resolved.
Show resolved Hide resolved
- A tier 1 target may be demoted or removed if it no longer meets these
requirements. Any proposal for demotion or removal will be communicated
widely to the Rust community, both when initially proposed and before being
dropped from a stable release.
- All tier 2 requirements apply.

# Drawbacks
[drawbacks]: #drawbacks

While these criteria attempt to document the policy, that policy still involves
human judgment. Targets must fulfill the spirit of the requirements as well, as
determined by the judgment of the approving teams.

# Rationale and alternatives
[rationale-and-alternatives]: #rationale-and-alternatives

The set of approving teams for each tier arose out of discussion with the
various teams involved with aspects of the Rust project impacted by new
targets.


# Prior art
[prior-art]: #prior-art

This attempts to formalize and document Rust policy around targets and
architectures. https://forge.rust-lang.org/release/platform-support.html
joshtriplett marked this conversation as resolved.
Show resolved Hide resolved
documents some of that policy.

Future expansions of such policy may find requirements from other communities
joshtriplett marked this conversation as resolved.
Show resolved Hide resolved
useful as examples, such as Debian's [arch
policy](https://release.debian.org/bullseye/arch_policy.html) and [archive
criteria](https://ftp-master.debian.org/archive-criteria.html).

# Unresolved questions
joshtriplett marked this conversation as resolved.
Show resolved Hide resolved
[unresolved-questions]: #unresolved-questions

- Where, precisely, should we post the official policy?
joshtriplett marked this conversation as resolved.
Show resolved Hide resolved
- How should we track the maintainers of a target, so that we can page them if
we need an issue addressed involving that target? Can we do so using github
teams, so that we can mention them in an issue or PR to get their attention?
joshtriplett marked this conversation as resolved.
Show resolved Hide resolved

# Future possibilities
[future-possibilities]: #future-possibilities
joshtriplett marked this conversation as resolved.
Show resolved Hide resolved

Eventually, as more targets seek tier 1 status, we may want to document more
criteria used to evaluate requirements such as "long-term viability of the
target". We should also update these requirements if corner cases arise.

Some of our existing ports may not meet all of these criteria today. We may
wish to audit existing ports against these criteria, but this RFC does not
constitute a commitment to do so in a timely fashion.

This RFC should not serve as the canonical home of the most up-to-date version
of this policy; the official policy should live on rust-lang.org and in
official documentation.