Skip to content

Constrain process required for some user-facing changes to lower support tier targets #884

Open
@workingjubilee

Description

@workingjubilee

Proposal

Currently rust-lang/rust#142321 is open which addresses a long ago request in rust-lang/rust#60617 to expose the ABI version for all powerpc64-anything-using-elf tuples. For PowerPC64, There is an "elfv2" and an "elfv1", and for various reasons it is best if we expose this to Rust programs somehow because there are no fixed attributes that you can actually hang that cfg on. Little endian essentially-always is ELFv2, but that doesn't mean ELFv1 is big-endian, as you can have big-endian ELFv2 targets just fine. And there's obviously no particular reason you can't recompile the GNU code to be ELFv1 or ELFv2, so we can't hinge this all on the libc either (though musl does conveniently only support ELFv2).

...This isn't about fixing that.

It's about how the current way that the Forge section on proposals and stabilization for targets is worded is ambiguous enough that it suggests all user-facing changes to a target we support may require an FCP. We are currently asking for that in another PR, namely rust-lang/rust#139451 which is accordingly taking more time, despite being technically additive (though it is arguably signaling an intent to break certain code on newer platforms). T-compiler FCPs are unfortunately simply notoriously heavyweight for this.

This is a small, additive fix that maybe should be raised for discussion, yes, but probably doesn't need a full FCP. We're not adding something truly new to the compiler, even for this target, we're just making use of what is already available in the language.

I suggest a change to this policy for additive changes that only affect tier 2 targets or below to instead require a lighter amount of process:

  • Changes to tier 3 target tuples, even breaking ones, require an r+ at most, because we can simply remove the target with an r+, per the tier 3 target tier policy.
  • Additive changes for tier 2 targets in already-covered design spaces, like filling in cfg key-string pairs, requires an MCP at most.
  • Note that some cfg keys attend directly on something else, like cfg(target_feature = "..."), and for them the process is unchanged as exposing those implies stabilizing the actual feature.

Mentors or Reviewers

You!

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    T-compilerAdd this label so rfcbot knows to poll the compiler teamfinal-comment-periodThe FCP has started, most (if not all) team members are in agreementmajor-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