Skip to content

Commit 8356d5c

Browse files
authored
Merge pull request #2689 from nikomatsakis/compiler-team-regulars
introduce "compiler-team contributors"
2 parents cf7581f + 28ef642 commit 8356d5c

File tree

1 file changed

+367
-0
lines changed

1 file changed

+367
-0
lines changed
Lines changed: 367 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,367 @@
1+
- Feature Name: N/A
2+
- Start Date: 2019-04-18
3+
- RFC PR: [rust-lang/rfcs#2689](https://github.com/rust-lang/rfcs/pull/2689)
4+
- Rust Issue: N/A
5+
6+
# Summary
7+
[summary]: #summary
8+
9+
Introduce an intermediate level of member for the compiler team, the
10+
**compiler team contributor**.
11+
12+
# Motivation
13+
[motivation]: #motivation
14+
15+
This proposal is part of a larger effort to introduce more structure
16+
into the compiler team's makeup. This structure should make it easier
17+
to become a part of the compiler team, by laying out a clear path to
18+
membership and by offering more official roles.
19+
20+
## Background: Access to infrastructure
21+
22+
In addition to recognition, the levels in this document control access
23+
to other bits of our infrastructure. It is worth spending some time
24+
reviewing those bits of infrastructure.
25+
26+
### bot privileges (including bors r+)
27+
28+
The bors bot has a central list of folks that have "r+" privileges.
29+
These are people who can leave comments instructing bors to land a PR.
30+
Similarly, we have other bots (e.g., perf-timer and so forth) that
31+
require authorization to use.
32+
33+
While the bors permissions are very crude (you either have privileges
34+
or you don't), we have historically asked people to use their
35+
permissions in specific ways (self-policed).
36+
37+
One reason that it is convenient to have r+ privileges is a purely
38+
administrative one: they allow you to re-approve PRs after they have
39+
been rebased, which is a common need. (Typically this is done by
40+
writing `@bors r=username`, where `username` is the name of the
41+
original reviewer.)
42+
43+
Apart from these administrative re-reviews, the expectation is that
44+
people with r+ privileges will begin by reviewing only simple PRs from
45+
parts of the compiler that they understand well. As their knowledge
46+
grows, they can approve more and more complex PRs.
47+
48+
### highfive queue
49+
50+
One great way to help move the compiler along and to gain experience
51+
in its internals is to be added to the highfive queue. People on this
52+
queue are automatically assigned to do reviews for fresh
53+
PRs. Obviously, it only makes sense to be added to the queue if you
54+
have r+ privileges.
55+
56+
Often, it makes sense to be added to the queue *even if* you are not
57+
that familiar with the compiler. This is because it lets you do
58+
initial reviews of PRs, thus gaining experience with lots of parts of
59+
the compiler. If you don't feel like you fully understood the PR, then
60+
-- after your initial review -- you can then re-assign the PR to
61+
someone more senior. (The "expert map" is a good way to find such folks.)
62+
63+
### rust-lang org membership
64+
65+
There are a number of things that you can't do in GitHub unless you
66+
are a member of the GitHub organization. Typically, one becomes a
67+
member of the organization by being added to a team, and these teams
68+
in turn are granted privileges to repositories in the organization.
69+
Most notably:
70+
71+
- you cannot be assigned to issues unless you have at least *read* access to a repository;
72+
- you cannot modify labels without *write* access;
73+
- you cannot be a member of a *team*, which means you cannot be addressed via some
74+
alias like `@rust-lang/compiler-team`;
75+
- you do not get the little "member" badge appearing next to your name when you comment.
76+
77+
The last point is potentially important: by being made a member of the
78+
org, you are to some extent representing that org, as you are
79+
visibility identified as a member. These can be important in terms of
80+
the code of conduct, as we wish for representatives of rust-lang to
81+
take extra care in their public interaction. In particular, this
82+
implies we might not want to allow **anyone** to make themselves a
83+
member of the org.
84+
85+
### triagebot
86+
87+
The triagebot is an "upcoming" piece of infrastructure that should allow any GitHub user
88+
to make some changes to issues on rust-lang repositories. In particular, one would be
89+
able to instruct the triagebot to do the following:
90+
91+
- adjust labels on issues
92+
- assign oneself to the issue
93+
94+
Because the triagebot can be used by anyone, and not just org members, assigning
95+
works as follows:
96+
97+
- the issue is *officially* assigned to the triagebot (as far as
98+
Github is concerned, that is)
99+
- the issue header is edited to indicate that it is assigned to the
100+
user in question
101+
102+
This is a bit less good than being assigned to the issue as an org
103+
member, since it means that your username and picture do not appear
104+
next to the issue, but it's still pretty decent and should suffice for
105+
most purposes.
106+
107+
# Guide-level explanation
108+
[guide-level-explanation]: #guide-level-explanation
109+
110+
## The path to membership
111+
112+
People will typically start as a **working group participant,** which
113+
is basically somebody who has come to work on something for the first
114+
time. They don't know much about the compiler yet and have no
115+
particular privileges. They are assigned to issues using the triagebot
116+
and (typically) work with a mentor or mentoring instructions.
117+
118+
### Compiler team contributors
119+
120+
Once a working group participant has been contributing regularly for
121+
some time, they can be promoted to the level of a **compiler team
122+
contributor** (see the section on [how decisions are made][hdam]
123+
below). This title indicates that they are someone who contributes
124+
regularly.
125+
126+
It is hard to define the precise conditions when such a promotion is
127+
appropriate. Being promoted to contributor is not just a function of
128+
checking various boxes. But the general sense is that someone is ready
129+
when they have demonstrated three things:
130+
131+
- "Staying power" -- the person should be contributing on a regular
132+
basis in some way. This might for example mean that they have
133+
completed a few projects.
134+
- "Independence and familiarity" -- they should be acting somewhat
135+
independently when taking on tasks, at least within the scope of the
136+
working group. They should plausibly be able to mentor others on simple
137+
PRs.
138+
- "Cordiality" -- contributors will be members of the organization and
139+
are held to a higher standard with respect to the [Code of
140+
Conduct][CoC]. They should not only obey the letter of the CoC but
141+
also its spirit.
142+
143+
[CoC]: https://www.rust-lang.org/policies/code-of-conduct
144+
145+
Being promoted to contributor implies a number of privileges:
146+
147+
- Contributors have r+ privileges and can do reviews (they are
148+
expected to use those powers appropriately, as discussed
149+
previously). They also have access to control perf/rustc-timer and
150+
other similar bots.
151+
- Contributors are members of the organization so they can modify
152+
labels and be assigned to issues.
153+
- Contributors are a member of the rust-lang/compiler team on GitHub,
154+
so that they receive pings when people are looking to address the
155+
team as a whole.
156+
- Contributors will be listed on the [compiler expert map](https://github.com/rust-lang/compiler-team/blob/9d8c387ddbd01ced14eaab480cddb00c2d723f36/experts/MAP.md),
157+
which lists folks who are familiar with each area of the compiler.
158+
- Contributors are listed on the rust-lang.org web page and invited to
159+
the Rust All Hands.
160+
161+
It also implies some obligations (in some cases, optional obligations):
162+
163+
- Contributors will be asked if they wish to be added to highfive rotation.
164+
- Contributors are held to a higher standard than ordinary folk when
165+
it comes to the [Code of Conduct][CoC].
166+
167+
### Compiler team members
168+
169+
As a contributor gains in experience, they may be asked to become a
170+
**compiler team member**. This implies that they are not only a
171+
regular contributor, but are actively helping to shape the direction
172+
of the team or some part of the compiler (or multiple parts).
173+
174+
- Compiler team members are the ones who select when people should be
175+
promoted to compiler team contributor or to the level of member.
176+
- Compiler team members are consulted on FCP decisions (which, in the
177+
compiler team, are relatively rare).
178+
- There will be a distinct GitHub team containing only the compiler
179+
team members, but the name of this team is "to be determined".
180+
- Working groups must always include at least one compiler team member
181+
as a lead (though groups may have other leads who are not yet full
182+
members).
183+
184+
### How promotion decisions are made
185+
[hdam]: #how-promotion-decisions-are-made
186+
187+
Promotion decisions (from participant to contributor, and from
188+
contributor to member) are made by having an active team member send
189+
an e-mail to the alias `compiler-private@rust-lang.org`. This e-mail
190+
should include:
191+
192+
- the name of the person to be promoted
193+
- a draft of the public announcement that will be made
194+
195+
Compiler-team members should send e-mail giving their explicit assent,
196+
or with objections. Objections should always be resolved before the
197+
decision is made final. E-mails can also include edits or additions for the
198+
public announcement.
199+
200+
To make the final decision:
201+
202+
- All objections must be resolved.
203+
- There should be a "sufficient number" (see below) of explicit
204+
e-mails in favor of addition (including the team lead).
205+
- The nominator (or some member of the team) should reach out to the person
206+
in question and check that they wish to join.
207+
208+
We do not require all team members to send e-mail, as historically
209+
these decisions are not particularly controversial. For promotion to a
210+
contributor, the only requirement is that the compiler team lead
211+
agrees. For promotion to a full member, more explicit mails in favor
212+
are recommended.
213+
214+
Once we have decided to promote, then the announcement can be posted
215+
to internals, and the person added to the team repository.
216+
217+
### Not just code
218+
219+
It is worth emphasizing that becoming a contributor or member of the
220+
compiler team does not necessarily imply writing PRs. There are a wide
221+
variety of tasks that need to be done to support the compiler and
222+
which should make one eligible for membership. Such tasks would
223+
include organizing meetings, participating in meetings, bisecting and
224+
triaging issues, writing documentation, working on the
225+
rustc-guide. The most important criteria for elevation to contributor,
226+
in particular, is **regular and consistent** participation. The most
227+
important criteria for elevation to member is **actively shaping the
228+
direction of the team or compiler**.
229+
230+
## Alumni status
231+
232+
If at any time a current contributor or member wishes to take a break
233+
from participating, they can opt to put themselves into alumni status.
234+
When in alumni status, they will be removed from Github aliases and
235+
the like, so that they need not be bothered with pings and messages.
236+
They will also not have r+ privileges. **Alumni members will however
237+
still remain members of the GitHub org overall.**
238+
239+
People in alumni status can ask to return to "active" status at any
240+
time. This request would ordinarily be granted automatically barring
241+
extraordinary circumstances.
242+
243+
People in alumni status are still members of the team at the level
244+
they previously attained and they may publicly indicate that, though
245+
they should indicate the time period for which they were active as
246+
well.
247+
248+
### Changing back to contributor
249+
250+
If desired, a team member may also ask to move back to contributor
251+
status. This would indicate a continued desire to be involved in
252+
rustc, but that they do not wish to be involved in some of the
253+
weightier decisions, such as who to add to the team. Like full alumni,
254+
people who were once full team members but who went back to
255+
contributor status may ask to return to full team member status. This
256+
request would ordinarily be granted automatically barring
257+
extraordinary circumstances.
258+
259+
### Automatic alumni status after 6 months of inactivity
260+
261+
If a contributor or a member has been inactive in the compiler for 6
262+
months, then we will ask them if they would like to go to alumni
263+
status. If they respond yes or do not respond, they can be placed on
264+
alumni status. If they would prefer to remain active, that is also
265+
fine, but they will get asked again periodically if they continue to
266+
be inactive.
267+
268+
# Drawbacks
269+
[drawbacks]: #drawbacks
270+
271+
Why should we *not* do this?
272+
273+
# Rationale and alternatives
274+
[rationale-and-alternatives]: #rationale-and-alternatives
275+
276+
This RFC represents, effectively, the smallest extension to our structure
277+
that could possibly work. One could imagine more elaborate structures along a few dimensions.
278+
279+
**More senior levels of membership.** One concern is that the set of
280+
**members** of the compiler team may grow too large for things like
281+
FCP (where each person must check their box) to be feasible. This
282+
could be resolved by moving away from FCP-based decision making (which
283+
is rarely used in the compiler anyhow), but it may also be worth
284+
considering another level of membership (e.g., a **senior
285+
member"). Senior members could be used for FCP-level decisions, which
286+
would presumably be relatively rare. At present there is a kind of
287+
implicit amount of "seniority" amongst members, where the opinions of
288+
people who have been around for longer are obviously given great
289+
weight, but formalizing this could have value.
290+
291+
**Specialists and organizers.** Right now, we don't draw a distinction
292+
between people who write code and those who (for example) perform more
293+
organizational roles (as of the time of this writing, we don't have
294+
any members who perform more organizational roles exclusively, but
295+
that is a likely future development). There will definitely be
296+
contributors who would rather not participate in the more
297+
organizational aspects of running the team, but would prefer to simply
298+
write code. As the team gets more and more organized, it seems likely
299+
that we may want to recognize this distinction, just to avoid things
300+
like pinging folks with organizational questions when they are not
301+
interested in that. But we could also address this by growing more
302+
kinds of groups within the set of members, such that one rarely pings
303+
the full set of members.
304+
305+
# Prior art
306+
[prior-art]: #prior-art
307+
308+
The compiler team has always drawn a distinction between r+
309+
privileges, which were granted relatively easily, and full team
310+
membership. However, the rules and expectations were not formally
311+
written out as they are here. Many other projects seem to operate in a
312+
similarly informal fashion (e.g., @goldfirere indicates that GHC tends
313+
to give privileges ["when someone starts contributing a
314+
lot"](https://github.com/rust-lang/compiler-team/pull/52#discussion_r274750230)).
315+
316+
Here is a brief survey (by no means complete) of the process used in a few other
317+
open source communities:
318+
319+
- Mozilla: [gaining commit access requires a small number of "module
320+
owners or peers" to vouch for
321+
you](https://www.mozilla.org/en-US/about/governance/policies/commit/access-policy/)
322+
(the precise amount depends on the code). However, gaining the ability to
323+
review code (known as becoming a "peer" for the module) is [done at the
324+
discretion of the module owner](https://www.mozilla.org/en-US/about/governance/policies/module-ownership/).
325+
- Python: Becoming a core developer typically starts when a core
326+
developer offers you the chain to gain commit privilege and spends
327+
some time monitoring your commits to make sure you understand the
328+
development process. If other core developers agree that you should
329+
gain commit privileges, then you are extended an official offer
330+
(paraphrased from [this section of the Python Developer's
331+
guide](https://devguide.python.org/coredev/#how-to-become-a-core-developer)).
332+
333+
# Unresolved questions
334+
[unresolved-questions]: #unresolved-questions
335+
336+
**Are "contributor" and "member" the best names to use?** The term
337+
"member" is used pretty universally amongst subteams to refer to
338+
"decision makers", so I wanted to stick to it, but I was tempted by
339+
other terms like "member" and "senior member".
340+
341+
**What set of privileges should be retained in alumni status?** For
342+
example, should you still have r+ privileges? I'm inclined to say no.
343+
344+
**What level of inactivity merits one for alumni status?** The RFC
345+
presently says 6 months, but that number was pulled out of a
346+
(metaphorical) hat.
347+
348+
# Future possibilities
349+
[future-possibilities]: #future-possibilities
350+
351+
In the future, it would be good to add an "active mentorship" plan for
352+
helping people move from contributor to full member. This idea is
353+
presently filed as [rust-lang/compiler-team#56][].
354+
355+
[rust-lang/compiler-team#56]: https://github.com/rust-lang/compiler-team/issues/56
356+
357+
To make more explicit room for non-coding contributors, we should
358+
consider allowing contributors and members to set a "subtitle"
359+
describing their role in the project. This idea is presently filed as
360+
[rust-lang/compiler-team#64][].
361+
362+
[rust-lang/compiler-team#64]: https://github.com/rust-lang/compiler-team/issues/64
363+
364+
We may want to refine the notion of alumni. In particular, members may
365+
wish to drop back to contributor level without becoming full alumni,
366+
and this RFC doesn't account for that (but it also doesn't preclude
367+
it).

0 commit comments

Comments
 (0)