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