Skip to content

Commit

Permalink
Update MEP doc and add MEP template
Browse files Browse the repository at this point in the history
  • Loading branch information
wks committed Dec 22, 2023
1 parent 7841550 commit abd71e2
Show file tree
Hide file tree
Showing 2 changed files with 143 additions and 39 deletions.
125 changes: 125 additions & 0 deletions .github/ISSUE_TEMPLATE/mmtk-enhancememnt-proposal--mep-.md
Original file line number Diff line number Diff line change
@@ -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.
57 changes: 18 additions & 39 deletions docs/contribute/mep.md
Original file line number Diff line number Diff line change
@@ -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?

Expand All @@ -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
Expand All @@ -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

Expand Down

0 comments on commit abd71e2

Please sign in to comment.