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

RFC: The Rust RFC Process #2

Closed
wants to merge 3 commits into from
Closed
Changes from all commits
Commits
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
106 changes: 106 additions & 0 deletions active/0000-rfc-process.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
# Summary

Fork the RFC repo, copy the provided template RFC into the "active" directory
with a descriptive name, fill out each section, and submit as a pull request
for review. Advertise the proposed RFC and work to gain a consensus. Once
approved and merged, RFCs become fair game for implementors.

# Motivation

The freewheeling way that we add new features to Rust has been good for
early development, but for Rust to become a mature platform we need to
develop some more self-discipline when it comes to changing the system.
This is a proposal for a more principled RFC process to make it
a more integral part of the overall development process, and one that is
followed consistently to introduce features to Rust.

# Detailed design

Many changes, including bug fixes and documentation improvements can be
implemented and reviewed via the normal GitHub pull request workflow.

Some changes though are "substantial", and we ask that these be put
through a bit of a design process and produce a consensus among the Rust
community and the [core team].

The "RFC" (request for comments process) is intended to provide a
consistent and controlled path for new features to enter the language
and standard libraries, so that all stakeholders can be confident about
the direction the language is evolving in.

## When you need to follow this process

You need to follow this process if you intend to make "substantial"
changes to the Rust distribution. What constitutes a "substantial"
change is evolving based on community norms, but may include the following.

- Any semantic or syntactic change to the language that is not a bugfix.
- Changes to the interface between the compiler and libraries,
including lang items and intrinsics.
- Additions to `std`

Some changes do not require an RFC:

- Rephrasing, reorganizing, refactoring, or otherwise "changing shape
does not change meaning".
- Additions that strictly improve objective, numerical quality
criteria (warning removal, speedup, better platform coverage, more
parallelism, trap more errors, etc.)
- Additions only likely to be _noticed by_ other developers-of-rust,
invisible to users-of-rust.

If you submit a pull request to implement a new feature without going
through the RFC process, it may be closed with a polite request to
submit an RFC first.

## What the process is

In short, to get a major feature added to Rust, one must first get the
RFC merged into the RFC repo as a markdown file. At that point the RFC
is 'active' and may be implemented with the goal of eventual inclusion
into Rust.

* Fork the RFC repo http://github.com/rust-lang/rfcs
* Copy `0000-template.md` to `active/0000-my-feature.md` (where

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about using GH's PR number ? This will add some gaps between accepted RFCs, which is probably not good, but it'll at least keep the sequence of numbers related to the proposed PR.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We went back and forth this. There is really no good reason not to use the PR number except that continuous id numbers are more attractive than random numbers with gaps.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think coupling RFC #s to pull #s doesn't add a lot of benefit, but does cause lots of problems if we ever move off of GitHub.

'my-feature' is descriptive. don't assign an RFC number yet).
* Fill in the RFC
* Submit a pull request. The pull request is the time to get review of
the design from the larger community.
* Build consensus and integrate feedback. RFCs that have broad support
are much more likely to make progress than those that don't receive any
comments.
* Eventually, somebody on the [core team] will either accept the RFC by
merging the pull request and assigning the RFC a number, at which point
the RFC is 'active', or reject it by closing the pull request.

Once an RFC becomes active then authors may implement it and submit the
feature as a pull request to the Rust repo. An 'active' is not a rubber
stamp, and in particular still does not mean the feature will ultimately
be merged; it does mean that in principle all the major stakeholders
have agreed to the feature and are amenable to merging it.

Modifications to active RFC's can be done in followup PR's. An RFC that
makes it through the entire process to implementation is considered
'complete' and is moved to the 'complete' folder; an RFC that fails
after becoming active is 'inactive' and moves to the 'inactive' folder.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We also need a way to track who's working on that RFC. Should an RFC bug be created in Rust's repo and be linked to the real RFC ? This way folks can raise their hands and work on the RFC, it's also a good place for follow-up discussions on the work happening for that RFC, etc. The person proposing the RFC is not necessarily the one that will work on it.

I was going to suggest having a way to automatically close and move the active RFC under the complete folder but I think this process requires some double checking from the [core team] so I'd prefer keeping it that way.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the plan was to create an issue in the Rust repo corresponding to the implementation of an RFC.


# Alternatives

Retain the current informal RFC process. The newly proposed RFC process is
designed to improve over the informal process in the following ways:

* Discourage unactionable or vague RFCs
* Ensure that all serious RFCs are considered equally
* Give confidence to those with a stake in Rust's development that they
understand why new features are being merged

As an alternative alternative, we could adopt an even stricter RFC process than the one proposed here. If desired, we should likely look to Python's [PEP] process for inspiration.

# Unresolved questions

1. Does this RFC strike a favorable balance between formality and agility?
2. Does this RFC successfully address the aforementioned issues with the current
informal RFC process?

[core team]: https://github.com/mozilla/rust/wiki/Note-core-team
[PEP]: http://legacy.python.org/dev/peps/pep-0001/