Skip to content

Commit c619332

Browse files
authored
Merge pull request #52 from nikomatsakis/compiler-team-contributors
RFC: Compiler team contributors
2 parents 71f4997 + e837242 commit c619332

File tree

2 files changed

+365
-0
lines changed

2 files changed

+365
-0
lines changed
+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
This direction contains drafts of "Meta WG"-related RFCs. These are
2+
RFCs that pertain to compiler team process and which are being jointly
3+
written as part of the Meta working group.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,362 @@
1+
- Feature Name: (fill me in with a unique ident, `my_awesome_feature`)
2+
- Start Date: (fill me in with today's date, YYYY-MM-DD)
3+
- RFC PR: [rust-lang/rfcs#0000](https://github.com/rust-lang/rfcs/pull/0000)
4+
- Rust Issue: [rust-lang/rust#0000](https://github.com/rust-lang/rust/issues/0000)
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 will be listed on the [compiler expert map](https://github.com/rust-lang/compiler-team/blob/9d8c387ddbd01ced14eaab480cddb00c2d723f36/experts/MAP.md),
154+
which lists folks who are familiar with each area of the compiler.
155+
- Contributors are listed on the rust-lang.org web page and invited to
156+
the Rust All Hands.
157+
158+
It also implies some obligations (in some cases, optional obligations):
159+
160+
- Contributors will be asked if they wish to be added to highfive rotation.
161+
- Contributors are held to a higher standard than ordinary folk when
162+
it comes to the [Code of Conduct][CoC].
163+
164+
### Compiler team members
165+
166+
As a contributor gains in experience, they may be asked to become a
167+
**compiler team member**. This implies that they are not only a
168+
regular contributor, but are actively helping to shape the direction
169+
of the team or some part of the compiler (or multiple parts).
170+
171+
- Compiler team members are the ones who select when people should be
172+
promoted to compiler team contributor or to the level of member.
173+
- Compiler team members are consulted on FCP decisions (which, in the
174+
compiler team, are relatively rare).
175+
- Working groups must always include at least one compiler team member
176+
as a lead (though groups may have other leads who are not yet full
177+
members).
178+
179+
### How promotion decisions are made
180+
[hdam]: #how-promotion-decisions-are-made
181+
182+
Promotion decisions (from participant to contributor, and from
183+
contributor to member) are made by having an active team member send
184+
an e-mail to the alias `[email protected]`. This e-mail
185+
should include:
186+
187+
- the name of the person to be promoted
188+
- a draft of the public announcement that will be made
189+
190+
Compiler-team members should send e-mail giving their explicit assent,
191+
or with objections. Objections should always be resolved before the
192+
decision is made final. E-mails can also include edits or additions for the
193+
public announcement.
194+
195+
To make the final decision:
196+
197+
- All objections must be resolved.
198+
- There should be a "sufficient number" (see below) of explicit
199+
e-mails in favor of addition (including the team lead).
200+
- The nominator (or some member of the team) should reach out to the person
201+
in question and check that they wish to join.
202+
203+
We do not require all team members to send e-mail, as historically
204+
these decisions are not particularly controversial. For promotion to a
205+
contributor, the only requirement is that the compiler team lead
206+
agrees. For promotion to a full member, more explicit mails in favor
207+
are recommended.
208+
209+
Once we have decided to promote, then the announcement can be posted
210+
to internals, and the person added to the team repository.
211+
212+
### Not just code
213+
214+
It is worth emphasizing that becoming a contributor or member of the
215+
compiler team does not necessarily imply writing PRs. There are a wide
216+
variety of tasks that need to be done to support the compiler and
217+
which should make one eligible for membership. Such tasks would
218+
include organizing meetings, participating in meetings, bisecting and
219+
triaging issues, writing documentation, working on the
220+
rustc-guide. The most important criteria for elevation to contributor,
221+
in particular, is **regular and consistent** participation. The most
222+
important criteria for elevation to member is **actively shaping the
223+
direction of the team or compiler**.
224+
225+
## Alumni status
226+
227+
If at any time a current contributor or member wishes to take a break
228+
from participating, they can opt to put themselves into alumni status.
229+
When in alumni status, they will be removed from Github aliases and
230+
the like, so that they need not be bothered with pings and messages.
231+
They will also not have r+ privileges. **Alumni members will however
232+
still remain members of the GitHub org overall.**
233+
234+
People in alumni status can ask to return to "active" status at any
235+
time. This request would ordinarily be granted automatically barring
236+
extraordinary circumstances.
237+
238+
People in alumni status are still members of the team at the level
239+
they previously attained and they may publicly indicate that, though
240+
they should indicate the time period for which they were active as
241+
well.
242+
243+
### Changing back to contributor
244+
245+
If desired, a team member may also ask to move back to contributor
246+
status. This would indicate a continued desire to be involved in
247+
rustc, but that they do not wish to be involved in some of the
248+
weightier decisions, such as who to add to the team. Like full alumni,
249+
people who were once full team members but who went back to
250+
contributor status may ask to return to full team member status. This
251+
request would ordinarily be granted automatically barring
252+
extraordinary circumstances.
253+
254+
### Automatic alumni status after 6 months of inactivity
255+
256+
If a contributor or a member has been inactive in the compiler for 6
257+
months, then we will ask them if they would like to go to alumni
258+
status. If they respond yes or do not respond, they can be placed on
259+
alumni status. If they would prefer to remain active, that is also
260+
fine, but they will get asked again periodically if they continue to
261+
be inactive.
262+
263+
# Drawbacks
264+
[drawbacks]: #drawbacks
265+
266+
Why should we *not* do this?
267+
268+
# Rationale and alternatives
269+
[rationale-and-alternatives]: #rationale-and-alternatives
270+
271+
This RFC represents, effectively, the smallest extension to our structure
272+
that could possibly work. One could imagine more elaborate structures along a few dimensions.
273+
274+
**More senior levels of membership.** One concern is that the set of
275+
**members** of the compiler team may grow too large for things like
276+
FCP (where each person must check their box) to be feasible. This
277+
could be resolved by moving away from FCP-based decision making (which
278+
is rarely used in the compiler anyhow), but it may also be worth
279+
considering another level of membership (e.g., a **senior
280+
member"). Senior members could be used for FCP-level decisions, which
281+
would presumably be relatively rare. At present there is a kind of
282+
implicit amount of "seniority" amongst members, where the opinions of
283+
people who have been around for longer are obviously given great
284+
weight, but formalizing this could have value.
285+
286+
**Specialists and organizers.** Right now, we don't draw a distinction
287+
between people who write code and those who (for example) perform more
288+
organizational roles (as of the time of this writing, we don't have
289+
any members who perform more organizational roles exclusively, but
290+
that is a likely future development). There will definitely be
291+
contributors who would rather not participate in the more
292+
organizational aspects of running the team, but would prefer to simply
293+
write code. As the team gets more and more organized, it seems likely
294+
that we may want to recognize this distinction, just to avoid things
295+
like pinging folks with organizational questions when they are not
296+
interested in that. But we could also address this by growing more
297+
kinds of groups within the set of members, such that one rarely pings
298+
the full set of members.
299+
300+
# Prior art
301+
[prior-art]: #prior-art
302+
303+
The compiler team has always drawn a distinction between r+
304+
privileges, which were granted relatively easily, and full team
305+
membership. However, the rules and expectations were not formally
306+
written out as they are here. Many other projects seem to operate in a
307+
similarly informal fashion (e.g., @goldfirere indicates that GHC tends
308+
to give privileges ["when someone starts contributing a
309+
lot"](https://github.com/rust-lang/compiler-team/pull/52#discussion_r274750230)).
310+
311+
Here is a brief survey (by no means complete) of the process used in a few other
312+
open source communities:
313+
314+
- Mozilla: [gaining commit access requires a small number of "module
315+
owners or peers" to vouch for
316+
you](https://www.mozilla.org/en-US/about/governance/policies/commit/access-policy/)
317+
(the precise amount depends on the code). However, gaining the ability to
318+
review code (known as becoming a "peer" for the module) is [done at the
319+
discretion of the module owner](https://www.mozilla.org/en-US/about/governance/policies/module-ownership/).
320+
- Python: Becoming a core developer tyipically starts when a core
321+
developer offers you the chain to gain commit privilege and spends
322+
some time monitoring your commits to make sure you understand the
323+
development process. If other core developers agree that you should
324+
gain commit privileges, then you are extended an official offer
325+
(paraphrased from [this section of the Python Developer's
326+
guide](https://devguide.python.org/coredev/#how-to-become-a-core-developer)).
327+
328+
# Unresolved questions
329+
[unresolved-questions]: #unresolved-questions
330+
331+
**Are "contributor" and "member" the best names to use?** The term
332+
"member" is used pretty universally amongst subteams to refer to
333+
"decision makers", so I wanted to stick to it, but I was tempted by
334+
other terms like "member" and "senior member".
335+
336+
**What set of privileges should be retained in alumni status?** For
337+
example, should you still have r+ privileges? I'm inclined to say no.
338+
339+
**What level of inactivity merits one for alumni status?** The RFC
340+
presently says 6 months, but that number was pulled out of a
341+
(metaphorical) hat.
342+
343+
# Future possibilities
344+
[future-possibilities]: #future-possibilities
345+
346+
In the future, it would be good to add an "active mentorship" plan for
347+
helping people move from contributor to full member. This idea is
348+
presently filed as [rust-lang/compiler-team#56][].
349+
350+
[rust-lang/compiler-team#56]: https://github.com/rust-lang/compiler-team/issues/56
351+
352+
To make more explicit room for non-coding contributors, we should
353+
consider allowing contributors and members to set a "subtitle"
354+
describing their role in the project. This idea is presently filed as
355+
[rust-lang/compiler-team#64][].
356+
357+
[rust-lang/compiler-team#64]: https://github.com/rust-lang/compiler-team/issues/64
358+
359+
We may want to refine the notion of alumni. In particular, members may
360+
wish to drop back to contributor level without becoming full alumni,
361+
and this RFC doesn't account for that (but it also doesn't preclude
362+
it).

0 commit comments

Comments
 (0)