Skip to content

Commit f8037ba

Browse files
authored
Merge pull request #136 from rust-lang-nursery/teams
[RFC] rust-embedded teams and maintenance of the embedded ecosystem
2 parents a0d5ab8 + ed9bfbc commit f8037ba

File tree

1 file changed

+189
-0
lines changed

1 file changed

+189
-0
lines changed

rfcs/0000-teams.md

Lines changed: 189 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,189 @@
1+
# Summary
2+
3+
This RFC proposes that we:
4+
5+
- Move crates that are widely used in the embedded ecosystem into the [rust-embedded] organization
6+
7+
- Significantly expand the membership of the rust-embedded org and organize the members into teams
8+
focused in different areas.
9+
10+
- Create guidelines for developing and maintaining the crates in the rust-embedded org.
11+
12+
- Settle on a policy for the inclusion of new crates and creation of new teams.
13+
14+
[rust-embedded]: https://github.com/rust-embedded
15+
16+
# Detailed design
17+
18+
## Teams
19+
20+
This section describes the role of the teams and mechanisms for changing their memberships.
21+
22+
### Role
23+
24+
The role of a team is to oversee the development of the crates under their purview. With input from
25+
stakeholders they set the development roadmap of each crate assigned to them.
26+
27+
The members of a team are the main reviewers of the crates assigned to the team. Teams are free to
28+
add collaborators (reviewers) to the repositories they oversee, and to increase / modify their
29+
membership as they see fit.
30+
31+
The team is in charge of publishing new versions of the crates they oversee to crates.io, and of
32+
maintaining the CHANGELOG of the project.
33+
34+
### Membership
35+
36+
For visibility, the membership of each team, along with the set of crates they oversee, will be
37+
listed in the README of the rust-embedded/wg (previously known as rust-lang-nursery/embedded-wg)
38+
repository.
39+
40+
#### Adding new members
41+
42+
A person that wants to join a team (the "candidate") will first consult with (part of) the team. The
43+
team may decide that the candidate participates as a collaborator to one of the repositories
44+
maintained by the team before they apply for membership. After receiving a soft OK from (part of)
45+
the team the candidate will send a PR to the rust-embedded/wg repository modifying the README file
46+
to list themselves as a new member.
47+
48+
The complete team will review the PR and perform one of these 3 actions: approve the PR, abstain
49+
from reviewing, or raise a concern. When the PR achieves the *majority* of votes (defined below) it
50+
will be merged and the membership changes will be made effective.
51+
52+
#### Voting majority
53+
54+
Voting majority is defined as having more approvals than abstentions and zero unresolved concerns.
55+
In the case where there are equal numbers of approvals and abstentions (i.e. the team has an even
56+
number of members) the WG lead will give the casting vote.
57+
58+
#### Removing members
59+
60+
When (part of) a team wishes to remove one of its member they will make a PR to the
61+
rust-embedded/wg repository updating the README with the modified membership. The team minus the
62+
member being removed will vote on the proposal. After voting majority (defined in the previous
63+
section) has been achieved the PR will be merged and the membership changes will be made effective.
64+
65+
In the case where the member wishes to retire the procedure is similar. The retiring member will
66+
make a PR notifying the team (e.g. "cc rust-embedded/$team"). In this case no voting is necessary.
67+
The PR will be merged and the changes will be made effective.
68+
69+
### The triage team
70+
71+
A special team named `triage` will be also be created. This team has the *very* important task of
72+
keeping the PR queues moving and making sure no PR gets stuck in the review limbo.
73+
74+
This team will consist of volunteers that will periodically triage open PRs to rust-embedded repos.
75+
When triaging the members of the `triage` team will assign or change reviewers, add or change the
76+
labels of the PR, and/or comment on the PRs; they will not review PRs while triaging.
77+
78+
#### The triage procedure
79+
80+
The proposed triage procedure is [the one used to triage PRs in the rust-lang/rust
81+
repo][rust-triage].
82+
83+
[rust-triage]: https://forge.rust-lang.org/triage-procedure.html
84+
85+
## Projects
86+
87+
The section describes the guideline for incorporating projects into the rust-embedded organization
88+
and the mechanism for adopting projects.
89+
90+
### Inclusion guideline
91+
92+
Only projects (crates or documentation) that are widely used and / or that have a wide scope will be
93+
maintained by the embedded-rust org. Additionally, if the project is a crate it must compile on the
94+
stable channel by Rust 1.31 (2018-12-06); if the project is documentation all the included code and
95+
patterns must be usable on the stable channel.
96+
97+
In principle, this guideline excludes HAL implementation crates like the [`stm32f103xx-hal`] and
98+
board support crates because of their narrow scope but exceptions could be made for crates, like the
99+
[`f3`] crate, that are dependencies of widely used resources like the [`discovery`] book.
100+
101+
[`stm32f103xx-hal`]: https://github.com/japaric/stm32f103xx-hal
102+
[`f3`]: https://github.com/japaric/f3
103+
[`discovery`]: https://github.com/japaric/discovery
104+
105+
### Adopting projects
106+
107+
An author that wishes to have their project adopted by the rust-embedded org should first approach
108+
the team that would oversee their crate if it were to be adopted. If the author is unsure which team
109+
should take ownership of their project they will first open an issue in the rust-embedded/wg
110+
repository requesting input.
111+
112+
After getting a soft OK from (part of) the team the author will send a PR to rust-embedded/wg adding
113+
their repository to the list of crates the team maintains. After voting majority (see definition in
114+
the membership section) the PR will be merged, ownership will be transferred and the author will
115+
become a collaborator of the transferred repository.
116+
117+
## Guidelines
118+
119+
This section contains a set of guidelines that aim to standardize the management of projects
120+
within the rust-embedded org.
121+
122+
### Reviewing
123+
124+
- The `master` branches will be protected and can't be directly pushed to.
125+
126+
- All changes will go through a PR that must pass review and [bors] before landing. Team members
127+
and collaborators can't approve their own PRs.
128+
129+
[bors]: https://bors.tech
130+
131+
- Breaking and major changes must be consulted with other team members, reviewers and stakeholders
132+
before the PR is reviewed. The team will decide whether a mini [RFC], listing the rationale of the
133+
change and the alternatives, needs to be written.
134+
135+
[RFC]: https://github.com/rust-lang/rfcs#table-of-contents
136+
137+
- Mandatory: Read the [Rust API guidelines] before you start reviewing PRs that add new API.
138+
139+
[Rust API guidelines]: https://rust-lang-nursery.github.io/api-guidelines/about.html
140+
141+
### Publishing
142+
143+
- Publish patch releases (bug fixes) often.
144+
145+
- Publish minor releases as soon as all the new features have been properly documented.
146+
147+
- Try to avoid *frequent* major (breaking) releases. Collect several breaking changes into a single
148+
major release.
149+
150+
- Before publishing a breaking release, read [semver-trick] and apply it to minimize breakage.
151+
152+
[semver-trick]: https://github.com/dtolnay/semver-trick
153+
154+
### Repository contents
155+
156+
- The README of all repositories will indicate which team is in charge of the repository and it will
157+
link to the teams section of the README in the rust-embedded/wg repo.
158+
159+
- All the repositories that are crates will maintain a CHANGELOG.md file that adheres to the [keep a
160+
changelog] format.
161+
162+
[keep a changelog]: https://keepachangelog.com/en/1.0.0/
163+
164+
- The repository will include a copy of Rust's [Code of Conduct]. Each team will enforce the code of
165+
conduct in the repositories they govern.
166+
167+
[Code of Conduct]: https://github.com/rust-lang/rust/blob/master/CODE_OF_CONDUCT.md
168+
169+
- Where appropriate the repositories will adopt the 2018 milestones used in the rust-embedded/wg
170+
repository.
171+
172+
## Other changes
173+
174+
- Transfer the `rust-lang-nursery/embedded-wg` to the rust-embedded org and rename it to
175+
`rust-embedded/wg`.
176+
177+
- The embedded Rust book and the embedonomicon which currently live in `rust-embedded/wg` will be
178+
moved into their own repositories.
179+
180+
- The newletters in `rust-embedded/wg` will also be moved into their own repository.
181+
182+
- The logo of the rust-embedded org will change to the embedded WG logo.
183+
184+
- All members of the rust-embedded org will be able to manage issues and PRs in the rust-embedded/wg
185+
repository.
186+
187+
# Alternatives
188+
189+
An alternative to this proposal is to have the architectures teams be their own independent orgs.

0 commit comments

Comments
 (0)