Skip to content

Begin enforcing Tier 2 target maintainer requirements #896

Open
@jieyouxu

Description

@jieyouxu

Proposal: Begin enforcing Tier 2 target maintainer requirements

Note

This will definitely need a team FCP. I'm waiting until next Monday (2025-07-14) to leave time for feedback before proposing FCP.

Tier 2 Target Policy requires that (emphasis mine)

A tier 2 target must have a designated team of developers (the "target maintainers") available to consult on target-specific build-breaking issues, or if necessary to develop target-specific language or library implementation details. This team must have at least 2 developers.

  • The target maintainers 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 documentation of the target.

We require target maintainers for Tier 2 targets because they are typically more niche, more difficult to build for and test against, and require target-specific expertise. Even triaging issues can be very difficult without having target maintainers to consult with, let alone fixing them. Making sure that these targets fairly reliably build (and remain functional) underpins the "Tier 2" target status, which itself conveys some degree of "promise" for users.

Historically, some Tier 2 targets were grandfathered-in (see rust-lang/rust#113739) as they predate the current Target Tier policy. rust-lang/rust#113739 was opened in July 2023 to begin working towards ensuring all Tier 2 targets have Platform Support docs (which are important both for maintainers to identify target maintainer contacts, and also users for platform baselines and build/test/run requirements) and dedicated target maintainers.

However, even to this day (2025-07-07), there are still some Tier 2 targets that lack Platform Support docs and/or target maintainers (see the survey below). I am thus proposing that we should start to enforce the Tier 2 target maintainers requirement with a grace period. After the grace period, Tier 2 targets that still fail to satisfy the target maintainer requirements may be demoted to Tier 3.

Each demotion decision will still be evaluated on their own merits.

This proposal exempts Tier 2 targets that have at least 1 target maintainer, since we at least have someone to consult with, and focuses on Tier 2 targets that don't have explicit target maintainers at all. Both Tier 1 and Tier 3 targets are beyond the scope of this proposal.

The proposed plan of action:

  • Determine a suitable grace period.
  • Create a blog post calling for maintainers for Tier 2 targets that lack sufficient target maintainers and/or Platform Support pages.
    • Tier 2 targets that only have 1 maintainer will be mentioned too, but not as much of a priority.
    • The intention is to eventually enforce the target policy, this is part of a very phased rollout to increase target policy compliance.
  • After the end of the grace period, announce in a follow-up blog post that we will begin to demote Tier 2 targets that still fail to satisfy Tier 2 target maintainer requirements. Demotion decisions will be evaluated on their own merits for each target, following usual target demotion processes.
    • As part of the very phased rollout, Tier 2 targets that still do not have any target maintainers will be first re-evaluated.
    • Demoted targets may still be reproposed to be promoted to Tier 2, with the usual target promotion process, if they gain sufficient new target maintainers.

Context

A Survey of Tier 2 Target Maintainers Status

This is a snapshot of the HackMD draft: https://hackmd.io/4goAKkfrTUGd1KkwGAhlQQ
Last revised: 2025-07-07.

Status of Tier 2 with host tools targets

Note: when a platform support page is absent, it is assumed that the target do not have any target maintainers.

Target tuple Target maintainers count Platform support page (2025-07-07)
aarch64-pc-windows-gnullvm 2 https://doc.rust-lang.org/nightly/rustc/platform-support/windows-gnullvm.html
aarch64-pc-windows-msvc 5 https://doc.rust-lang.org/nightly/rustc/platform-support/windows-msvc.html
aarch64-unknown-linux-musl 0 N/A
aarch64-unknown-linux-ohos 2 https://doc.rust-lang.org/nightly/rustc/platform-support/openharmony.html
arm-unknown-linux-gnueabi 0 N/A
arm-unknown-linux-gnueabihf 0 N/A
armv7-unknown-linux-gnueabihf 0 N/A
armv7-unknown-linux-ohos 2 https://doc.rust-lang.org/nightly/rustc/platform-support/openharmony.html
loongarch64-unknown-linux-gnu 4 https://doc.rust-lang.org/nightly/rustc/platform-support/loongarch-linux.html
loongarch64-unknown-linux-musl 4 https://doc.rust-lang.org/nightly/rustc/platform-support/loongarch-linux.html
i686-pc-windows-gnu 0 https://doc.rust-lang.org/nightly/rustc/platform-support/windows-gnu.html
powerpc-unknown-linux-gnu 0 N/A
powerpc64-unknown-linux-gnu 0 N/A
powerpc64le-unknown-linux-gnu 2 https://doc.rust-lang.org/nightly/rustc/platform-support/powerpc64le-unknown-linux-gnu.html
powerpc64le-unknown-linux-musl 3 https://doc.rust-lang.org/nightly/rustc/platform-support/powerpc64le-unknown-linux-musl.html
riscv64gc-unknown-linux-gnu 4 https://doc.rust-lang.org/nightly/rustc/platform-support/riscv64gc-unknown-linux-gnu.html
riscv64gc-unknown-linux-musl 2 https://doc.rust-lang.org/nightly/rustc/platform-support/riscv64gc-unknown-linux-musl.html
s390x-unknown-linux-gnu 2 https://doc.rust-lang.org/nightly/rustc/platform-support/s390x-unknown-linux-gnu.html
x86_64-pc-windows-gnullvm 2 https://doc.rust-lang.org/nightly/rustc/platform-support/windows-gnullvm.html
x86_64-unknown-freebsd 2 https://doc.rust-lang.org/nightly/rustc/platform-support/freebsd.html
x86_64-unknown-illumos 2 https://doc.rust-lang.org/nightly/rustc/platform-support/illumos.html
x86_64-unknown-linux-musl 0 N/A
x86_64-unknown-linux-ohos 2 https://doc.rust-lang.org/nightly/rustc/platform-support/openharmony.html
x86_64-unknown-netbsd 1 https://doc.rust-lang.org/nightly/rustc/platform-support/netbsd.html
x86_64-pc-solaris 2 https://doc.rust-lang.org/nightly/rustc/platform-support/solaris.html
sparcv9-sun-solaris 2 https://doc.rust-lang.org/nightly/rustc/platform-support/solaris.html

Tier 2 with host tools targets with no platform support pages or explicit target maintainers

  • aarch64-unknown-linux-musl
  • arm-unknown-linux-gnueabi
  • arm-unknown-linux-gnueabihf
  • armv7-unknown-linux-gnueabihf
  • i686-pc-windows-gnu
  • powerpc-unknown-linux-gnu
  • powerpc64-unknown-linux-gnu
  • x86_64-unknown-linux-musl

Tier 2 with host tools targets with only 1 explicit target maintainers

  • x86_64-unknown-netbsd
    • Note that there is a primary target maintainer who serves at point of contact, but there are fallback target maintainers, so this seems fine.

Special notes

Status of Tier 2 without host tools targets

Note: when a platform support page is absent, it is assumed that the target do not have any target maintainers.

Target tuple Target maintainers count Platform support page (2025-07-07)
aarch64-apple-ios 3 https://doc.rust-lang.org/nightly/rustc/platform-support/apple-ios.html
aarch64-apple-ios-macabi 3 https://doc.rust-lang.org/nightly/rustc/platform-support/apple-ios-macabi.html
aarch64-apple-ios-sim 3 https://doc.rust-lang.org/nightly/rustc/platform-support/apple-ios.html
aarch64-linux-android 3 https://doc.rust-lang.org/nightly/rustc/platform-support/android.html
aarch64-unknown-fuchsia 2 https://doc.rust-lang.org/nightly/rustc/platform-support/fuchsia.html
aarch64-unknown-none 0 N/A
aarch64-unknown-none-softfloat 0 N/A
aarch64-unknown-uefi 2 https://doc.rust-lang.org/nightly/rustc/platform-support/unknown-uefi.html
arm-linux-androideabi 3 https://doc.rust-lang.org/nightly/rustc/platform-support/android.html
arm-unknown-linux-musleabi 0 N/A
arm-unknown-linux-musleabihf 0 N/A
arm64ec-pc-windows-msvc 1 https://doc.rust-lang.org/nightly/rustc/platform-support/arm64ec-pc-windows-msvc.html
armebv7r-none-eabi 1 https://doc.rust-lang.org/nightly/rustc/platform-support/armv7r-none-eabi.html
armebv7r-none-eabihf 1 https://doc.rust-lang.org/nightly/rustc/platform-support/armv7r-none-eabi.html
armv5te-unknown-linux-gnueabi 0 https://doc.rust-lang.org/nightly/rustc/platform-support/armv5te-unknown-linux-gnueabi.html
armv5te-unknown-linux-musleabi 0 N/A
armv7-linux-androideabi 3 https://doc.rust-lang.org/nightly/rustc/platform-support/android.html
armv7-unknown-linux-gnueabi 0 N/A
armv7-unknown-linux-musleabi 0 N/A
armv7-unknown-linux-musleabihf 0 N/A
armv7a-none-eabi 0 There's an overarching page https://doc.rust-lang.org/nightly/rustc/platform-support/arm-none-eabi.html but no explicit target maintainer page for armv7a-none-eabi
armv7r-none-eabi 1 https://doc.rust-lang.org/nightly/rustc/platform-support/armv7r-none-eabi.html
i586-unknown-linux-gnu 0 N/A
i586-unknown-linux-musl 0 N/A
i686-linux-android 3 https://doc.rust-lang.org/nightly/rustc/platform-support/android.html
i686-pc-windows-gnullvm 2 https://doc.rust-lang.org/nightly/rustc/platform-support/windows-gnullvm.html
i686-unknown-freebsd 2 https://doc.rust-lang.org/nightly/rustc/platform-support/freebsd.html
i686-unknown-linux-musl 0 N/A
i686-unknown-uefi 2 https://doc.rust-lang.org/nightly/rustc/platform-support/unknown-uefi.html
loongarch64-unknown-none 2 https://doc.rust-lang.org/nightly/rustc/platform-support/loongarch-none.html
loongarch64-unknown-none-softfloat 2 https://doc.rust-lang.org/nightly/rustc/platform-support/loongarch-none.html
nvptx64-nvidia-cuda 2 https://doc.rust-lang.org/nightly/rustc/platform-support/nvptx64-nvidia-cuda.html
riscv32i-unknown-none-elf 6 (WG-embedded RISC-V team) https://doc.rust-lang.org/nightly/rustc/platform-support/riscv32-unknown-none-elf.html
riscv32im-unknown-none-elf 6 (WG-embedded RISC-V team) https://doc.rust-lang.org/nightly/rustc/platform-support/riscv32-unknown-none-elf.html
riscv32imac-unknown-none-elf 6 (WG-embedded RISC-V team) https://doc.rust-lang.org/nightly/rustc/platform-support/riscv32-unknown-none-elf.html
riscv32imafc-unknown-none-elf 6 (WG-embedded RISC-V team) https://doc.rust-lang.org/nightly/rustc/platform-support/riscv32-unknown-none-elf.html
riscv32imc-unknown-none-elf 6 (WG-embedded RISC-V team) https://doc.rust-lang.org/nightly/rustc/platform-support/riscv32-unknown-none-elf.html
riscv64gc-unknown-none-elf 0 N/A
riscv64imac-unknown-none-elf 0 N/A
sparc64-unknown-linux-gnu 0 N/A
thumbv6m-none-eabi 10 (WG-embedded ARM team) https://doc.rust-lang.org/nightly/rustc/platform-support/thumbv6m-none-eabi.html
thumbv7em-none-eabi 10 (WG-embedded ARM team) https://doc.rust-lang.org/nightly/rustc/platform-support/thumbv7em-none-eabi.html
thumbv7em-none-eabihf 10 (WG-embedded ARM team) https://doc.rust-lang.org/nightly/rustc/platform-support/thumbv7em-none-eabi.html
thumbv7m-none-eabi 10 (WG-embedded ARM team) https://doc.rust-lang.org/nightly/rustc/platform-support/thumbv7m-none-eabi.html
thumbv7neon-linux-androideabi 3 https://doc.rust-lang.org/nightly/rustc/platform-support/android.html
thumbv7neon-unknown-linux-gnueabihf 0 N/A
thumbv8m.base-none-eabi 10 (WG-embedded ARM team) https://doc.rust-lang.org/nightly/rustc/platform-support/thumbv8m.base-none-eabi.html
thumbv8m.main-none-eabi 10 (WG-embedded ARM team) https://doc.rust-lang.org/nightly/rustc/platform-support/thumbv8m.main-none-eabi.html
thumbv8m.main-none-eabihf 10 (WG-embedded ARM team) https://doc.rust-lang.org/nightly/rustc/platform-support/thumbv8m.main-none-eabi.html
wasm32-unknown-emscripten 2 https://doc.rust-lang.org/nightly/rustc/platform-support/wasm32-unknown-emscripten.html
wasm32-unknown-unknown 1 https://doc.rust-lang.org/nightly/rustc/platform-support/wasm32-unknown-unknown.html
wasm32-wasip1 1 https://doc.rust-lang.org/nightly/rustc/platform-support/wasm32-wasip1.html
wasm32-wasip1-threads 4 https://doc.rust-lang.org/nightly/rustc/platform-support/wasm32-wasip1-threads.html
wasm32-wasip2 2 https://doc.rust-lang.org/nightly/rustc/platform-support/wasm32-wasip2.html
wasm32v1-none 2 https://doc.rust-lang.org/nightly/rustc/platform-support/wasm32v1-none.html
x86_64-apple-ios 3 https://doc.rust-lang.org/nightly/rustc/platform-support/apple-ios.html
x86_64-apple-ios-macabi 3 https://doc.rust-lang.org/nightly/rustc/platform-support/apple-ios-macabi.html
x86_64-fortanix-unknown-sgx 3 https://doc.rust-lang.org/nightly/rustc/platform-support/x86_64-fortanix-unknown-sgx.html
x86_64-linux-android 3 https://doc.rust-lang.org/nightly/rustc/platform-support/android.html
x86_64-unknown-fuchsia 2 https://doc.rust-lang.org/nightly/rustc/platform-support/fuchsia.html
x86_64-unknown-linux-gnux32 0 N/A
x86_64-unknown-none 2 https://doc.rust-lang.org/nightly/rustc/platform-support/x86_64-unknown-none.html
x86_64-unknown-redox 1 https://doc.rust-lang.org/nightly/rustc/platform-support.html
x86_64-unknown-uefi 2 https://doc.rust-lang.org/nightly/rustc/platform-support/unknown-uefi.html

Tier 2 without host tools targets with no platform support pages or explicit target maintainers

  • aarch64-unknown-none
  • aarch64-unknown-none-softfloat
  • arm-unknown-linux-musleabi
  • arm-unknown-linux-musleabihf
  • armv5te-unknown-linux-gnueabi
  • armv5te-unknown-linux-musleabi
  • armv7-unknown-linux-gnueabi
  • armv7-unknown-linux-musleabi
  • armv7-unknown-linux-musleabihf
  • armv7a-none-eabi
  • i586-unknown-linux-gnu
  • i586-unknown-linux-musl
  • i686-unknown-linux-musl
  • riscv64gc-unknown-none-elf
  • riscv64imac-unknown-none-elf
  • sparc64-unknown-linux-gnu
  • thumbv7neon-unknown-linux-gnueabihf
  • x86_64-unknown-linux-gnux32

Tier 2 with host tools targets with only 1 explicit target maintainers

  • arm64ec-pc-windows-msvc
  • armebv7r-none-eabi
  • armebv7r-none-eabihf
  • armv7r-none-eabi
  • wasm32-unknown-unknown
  • wasm32-wasip1
  • x86_64-unknown-redox

Mentors or Reviewers

@davidtwco

Process

The main points of the Major Change Process are as follows:

  • File an issue describing the proposal.
  • A compiler team member or contributor who is knowledgeable in the area can second by writing @rustbot second.
    • Finding a "second" suffices for internal changes. If however, you are proposing a new public-facing feature, such as a -C flag, then full team check-off is required.
    • Compiler team members can initiate a check-off via @rfcbot fcp merge on either the MCP or the PR.
  • Once an MCP is seconded, the Final Comment Period begins. If no objections are raised after 10 days, the MCP is considered approved.

You can read more about Major Change Proposals on forge.

Caution

Concerns (1 active)

Managed by @rustbot—see help for details.

Metadata

Metadata

Assignees

No one assigned

    Labels

    T-compilerAdd this label so rfcbot knows to poll the compiler teamhas-concernsThere are active concernsmajor-changeA proposal to make a major change to rustcto-announceAnnounce this issue on triage meeting

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions