Skip to content

Commit 94e57fc

Browse files
committed
Auto merge of #3807 - RalfJung:projects, r=oli-obk
add 'project' process guidlines for larger contributions Fixes rust-lang/miri#3443 I am honestly not entirely sure what the consensus from what issue was. I feel like the epoll PR worked reasonably well, and not having been closely involved I am not sure which process `@oli-obk` followed there. Compared to the first draft in #3443 I tried to make this less formal and framed more as guidelines than hard rules.
2 parents 83f1b38 + 293be46 commit 94e57fc

File tree

1 file changed

+34
-1
lines changed

1 file changed

+34
-1
lines changed

src/tools/miri/CONTRIBUTING.md

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,43 @@ find useful.
88
Check out the issues on this GitHub repository for some ideas. In particular,
99
look for the green `E-*` labels which mark issues that should be rather
1010
well-suited for onboarding. For more ideas or help with hacking on Miri, you can
11-
contact us (`oli-obk` and `RalfJ`) on the [Rust Zulip].
11+
contact us on the [Rust Zulip]. See the [Rust website](https://www.rust-lang.org/governance/teams/compiler#team-miri)
12+
for a list of Miri maintainers.
1213

1314
[Rust Zulip]: https://rust-lang.zulipchat.com
1415

16+
### Larger-scale contributions
17+
18+
If you are thinking about making a larger-scale contribution -- in particular anything that needs
19+
more than can reasonably fit in a single PR to be feature-complete -- then please talk to us before
20+
writing significant amounts of code. Generally, we will ask that you follow a three-step "project"
21+
process for such contributions:
22+
23+
1. Clearly define the **goal** of the project. This defines the scope of the project, i.e. which
24+
part of which APIs should be supported. If this involves functions that expose a big API surface
25+
with lots of flags, the project may want to support only a tiny subset of flags; that should be
26+
documented. A good way to express the goal is with one or more test cases that Miri should be
27+
able to successfully execute when the project is completed. It is a good idea to get feedback
28+
from team members already at this stage to ensure that the project is reasonably scoped and
29+
aligns with our interests.
30+
2. Make a **design** for how to realize the goal. A larger project will likely have to do global
31+
changes to Miri, like adding new global state to the `Machine` type or new methods to the
32+
`FileDescription` trait. Often we have to iterate on those changes, which can quite substantially
33+
change how the final implementation looks like.
34+
35+
The design should be reasonably concrete, i.e. for new global state or methods the corresponding
36+
Rust types and method signatures should be spelled out. We realize that it can be hard to make a
37+
design without doing implementation work, in particular if you are not yet familiar with the
38+
codebase. Doing draft implementations in phase 2 of this process is perfectly fine, just please
39+
be aware that we might request fundamental changes that can require significantly reworking what
40+
you already did. If you open a PR in this stage, please clearly indicate that this project is
41+
still in the design stage.
42+
43+
3. Finish the **implementation** and have it reviewed.
44+
45+
This process is largely informal, and its primary goal is to more clearly communicate expectations.
46+
Please get in touch with us if you have any questions!
47+
1548
## Preparing the build environment
1649

1750
Miri heavily relies on internal and unstable rustc interfaces to execute MIR,

0 commit comments

Comments
 (0)