Skip to content

Commit b5169ee

Browse files
committed
MMTk Enhancement Proposal
1 parent 79fb0bb commit b5169ee

File tree

1 file changed

+265
-0
lines changed

1 file changed

+265
-0
lines changed

docs/team/mep.md

+265
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,265 @@
1+
MMTk Enhancement Proposal (MEP)
2+
===============================
3+
4+
An MMTk Enhancement Proposal (MEP) is a more formal variant of issue. It has a special format, and
5+
will undergo a more thorough review process. Its goal is helping the MMTk developers making more
6+
informed decisions.
7+
8+
MEP is inspired by the Java Enhancement Proposal, described in https://openjdk.org/jeps/1 However,
9+
unlike JEP which is more open-ended, MEP is more focused on making design decisions.
10+
11+
# When is MEP required?
12+
13+
An MEP is required when making a significant change to the design of the MMTk core. It is
14+
applicable to any kind of significant changes, including but not limited to:
15+
16+
- Bug fixes, including performance bug fixes, that require change to a major part of the MMTk
17+
core.
18+
- Changes to the MMTk core to implement a feature demanded by bindings.
19+
- Major refactoring to the MMTk core.
20+
21+
One purpose of MEP is reducing the risks to the future development of MMTk. Large-scale changes and
22+
public API changes usually indicate such risks, but these are only indicators, not criteria. The
23+
assessment of risks is subjective, and we need to discuss in order to reach consensus.
24+
25+
Note: JEP is also required for things that "require two or more weeks of engineering effort" and/or
26+
"are in high demand by developers or customers". We don't judge whether we need MEP based on
27+
engineering effort or public demand. Many PRs for MMTk require multiple weeks of work and rigorous
28+
testing, but most of them can be settled with regular issues and PRs. We label priorities using
29+
GitHub issue tags, such as `P-normal`, `P-high`, etc. If a feature is requested often, and we have
30+
man power for that, we can raise the priority.
31+
32+
# Format
33+
34+
A MEP will be posted as a GitHub issue in the `mmtk-core` repository. It should contain certain
35+
tags:
36+
37+
- **The `MEP` tag**
38+
- It is used to identify MEPs.
39+
- **Area (`A-*`)**
40+
- For example, `A-gc-algorithm`.
41+
- **Category (`C-*`)**
42+
- For example, `C-refactoring`.
43+
- Note that not all MEP are "enhancement" in the sense of `C-enhancement`. Some MEPs may
44+
simply be intended for fixing long-standing hard-to-fix bugs by making non-trivial changes.
45+
- **Goal (`G-*`)**
46+
- For example, `G-safety`.
47+
48+
We use the format of JEP (https://openjdk.org/jeps/2) as a frame of reference, but deviate from it
49+
when needed.
50+
51+
A MEP should have the following sections:
52+
53+
- TL;DR (summary)
54+
- Goal
55+
- Non-goal (optional)
56+
- Success Metric
57+
- Motivation
58+
- Description
59+
- Impact on Performance
60+
- Impact on Software Engineering
61+
- Risks
62+
- Long Term Performance Risks
63+
- Long Term Software Engineering Risks
64+
- Impact on API
65+
- Testing
66+
- Alternatives (optional)
67+
- Risks and Assumptions (optional)
68+
- Related Issues (optional)
69+
70+
Note: Sections in JEP but not in MEP:
71+
72+
- Dependencies: We have the *Related Issues* section, instead.
73+
74+
# Sections
75+
76+
## TL;DR
77+
78+
This section should use about one to three sentences to summarize the MEP. JEP calls it "Summary",
79+
but we call it "TL;DR" (too long, didn't read) to emphasize that it should be short enough so that
80+
readers (including those in a hurry) can get the main idea very quickly without reading through the
81+
MEP.
82+
83+
## Goals
84+
85+
What are the goals of the proposal? This should be succinct. If there's more than one goal,
86+
enumerate them in a list.
87+
88+
## Non-Goals
89+
90+
Optional. Use this section to explicitly exclusive goals out of the scope of the current MEP.
91+
92+
## Success Metric
93+
94+
How do we determine whether the MEP is a success? This can include improvements in performance,
95+
safety, readability, maintainability, etc. Enumerate the success metrics in a list (details should
96+
be in the *Description* section).
97+
98+
## Motivation
99+
100+
Why should this work be done? Who is asking for it?
101+
102+
Make sure the readers understand the problem this MEP is trying to address. You can also mention
103+
the languages, VMs, or users that need this enhancement.
104+
105+
If there are alternative ways to solve the problem, you can mention them here, but keep in mind that
106+
there is an *Alternatives* section for adding more details.
107+
108+
## Description
109+
110+
This is the main section of the MEP. Describe the enhancement in detail.
111+
112+
If you have already made prototype implementations for this MEP, add hyperlinks to the relevant PRs,
113+
commits, repositories, etc.
114+
115+
If not, describe how you intend to implement this MEP. You should think about all parts of
116+
mmtk-core that your MEP may interact with.
117+
118+
This section will be long, and will usually be divided into many subsections. The following
119+
subsections must be included:
120+
121+
- Impact on Performance
122+
- Impact on Software Engineering
123+
124+
### Impact on Performance
125+
126+
Describe how this MEP will affect the performance. "This MEP should not have any impact on
127+
performance" is still a valid description if it is so.
128+
129+
### Impact on Software Engineering
130+
131+
Describe whether this MEP will make software engineering easier or more difficult. Will it make the
132+
code easier or harder to understand, maintain and/or change?
133+
134+
## Risks
135+
136+
Outline the *long-term* risks posed by this MEP and how those risks are mitigated. **The core
137+
purpose of the MEP process is to avoid the unintentional introduction of changes that bring
138+
long-term negative impacts to MMTk**. This section is about identifying and accounting for risks
139+
associated with such negative outcomes. It should include the following subsections:
140+
141+
- Long Term Performance Risks
142+
- Long Term Software Engineering Risks
143+
- Impact on API
144+
145+
### Long Term Performance Risks
146+
147+
Enumerate possible negative long-term performance impacts of this MEP, and for each explain how that
148+
risk will be mitigated. Note: this is *not* about the immediate performance impact of the MEP,
149+
but about the impact on future work. For example, this includes identifying changes that may impede
150+
the future introduction of entirely new algorithms, or entirely new optimizations.
151+
152+
It is OK for us to accept temporary minor performance reduction to make more significant
153+
improvements possible. On the contrary, it is bad to make changes to temporarily improve
154+
performance and make long-term improvements hard or impossible.
155+
156+
### Long Term Software Engineering Risks
157+
158+
Enumerate possible negative long-term software engineering impacts of this MEP, and for each explain
159+
how that risk will be mitigated.
160+
161+
One of the core goals of MMTk is making GC development easy. If a developer wants to develop, for
162+
example, a new GC algorithm, it should be easy to implement it quickly and easily in MMTk. We don't
163+
want changes that make this difficult.
164+
165+
### Impact on API
166+
167+
Outline how this MEP will affect APIs, both public and internal. Enumerate the cases, and for each
168+
case, explain how the risk of negative consequences will be mitigated and/or justify the change.
169+
170+
## Testing
171+
172+
If applicable, describe the way to reproduce the problem, and the way to check if the change
173+
actually works. For MMTk, it includes but is not limited to what (micro or macro) benchmarks to
174+
use, and which VM binding (with or without changes) to use.
175+
176+
## Alternatives
177+
178+
Optional. If there are more than one way to solve the problem, describe them here and explain why
179+
this approach is preferred.
180+
181+
## Assumptions
182+
183+
Optional. For the design changes of MMTk, this part mainly includes assumptions about, for example,
184+
the VM's requirements, the GC algorithms we are supporting, the OS/architecture MMTK is running on,
185+
etc. If those assumptions no longer hold, we may need to reconsider the design. Describe such
186+
concerns in this section.
187+
188+
## Related Issues
189+
190+
Optional. If there are related issues, PRs, etc., include them here.
191+
192+
Sometimes people create ordinary issues and PRs to fix some problems, and later MMTk developers
193+
consider that the change is too fundamental and needs a more thorough reviewing process. If that is
194+
the case, add hyperlinks to those original issues and PRs.
195+
196+
# MEP Reviewing Process
197+
198+
## Initiate an MEP
199+
200+
An MEP is initiated by creating an MEP issue with the format described in this document.
201+
202+
### Escalate normal PRs/issues and request for MEP
203+
204+
For normal PRs/issues, if any team member thinks it should be an MEP, they should escalate it and
205+
discuss with the team. If the team decide that it should be an MEP, the PR/issue should be set to
206+
'Request for MEP', and expects an MEP issue from the contributor. If there is no further action from
207+
the contributor for a period of time, the PR/issue is considered as stale and it may get assigned to
208+
an MMTk team member or may be closed.
209+
210+
Note that a team member may escalate an PR/issue for normal discussion, rather than requesting for
211+
MEP. As we discussed, MEP is a heavy-weight process, and we should not abuse requesting it.
212+
213+
## Review an MEP
214+
215+
### Criteria
216+
217+
The MMTk team will first decide if the proposal meets the criteria for being an MEP. If it does not
218+
meet the criteria, the proposal issue will be closed, and related changes should be treated as a
219+
normal PR/issue.
220+
221+
The criteria for what need to be an MEP is mostly subjective, based on a consensus model within the
222+
MMTk team. We also provide a list of exemption for what do not need to be an MEP.
223+
224+
#### MEP Exemption
225+
226+
MEP is intended to help avoid design changes that may have profound negative impact in the future.
227+
Some changes will not have profound impact, and can be easily reverted if necessary. They should be
228+
exempt from the heavy-weight MEP process, and should not be escalated to request for MEP. The
229+
exemption is intended to ensure that we won't abuse using MEP and that we won't impose burden on the
230+
contributors to submit an extra MEP proposal. An exempted PR may still be escalated for team
231+
discussion, but it is exempt from being requested for MEP (submitting a MEP proposal, and going
232+
through the MEP process).
233+
234+
##### Exemption 1: Well-encapsulated changes
235+
236+
Changes that are well-encapsulated and decoupled intrinsically can be easily corrected in the future
237+
and will not have profound impact for the future. A PR that has no public API change, and no module
238+
API change between the top-level modules (`plan`, `policy`, `scheduler`, `util` and `vm` at the time
239+
of writing) is exempt from MEP.
240+
241+
### Review
242+
243+
The MMTk team will discuss the proposal in weekly meetings. This process may take a while. We will
244+
keep posting the discussion to the MEP issue, and encourage further inputs from the contributor, and
245+
the community. An MEP may get updated and refined during the process.
246+
247+
### Outcome
248+
249+
At the end of the review, the MEP will be accepted or rejected based on the consensus of the MMTk
250+
team. If an MEP is accepted, A PR may follow the MEP and will be reviewed with the normal PR review
251+
process.
252+
253+
If an MEP is rejected, future related MEPs may not be reviewed again unless they are substantially
254+
different. We encourage people to get involved in the review discussion, and refine the proposal so
255+
it will be accepted.
256+
257+
## Communication
258+
259+
After an MEP is implemented, the MMTk team shall announce the significant changes as the results of
260+
the MEP to make them known to the community. We shall communicate with our sponsors about such
261+
changes, too, in our regular meetings.
262+
263+
<!--
264+
vim: ts=4 sw=4 sts=4 et tw=100
265+
-->

0 commit comments

Comments
 (0)