Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MSC2324: Facilitating early releases of software dependent on spec #2324

Merged
merged 9 commits into from
Dec 3, 2019
74 changes: 74 additions & 0 deletions proposals/2324-when-to-ship.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# MSC2324: Facilitating early releases of software dependent on spec
turt2live marked this conversation as resolved.
Show resolved Hide resolved
turt2live marked this conversation as resolved.
Show resolved Hide resolved

*Note*: This is a process change MSC, not a change to the spec itself.

There's currently an unanswered question by the spec process: when is it
safe to start using stable endpoints or to present a feature as "stable"?
Historically this question would receive very different answers depending
on who you asked, so in an effort to come up with a concise answer the
following process change is proposed.

## Proposal

The new process, from start to finish, is proposed as:

1. Have an idea for a feature.
2. Optionally: implement the feature using unstable endpoints, vendor prefixes,
turt2live marked this conversation as resolved.
Show resolved Hide resolved
and unstable feature flags as appropriate.
* When using unstable endpoints, they MUST include a vendor prefix. For
example: `/_matrix/client/unstable/com.example/login`. Vendor prefixes
throughout this proposal always use the Java package naming convention.
* Unstable endpoints **do not** inherit from stable (`/r0`) APIs.
turt2live marked this conversation as resolved.
Show resolved Hide resolved
* When using an unstable feature flag, they MUST include a vendor prefix.
turt2live marked this conversation as resolved.
Show resolved Hide resolved
turt2live marked this conversation as resolved.
Show resolved Hide resolved
This kind of flag shows up in `/versions`. Eg: `com.example.new_login`.
turt2live marked this conversation as resolved.
Show resolved Hide resolved
* You can ship the feature at *any* time, so long as you are able to accept
the technical debt. The implementation MUST support the flag disappearing
turt2live marked this conversation as resolved.
Show resolved Hide resolved
and be generally safe for users. Note that implementations early in the MSC
review process may also be required to provide backwards compatibility with
earlier editions of the proposal.
* If you don't/can't support the technical debt, do not implement the feature
turt2live marked this conversation as resolved.
Show resolved Hide resolved
and wait for Step 7.
* If at any point the idea changes, the feature flag should also change so
that implementations can adapt as needed.
3. In parallel, or ahead of implementation, open an MSC and solicit review.
4. Before an FCP (Final Comment Period) can be called, the Spec Core Team will
turt2live marked this conversation as resolved.
Show resolved Hide resolved
require that evidence to prove the MSC works be presented. A typical example
of this is an implementation of the MSC (ie: Step 2).
turt2live marked this conversation as resolved.
Show resolved Hide resolved
5. FCP is gone through, and assuming nothing is flagged the MSC lands.
6. A spec PR is written to incorporate the changes into Matrix.
7. A spec release happens.
8. Implementations switch to using stable prefixes (ie: `/r0`) if the server
turt2live marked this conversation as resolved.
Show resolved Hide resolved
supports the specification version released. If the server doesn't advertise
the specification version, but does have the feature flag, unstable prefixes
should still be used.
9. A transition period of about 2 months since the spec release happens before
turt2live marked this conversation as resolved.
Show resolved Hide resolved
implementations start to encourage other implementations to switch to stable
turt2live marked this conversation as resolved.
Show resolved Hide resolved
endpoints. For example, the Synapse team should start asking the Riot team to
support the stable endpoints (as per Step 8) 2 months after the spec release.
turt2live marked this conversation as resolved.
Show resolved Hide resolved

It's worth repeating that this process generally only applies if the implementation
wants to ship the feature ahead of the spec being available. By doing so, it takes
on the risk that the spec/MSC may change and it must adapt. If the implementation
is unable to take on that risk, or simply doesn't mind waiting, it should go through
the normal spec process.
turt2live marked this conversation as resolved.
Show resolved Hide resolved

To help MSCs get incorporated by implementations as stable features, the spec core
team plans to release the specification more often. How often is undefined and is
largely a case-by-case basis.

To reiterate:

* Implementations MUST NOT use stable endpoints before the MSC is in the spec. This
includes NOT using stable endpoints post-FCP.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Between fcp and spec release, presumably?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yup

* Implementations CAN ship features that are exposed by default to users before an
MSC has been merged to the spec, provided they follow the process above.
* Implementations SHOULD be wary of the technical debt they are incuring by moving
turt2live marked this conversation as resolved.
Show resolved Hide resolved
faster than the spec.

To clarify:

* The vendor prefix is chosen by the developer of the feature, using the Java package
naming convention. For example, `org.matrix` is the foundation's vendor prefix.
* The vendor prefixes, unstable feature flags, and unstable endpoints should be included
in the MSC so other developers can benefit. The MSC MUST still say what the stable
endpoints are to look like.