diff --git a/.github/ISSUE_TEMPLATE/mmtk-enhancememnt-proposal--mep-.md b/.github/ISSUE_TEMPLATE/mmtk-enhancememnt-proposal--mep-.md new file mode 100644 index 0000000000..acfb7b87a2 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/mmtk-enhancememnt-proposal--mep-.md @@ -0,0 +1,125 @@ +--- +name: MMTk Enhancememnt Proposal (MEP) +about: Use this template to create an MMTk Enhancement Proposal (MEP). +title: '' +labels: MEP +assignees: '' + +--- + +# TL;DR + +This section should use about one to three sentences to summarize the MEP. As the name "TL;DR" (too +long, didn't read) suggests, this section should be short enough so that readers (including those in +a hurry) can get the main idea very quickly without reading through the MEP. + +# Goal + +What are the goals of the proposal? This should be succinct. If there's more than one goal, +enumerate them in a list. + +- goal 1 +- goal 2 +- ... + +# Non-goal + +Optional. Use this section to explicitly exclusive goals out of the scope of the current MEP. + +- non-goal 1 +- non-goal 2 +- ... + +# Success Metric + +How do we determine whether the MEP is a success? This can include improvements in performance, +safety, readability, maintainability, etc. Enumerate the success metrics in a list (details should +be in the *Description* section). + +# Motivation + +Why should this work be done? Who is asking for it? + +Make sure the readers understand the problem this MEP is trying to address. You can also mention +the languages, VMs, or users that need this enhancement. + +If there are alternative ways to solve the problem, you can mention them here, but keep in mind that +there is an *Alternatives* section for adding more details. + +# Description + +This is the main section of the MEP. Describe the enhancement in detail. + +If you have already made prototype implementations for this MEP, add hyperlinks to the relevant PRs, +commits, repositories, etc. + +If not, describe how you intend to implement this MEP. You should think about all parts of +mmtk-core that your MEP may interact with. + +This section will be long. Feel free to add more subsections. + +## Impact on Performance + +Describe how this MEP will affect the performance. "This MEP should not have any impact on performance" is still a valid description if it is so. + +## Impact on Software Engineering + +Describe whether this MEP will make software engineering easier or more difficult. Will it make the code easier or harder to understand, maintain and/or change? + +# Risks + +In the following sub-sections, outline the *long-term* risks posed by this MEP and how those risks are mitigated. **The core +purpose of the MEP process is to avoid the unintentional introduction of changes that bring +long-term negative impacts to MMTk**. This section is about identifying and accounting for risks +associated with such negative outcomes. It should include the following subsections: + +## Long Term Performance Risks + +Enumerate possible negative long-term performance impacts of this MEP, and for each explain how that +risk will be mitigated. Note: this is *not* about the immediate performance impact of the MEP, +but about the impact on future work. For example, this includes identifying changes that may impede +the future introduction of entirely new algorithms, or entirely new optimizations. + +It is OK for us to accept temporary minor performance reduction to make more significant +improvements possible. On the contrary, it is bad to make changes to temporarily improve +performance and make long-term improvements hard or impossible. + +## Long Term Software Engineering Risks + +Enumerate possible negative long-term software engineering impacts of this MEP, and for each explain +how that risk will be mitigated. + +One of the core goals of MMTk is making GC development easy. If a developer wants to develop, for +example, a new GC algorithm, it should be easy to implement it quickly and easily in MMTk. We don't +want changes that make this difficult. + +## Impact on API + +Outline how this MEP will affect APIs, both public and internal. Enumerate the cases, and for each +case, explain how the risk of negative consequences will be mitigated and/or justify the change. + +# Testing + +If applicable, describe the way to reproduce the problem, and the way to check if the change +actually works. For MMTk, it includes but is not limited to what (micro or macro) benchmarks to +use, and which VM binding (with or without changes) to use. + +# Alternatives + +Optional. If there are more than one way to solve the problem, describe them here and explain why +this approach is preferred. + +# Assumptions + +Optional. For the design changes of MMTk, this part mainly includes assumptions about, for example, +the VM's requirements, the GC algorithms we are supporting, the OS/architecture MMTK is running on, +etc. If those assumptions no longer hold, we may need to reconsider the design. Describe such +concerns in this section. + +# Related Issues + +Optional. If there are related issues, PRs, etc., include them here. + +Sometimes people create ordinary issues and PRs to fix some problems, and later MMTk developers +consider that the change is too fundamental and needs a more thorough reviewing process. If that is +the case, add hyperlinks to those original issues and PRs. diff --git a/docs/contribute/mep.md b/docs/contribute/mep.md index 51d5532bbf..083281d5f2 100644 --- a/docs/contribute/mep.md +++ b/docs/contribute/mep.md @@ -1,12 +1,12 @@ MMTk Enhancement Proposal (MEP) =============================== -An MMTk Enhancement Proposal (MEP) is a more formal variant of issue. It has a special format, and -will undergo a more thorough review process. Its goal is helping the MMTk developers making more -informed decisions. +An MMTk Enhancement Proposal (MEP) is a formal process for the MMTk team and its developers to +propose significant design changes, review the impact of the changes and make informed decisions. +It has a special format, and will undergo a more thorough review process. Its goal is helping the +MMTk developers making more informed decisions. -MEP is inspired by the Java Enhancement Proposal, described in https://openjdk.org/jeps/1 However, -unlike JEP which is more open-ended, MEP is more focused on making design decisions. +MEP is inspired by the Java Enhancement Proposal, described in https://openjdk.org/jeps/1 # When is MEP required? @@ -18,39 +18,23 @@ applicable to any kind of significant changes, including but not limited to: - Changes to the MMTk core to implement a feature demanded by bindings. - Major refactoring to the MMTk core. -One purpose of MEP is reducing the risks to the future development of MMTk. Large-scale changes and -public API changes usually indicate such risks, but these are only indicators, not criteria. The -assessment of risks is subjective, and we need to discuss in order to reach consensus. +**The core purpose of the MEP process is to avoid the unintentional introduction of changes that +bring long-term negative impacts to MMTk.** Large-scale changes and public API changes usually +indicate such risks, but these are only indicators, not criteria. The assessment of risks is mostly +subjective, and the MMTk team need to discuss in order to reach consensus. -Note: JEP is also required for things that "require two or more weeks of engineering effort" and/or -"are in high demand by developers or customers". We don't judge whether we need MEP based on -engineering effort or public demand. Many PRs for MMTk require multiple weeks of work and rigorous -testing, but most of them can be settled with regular issues and PRs. We label priorities using -GitHub issue tags, such as `P-normal`, `P-high`, etc. If a feature is requested often, and we have -man power for that, we can raise the priority. +If a contributor is uncertain if they should submit an MEP for their proposed changes, we encourage +them to talk with the MMTk team first, or to simply submit a normal PR/issue to get it started. An +MEP would be requested by the MMTk team if necessary (See the details about this in the section of +MEP review process). # Format -A MEP will be posted as a GitHub issue in the `mmtk-core` repository. It should contain certain -tags: - -- **The `MEP` tag** - - It is used to identify MEPs. -- **Area (`A-*`)** - - For example, `A-gc-algorithm`. -- **Category (`C-*`)** - - For example, `C-refactoring`. - - Note that not all MEP are "enhancement" in the sense of `C-enhancement`. Some MEPs may - simply be intended for fixing long-standing hard-to-fix bugs by making non-trivial changes. -- **Goal (`G-*`)** - - For example, `G-safety`. - -We use the format of JEP (https://openjdk.org/jeps/2) as a frame of reference, but deviate from it -when needed. +A MEP will be posted as a GitHub issue in the `mmtk-core` repository. It should contain `MEP` tag. A MEP should have the following sections: -- TL;DR (summary) +- TL;DR - Goal - Non-goal (optional) - Success Metric @@ -67,18 +51,13 @@ A MEP should have the following sections: - Risks and Assumptions (optional) - Related Issues (optional) -Note: Sections in JEP but not in MEP: - -- Dependencies: We have the *Related Issues* section, instead. - # Sections ## TL;DR -This section should use about one to three sentences to summarize the MEP. JEP calls it "Summary", -but we call it "TL;DR" (too long, didn't read) to emphasize that it should be short enough so that -readers (including those in a hurry) can get the main idea very quickly without reading through the -MEP. +This section should use about one to three sentences to summarize the MEP. As the name "TL;DR" (too +long, didn't read) suggests, this section should be short enough so that readers (including those in +a hurry) can get the main idea very quickly without reading through the MEP. ## Goals