@@ -8,7 +8,7 @@ implemented and reviewed via the normal GitHub pull request workflow.
8
8
9
9
Some changes though are "substantial", and we ask that these be put
10
10
through a bit of a design process and produce a consensus among the Rust
11
- community and the [ core team] .
11
+ community and the [ sub- team] s .
12
12
13
13
The "RFC" (request for comments) process is intended to provide a
14
14
consistent and controlled path for new features to enter the language
@@ -75,19 +75,21 @@ the direction the language is evolving in.
75
75
* [ RFC Postponement]
76
76
* [ Help this is all too informal!]
77
77
78
+
78
79
## When you need to follow this process
79
80
[ When you need to follow this process ] : #when-you-need-to-follow-this-process
80
81
81
- You need to follow this process if you intend to make "substantial"
82
- changes to Rust, Cargo, Crates.io, or the RFC process itself. What constitutes
83
- a "substantial" change is evolving based on community norms, but may include
84
- the following.
82
+ You need to follow this process if you intend to make "substantial" changes to
83
+ Rust, Cargo, Crates.io, or the RFC process itself. What constitutes a
84
+ "substantial" change is evolving based on community norms and varies depending
85
+ on what part of the ecosystem you are proposing to change, but may include the
86
+ following.
85
87
86
88
- Any semantic or syntactic change to the language that is not a bugfix.
87
89
- Removing language features, including those that are feature-gated.
88
- - Changes to the interface between the compiler and libraries,
89
- including lang items and intrinsics.
90
- - Additions to ` std `
90
+ - Changes to the interface between the compiler and libraries, including lang
91
+ items and intrinsics.
92
+ - Additions to ` std ` .
91
93
92
94
Some changes do not require an RFC:
93
95
@@ -103,6 +105,15 @@ If you submit a pull request to implement a new feature without going
103
105
through the RFC process, it may be closed with a polite request to
104
106
submit an RFC first.
105
107
108
+ For more details on when an RFC is required, please see the following specific
109
+ guidelines, these correspond with some of the Rust community's
110
+ [ sub-teams] ( http://www.rust-lang.org/team.html ) :
111
+
112
+ * [ language changes] ( lang_changes.md ) ,
113
+ * [ library changes] ( libs_changes.md ) ,
114
+ * [ compiler changes] ( compiler_changes.md ) .
115
+
116
+
106
117
## Before creating an RFC
107
118
[ Before creating an RFC ] : #before-creating-an-rfc
108
119
@@ -125,12 +136,12 @@ on the [RFC issue tracker][issues], and occasionally posting
125
136
review.
126
137
127
138
As a rule of thumb, receiving encouraging feedback from long-standing
128
- project developers, and particularly members of the [ core team ] [ core ]
139
+ project developers, and particularly members of the relevant [ sub-team ]
129
140
is a good indication that the RFC is worth pursuing.
130
141
131
142
[ issues ] : https://github.com/rust-lang/rfcs/issues
132
143
[ discuss ] : http://discuss.rust-lang.org/
133
- [ core ] : https://github.com/rust-lang/rust/wiki/Note-core-team
144
+
134
145
135
146
## What the process is
136
147
[ What the process is ] : #what-the-process-is
@@ -141,49 +152,55 @@ is 'active' and may be implemented with the goal of eventual inclusion
141
152
into Rust.
142
153
143
154
* Fork the RFC repo http://github.com/rust-lang/rfcs
144
- * Copy ` 0000-template.md ` to ` text/0000-my-feature.md ` (where
145
- 'my-feature' is descriptive. don't assign an RFC number yet).
146
- * Fill in the RFC. Put care into the details: RFCs that do not
147
- present convincing motivation, demonstrate understanding of the
148
- impact of the design, or are disingenuous about the drawbacks or
149
- alternatives tend to be poorly-received.
150
- * Submit a pull request. As a pull request the RFC will receive design
151
- feedback from the larger community, and the author should be prepared
152
- to revise it in response .
153
- * During Rust triage, the pull request will either be closed (for RFCs
154
- that clearly will not be accepted) or assigned a * shepherd* . The
155
- shepherd is a trusted developer who is familiar with the process, who
156
- will help to move the RFC forward, and ensure that the right people
157
- see and review it.
158
- * Build consensus and integrate feedback. RFCs that have broad support
159
- are much more likely to make progress than those that don't receive
160
- any comments. The shepherd assigned to your RFC should help you get
161
- feedback from Rust developers as well.
155
+ * Copy ` 0000-template.md ` to ` text/0000-my-feature.md ` (where 'my-feature' is
156
+ descriptive. don't assign an RFC number yet).
157
+ * Fill in the RFC. Put care into the details: RFCs that do not present
158
+ convincing motivation, demonstrate understanding of the impact of the design, or
159
+ are disingenuous about the drawbacks or alternatives tend to be poorly-received.
160
+ * Submit a pull request. As a pull request the RFC will receive design feedback
161
+ from the larger community, and the author should be prepared to revise it in
162
+ response.
163
+ * Each pull request will be labeled with the most relevant [ sub-team ] .
164
+ * Each sub-team triages its RFC PRs. The sub-team will will either close the PR
165
+ (for RFCs that clearly will not be accepted) or assign it a * shepherd* . The
166
+ shepherd is a trusted developer who is familiar with the RFC process, who will
167
+ help to move the RFC forward, and ensure that the right people see and review
168
+ it.
169
+ * Build consensus and integrate feedback. RFCs that have broad support are much
170
+ more likely to make progress than those that don't receive any comments. The
171
+ shepherd assigned to your RFC should help you get feedback from Rust developers
172
+ as well.
162
173
* The shepherd may schedule meetings with the author and/or relevant
163
- stakeholders to discuss the issues in greater detail, and in some
164
- cases the topic may be discussed at the larger [ weekly meeting] . In
165
- either case a summary from the meeting will be posted back to the RFC
166
- pull request.
167
- * Once both proponents and opponents have clarified and defended
168
- positions and the conversation has settled, the shepherd will take it
169
- to the [ core team] for a final decision.
170
- * Eventually, someone from the [ core team] will either accept the RFC
171
- by merging the pull request, assigning the RFC a number (corresponding
172
- to the pull request number), at which point the RFC is 'active', or
173
- reject it by closing the pull request.
174
+ stakeholders to discuss the issues in greater detail.
175
+ * The sub-team will discuss the RFC PR, as much as possible in the comment
176
+ thread of the PR itself. Offline discussion will be summarized on the PR comment
177
+ thread.
178
+ * Once both proponents and opponents have clarified and defended positions and
179
+ the conversation has settled, the RFC will enter its * final comment period*
180
+ (FCP). This is a final opportunity for the community to comment on the PR and is
181
+ a reminder for all members of the sub-team to be aware of the RFC.
182
+ * The FCP lasts one week. It may be extended if consensus between sub-team
183
+ members cannot be reached. At the end of the FCP, the [ sub-team] will either
184
+ accept the RFC by merging the pull request, assigning the RFC a number
185
+ (corresponding to the pull request number), at which point the RFC is 'active',
186
+ or reject it by closing the pull request. How exactly the sub-team decide on an
187
+ RFC is up to the sub-team.
188
+
174
189
175
190
## The role of the shepherd
176
191
[ The role of the shepherd ] : #the-role-of-the-shepherd
177
192
178
- During triage, every RFC will either be closed or assigned a shepherd.
179
- The role of the shepherd is to move the RFC through the process. This
180
- starts with simply reading the RFC in detail and providing initial
181
- feedback. The shepherd should also solicit feedback from people who
182
- are likely to have strong opinions about the RFC. Finally, when this
183
- feedback has been incorporated and the RFC seems to be in a steady
184
- state, the shepherd will bring it to the meeting. In general, the idea
185
- here is to "front-load" as much of the feedback as possible before the
186
- point where we actually reach a decision.
193
+ During triage, every RFC will either be closed or assigned a shepherd from the
194
+ relevant sub-team. The role of the shepherd is to move the RFC through the
195
+ process. This starts with simply reading the RFC in detail and providing initial
196
+ feedback. The shepherd should also solicit feedback from people who are likely
197
+ to have strong opinions about the RFC. When this feedback has been incorporated
198
+ and the RFC seems to be in a steady state, the shepherd and/or sub-team leader
199
+ will announce an FCP. In general, the idea here is to "front-load" as much of
200
+ the feedback as possible before the point where we actually reach a decision -
201
+ by the end of the FCP, the decision on whether or not to accept the RFC should
202
+ be obvious from the RFC discussion thread.
203
+
187
204
188
205
## The RFC life-cycle
189
206
[ The RFC life-cycle ] : #the-rfc-life-cycle
@@ -205,35 +222,36 @@ through to completion: authors should not expect that other project
205
222
developers will take on responsibility for implementing their accepted
206
223
feature.
207
224
208
- Modifications to active RFC's can be done in followup PR's. We strive
225
+ Modifications to active RFC's can be done in follow-up PR's. We strive
209
226
to write each RFC in a manner that it will reflect the final design of
210
227
the feature; but the nature of the process means that we cannot expect
211
228
every merged RFC to actually reflect what the end result will be at
212
- the time of the next major release; therefore we try to keep each RFC
213
- document somewhat in sync with the language feature as planned,
214
- tracking such changes via followup pull requests to the document.
229
+ the time of the next major release.
230
+
231
+ In general, once accepted, RFCs should not be substantially changed. Only very
232
+ minor changes should be submitted as amendments. More substantial changes should
233
+ be new RFCs, with a note added to the original RFC. Exactly what counts as a
234
+ "very minor change" is up to the sub-team to decide. There are some more
235
+ specific guidelines in the sub-team RFC guidelines for the [ language] ( lang_changes.md ) ,
236
+ [ libraries] ( libs_changes.md ) , and [ compiler] ( compiler_changes.md ) .
215
237
216
- An RFC that makes it through the entire process to implementation is
217
- considered 'complete' and is moved to the 'complete' folder; an RFC
218
- that fails after becoming active is 'inactive' and moves to the
219
- 'inactive' folder.
220
238
221
239
## Reviewing RFC's
222
240
[ Reviewing RFC's ] : #reviewing-rfcs
223
241
224
242
While the RFC PR is up, the shepherd may schedule meetings with the
225
243
author and/or relevant stakeholders to discuss the issues in greater
226
- detail, and in some cases the topic may be discussed at the larger
227
- [ weekly meeting] . In either case a summary from the meeting will be
244
+ detail, and in some cases the topic may be discussed at a sub-team
245
+ meeting. In either case a summary from the meeting will be
228
246
posted back to the RFC pull request.
229
247
230
- The core team makes final decisions about RFCs after the benefits and
231
- drawbacks are well understood. These decisions can be made at any
232
- time, but the core team will regularly issue decisions on at least a
233
- weekly basis. When a decision is made, the RFC PR will either be
234
- merged or closed, in either case with a comment describing the
235
- rationale for the decision. The comment should largely be a summary of
236
- discussion already on the comment thread.
248
+ A sub- team makes final decisions about RFCs after the benefits and drawbacks are
249
+ well understood. These decisions can be made at any time, but the sub-team will
250
+ regularly issue decisions. When a decision is made, the RFC PR will either be
251
+ merged or closed, in either case with a comment describing the rationale for the
252
+ decision. The comment should largely be a summary of discussion already on the
253
+ comment thread.
254
+
237
255
238
256
## Implementing an RFC
239
257
[ Implementing an RFC ] : #implementing-an-rfc
@@ -243,7 +261,7 @@ implemented right away. Other accepted RFC's can represent features
243
261
that can wait until some arbitrary developer feels like doing the
244
262
work. Every accepted RFC has an associated issue tracking its
245
263
implementation in the Rust repository; thus that associated issue can
246
- be assigned a priority via the [ triage process] that the team uses for
264
+ be assigned a priority via the triage process that the team uses for
247
265
all issues in the Rust repository.
248
266
249
267
The author of an RFC is not obligated to implement it. Of course, the
@@ -254,15 +272,18 @@ If you are interested in working on the implementation for an 'active'
254
272
RFC, but cannot determine if someone else is already working on it,
255
273
feel free to ask (e.g. by leaving a comment on the associated issue).
256
274
275
+
257
276
## RFC Postponement
258
277
[ RFC Postponement ] : #rfc-postponement
259
278
260
- Some RFC pull requests are tagged with the 'postponed' label when they
261
- are closed (as part of the rejection process). An RFC closed with
262
- “postponed” is marked as such because we want neither to think about
263
- evaluating the proposal nor about implementing the described feature
264
- until after the next major release, and we believe that we can afford
265
- to wait until then to do so.
279
+ Some RFC pull requests are tagged with the 'postponed' label when they are
280
+ closed (as part of the rejection process). An RFC closed with “postponed” is
281
+ marked as such because we want neither to think about evaluating the proposal
282
+ nor about implementing the described feature until some time in the future, and
283
+ we believe that we can afford to wait until then to do so. Historically,
284
+ "postponed" was used to postpone features until after 1.0. Postponed PRs may be
285
+ re-opened when the time is right. We don't have any formal process for that, you
286
+ should ask members of the relevant sub-team.
266
287
267
288
Usually an RFC pull request marked as “postponed” has already passed
268
289
an informal first round of evaluation, namely the round of “do we
@@ -280,6 +301,4 @@ present circumstances. As usual, we are trying to let the process be
280
301
driven by consensus and community norms, not impose more structure than
281
302
necessary.
282
303
283
- [ core team ] : https://github.com/mozilla/rust/wiki/Note-core-team
284
- [ triage process ] : https://github.com/rust-lang/rust/wiki/Note-development-policy#milestone-and-priority-nomination-and-triage
285
- [ weekly meeting ] : https://github.com/rust-lang/meeting-minutes
304
+ [ sub-team ] : http://www.rust-lang.org/team.html
0 commit comments