Skip to content

Commit cfbfbda

Browse files
Merge pull request #539 from scala/new-sips-proc
Markdown port of new SIPs process
2 parents d95343e + 09f01ef commit cfbfbda

File tree

1 file changed

+256
-38
lines changed

1 file changed

+256
-38
lines changed

sips/sip-submission.md

Lines changed: 256 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,279 @@
11
---
22
layout: sip-landing
3-
title: SIP Submission Process
3+
title: SIP Specification and Submission
44
---
55

6-
## How do I get started? ##
6+
A **SIP** (_Scala Improvement Process_) is a process for submitting changes to
7+
the Scala language. Its main motivation is to become the primary mechanism to
8+
propose, discuss and implement language changes. In this process, all changes to
9+
the language go through design documents, called Scala Improvement Proposals
10+
(SIPs), which are openly discussed by a committee and only upon reaching a
11+
consensus are accepted to be merged into the Scala compiler.
712

8-
Before submitting a SIP, it is a good to float your proposal on [scala-debate](https://groups.google.com/forum/#!forum/scala-debate). Be specific and already draw up a document that contains all relevant details. Often, public discussions help to refine a proposal to a point where it can become a SIP.
13+
The aim of the Scala Improvement Process is to apply the openness and
14+
collaboration that have shaped Scala's documentation and implementation to the
15+
process of evolving the language. This document captures our guidelines,
16+
commitments and expectations regarding this process.
917

10-
## How do I submit? ##
18+
## Why write a SIP?
1119

12-
The process to submit is simple:
20+
SIPs are key to making Scala better for the good of everyone. If you decide to
21+
invest the time and effort of putting a SIP forward and seeing it through, your
22+
efforts and time will shape and improve the language, which means that your
23+
proposal may impact the life of a myriad of developers all over the world,
24+
including those on your own team. For many, this aspect alone can be quite
25+
worthwhile.
1326

14-
* Fork the Scala documentation repository, [http://github.com/scala/scala.github.com](http://github.com/scala/scala.github.com).
15-
* Create a new SIP file in the `sips/pending/_posts/`. Check the [Writing a SIP Tutorial](sip-tutorial.html)
16-
* Make sure the new file follows the format: `YYYY-MM-dd-{title}.md`. Use the proposal date for `YYYY-MM-dd`.
17-
* Use the [Markdown Syntax](http://daringfireball.net/projects/markdown/syntax) to write your SIP.
18-
* Follow the instructions in the [README](https://github.com/scala/scala.github.com/blob/gh-pages/README.md) to build your SIP locally so you can ensure that it looks correct on the website.
19-
* Create a link to your SIP in the "pending sips" section of `index.md`
20-
* Commit your changes to your forked repository
21-
* Create a new [pull request](https://github.com/scala/scala.github.com/pull/new/gh-pages). This will notify the Scala SIP team.
27+
However, it's important to note that seeing a SIP through to its conclusion is
28+
an involved task. On the one hand, it takes time to convince people that your
29+
suggestions are a worthwhile change for hundreds of thousands of developers to
30+
accept. Particularly given the sheer volume of developers that could be affected
31+
by your SIP, SIP acceptance is conservative and carefully thought through.
32+
Typically, this includes many rounds of discussion with core Scala maintainers
33+
and the overall community, several iterations on the design of the SIP, and some
34+
effort at prototyping the proposed change. Often, it takes months of discussion,
35+
re-design, and prototyping for a SIP to be accepted and included in the Scala
36+
compiler. It is, therefore important to note that seeing a SIP through to its
37+
conclusion can be time-consuming and not all SIPs may end up in the Scala
38+
compiler, although they may teach us all something!
39+
40+
If you’re motivated enough to go through this involved but rewarding process, go
41+
on with writing and keep on reading.
42+
43+
## What's the process for submitting a SIP?
44+
45+
There are four major steps in the SIP process:
46+
47+
1. Initial informal discussion (2 weeks)
48+
2. Submission
49+
3. Formal presentation (up to 1 month)
50+
4. Formal evaluation (up to 6 months)
51+
52+
### Initial informal discussion (2 weeks)
53+
54+
Before submitting a SIP, it is required that you perform necessary preparations:
55+
56+
Discuss your idea on the Scala mailing lists (currently, we suggest
57+
cross-posting on
58+
[scala-sips](https://groups.google.com/forum/#!forum/scala-sips),
59+
[scala-debate](https://groups.google.com/forum/#!forum/scala-debate), and
60+
[scala-internals](https://groups.google.com/forum/#!forum/scala-internals). This
61+
may change in the future.) Create a topic that starts with “Pre-SIP” and briefly
62+
describe what you would like to change and why you think it’s a good idea.
63+
64+
Proposing your ideas on the mailing list is not an optional step. For every
65+
change to the language, it is important to gauge interest from the compiler
66+
maintainers and the community. Use this step to promote your idea and gather
67+
early feedback on your informal proposal. It may happen that experts and
68+
community members may have tried something similar in the past and may offer
69+
valuable advice.
70+
71+
Within two weeks after your submission of the pre-SIP to the mailing list, the
72+
Process Lead will intervene and advise you whether your idea can be submitted as
73+
a SIP or needs more work.
74+
75+
76+
### Submission
77+
78+
After receiving the green light from the Process Lead, you can write up your
79+
idea and submit it as a SIP.
80+
81+
A SIP is a Markdown document written in conformance with the [process template](https://github.com/scala/slip/blob/master/slip-template.md).
82+
It ought to contain a clear specification of the proposed changes. When such
83+
changes significantly alter the compiler internals, the author is invited to
84+
provide a proof of concept. Delivering a basic implementation can speed up the
85+
process dramatically. Even compiler hackers find very difficult to predict the
86+
interaction between the design and the implementation, so the sooner we have an
87+
evidence of a working prototype that interacts with all the features in Scala,
88+
the better. Otherwise, committee members may feel that the proposed changes are
89+
impossible and automatically dismiss them. If your changes are big or somewhat
90+
controversial, don’t let people hypothesize about them and show results upfront.
91+
92+
A SIP is submitted as a pull request against [the official Scala website
93+
repo](https://github.com/scala/scala.github.com). Within a week of receiving the
94+
pull request, the Process Lead will acknowledge your submission, validate it and
95+
engage into some discussions with the author to improve the overall quality of
96+
the document (if necessary).
97+
98+
When you and the Process Lead agree on the final document, it is formally
99+
accepted for review: assigned a reviewer and scheduled for formal presentation.
100+
101+
### Formal presentation (up to 1 month)
102+
103+
During the next available SIP Committee meeting, the appointed reviewer presents
104+
the SIP to the committee and kick starts the initial discussion.
105+
106+
If the Committee agrees that following through the SIP is a good idea, then the
107+
following happens:
108+
109+
1. The SIP is assigned a number.
110+
2. The SIP pull request is merged into the official Scala website repo, and the
111+
merged document becomes the official webpage of the proposal.
112+
3. An issue to discuss the SIP is opened at the official Scala website repo. Then,
113+
the reviewer submits the initial feedback from the committee.
114+
4. An implementation is requested (if not already present).
115+
116+
Otherwise, the SIP is rejected. The reviewer submits the collected feedback as a
117+
comment to the pull request, and the pull request is closed.
118+
119+
### Formal evaluation (up to 6 iterations)
120+
121+
Evaluation of a SIP is done in iterations. The maximum number of iterations is
122+
six. These iterations take place in the SIP meetings and are usually monthly.
123+
However, they can last longer, in which case the author has more time to
124+
implement all the required changes.
22125

23-
## What will happen next ##
126+
The committee decides the duration of the next iteration depending upon the
127+
feedback and complexity of the SIP. Consequently, authors have more time to
128+
prepare all the changes. If they finish their revision before the scheduled
129+
iteration, the Process Lead will reschedule it for the next available meeting.
24130

25-
The SIP committee will have a look at your proposal. If it is looks promising, it will be made into a SIP. At that point, you'll have to sign a CLA (contributor license agreement) which says that you are OK with the text of the proposal and the implementation being used in the Scala project.
131+
During every iteration, the appointed reviewer presents the changes (updated
132+
design document, progress with the implementation, etc) to the SIP Committee.
133+
Based on the feedback, the SIP is either:
26134

27-
## What will happen afterwards ##
135+
1. Accepted, in which case the committee will propose a release date to the
136+
compiler maintainers, where the role of the committee ends.
137+
2. Rejected, in which case the SIP is closed and no longer evaluated in the future.
138+
3. Postponed, in which case the reviewer responds to the committee’s feedback in
139+
the SIP issue tracker, and the SIP is scheduled for a follow-up discussion
140+
during the next SIP meeting.
28141

29-
The SIP will get a unique number. It should be discussed on the [scala-sips mailing list](https://groups.google.com/forum/#!forum/scala-sips).
30-
In these mails, every mail that is specific to a SIP ### should be prefixed with \[SIP-###\].
31-
Typically, a SIP under discussion will have a member of the committee as shepherd, to help move it forward.
142+
If no changes have been made to a SIP in two iterations, it’s marked as dormant
143+
and both the PR and issue are closed. Dormant SIPs can be reopened by any
144+
person, be it the same or different authors, at which point it will start from
145+
the formal evaluation phase.
32146

33-
Before a SIP can be accepted, it also needs a full implementation that can be evaluated in practice.
34-
That implementation can be done before the SIP is submitted, or else concurrently with the discussion period.
147+
### Merging the proposal
35148

36-
## What is the provisional voting status? ##
149+
If the SIP is accepted, the committee will propose a release date to the
150+
compiler maintainers, where the role of the committee ends. Accepted SIPs will
151+
then be merged under a flag. When SIPs introduce intricate changes and they
152+
cannot be merged under a flag, the compiler maintainers will merge it directly.
37153

38-
When a release is drawing near, the SIP committee will hold on provisional vote on pending SIPs. This vote places sips in one of the current status:
154+
## Structure of the process
39155

40-
* `Accepted` - The SIP will be included in the next release, pending an acceptable implementation.
41-
* `Deferred - Next Meeting` - The committee has concerned that need to be addressed in the SIP before inclusion in the Release. If the concerns are handled before the next release, the SIP will be re-evaluated.
42-
* `Delay - Next Release` - The SIP committee has larger concerns with the state of the SIP and would prefer to wait until the next Scala release to consider inclusion.
43-
* `Not Accepted` - The SIP committee feels the SIP is not needed for the Scala language and turns down the proposal, with an explanation of why.
156+
The SIP process involves the following parties:
44157

45-
## What happens for a Scala major release? ##
158+
1. The SIP Authors
159+
2. The Process lead
160+
3. The SIP Committee
46161

47-
Before a Scala release, the committee will make a final decision for each SIP whether it should be accepted, rejected, or delayed for the next release. Accepted SIPs will be rolled into an upcoming Scala release and placed in the accepted folder. Rejected SIPs will be left in the SIP repository under the "rejected sips" section. Delayed SIPs will remain pending.
162+
### The SIP Authors
48163

164+
Authors are responsible for building consensus within the community and
165+
documenting dissenting opinions before the SIP is officially discussed by the
166+
SIP committee. Their goal is to convince the committee that their proposal is
167+
useful and addresses pertinent problems in the language as well as interactions
168+
with already existing features. Authors can change over the lifecycle of the
169+
SIP.
49170

50-
## Who is on the SIP committee ##
171+
### The Process lead
51172

52-
Right Now:
173+
The Process lead is the responsible of the smooth running of SIPs and SLIPs. He
174+
or she appoints the committee members, calls the meetings monthly, assigns new
175+
proposals to the members, and ensures that all of them are discussed within a
176+
short period of time.
53177

54-
* Martin Odersky
55-
* Josh Suereth
56-
* Adriaan Moors
57-
* Seth Tisue
58-
* Dick Wall
59-
* Heather Miller
178+
### The SIP Committee
179+
180+
The SIP Committee is an experienced group of people with knowledge of the
181+
compiler internals, responsible for the strategic direction of Scala. Members
182+
are tasked with (a) communicating with the community, (b) weighing in pros and
183+
cons of every proposal, and (c) accepting, postponing or rejecting the proposal.
184+
185+
Committee members should be either individuals responsible for a specific part
186+
of the Scala codebase, committers or contributors of the Scala compiler.
187+
Exceptionally, members may also be important representatives of the community
188+
with a high technical knowledge to understand the implications of every proposal
189+
and participate into the discussions. The members are elected by the Process
190+
Lead based on their expertise and implication in the community.
191+
192+
The current committee members are:
193+
194+
- Martin Odersky ([@odersky](https://github.com/odersky)), EPFL
195+
- Adriaan Moors ([@adriaanm](https://github.com/adriaanm)), Lightbend
196+
- Erik Osheim ([@non](https://github.com/non)), independent
197+
- Heather Miller ([@heathermiller](https://github.com/heathermiller)), Scala Center
198+
- Seth Tisue ([@SethTisue](https://github.com/SethTisue)), Lightbend
199+
- Sébastien Doeraene ([@sjrd](https://github.com/sjrd)), EPFL
200+
- Eugene Burmako ([@xeno-by](https://github.com/xeno-by)), EPFL
201+
- Andrew Marki ([@som-snytt](https://github.com/som-snytt)), independent
202+
- Josh Suereth ([@jsuereth](https://github.com/jsuereth)), Google
203+
204+
The current process lead is:
205+
206+
- Jorge Vicente Cantero ([@jvican](https://github.com/jvican)), Scala Center
207+
208+
### Reviewers
209+
210+
The Process Lead assigns every proposal to a member of the committee, which
211+
becomes the reviewer. The main tasks of the reviewer are the following:
212+
213+
1. Discuss unclear points with the authors,
214+
2. Help them address their issues and questions,
215+
3. Provide them feedback from the discussions in the meetings, and
216+
4. Explain the latest progress in every meeting.
217+
218+
### Voting
219+
220+
For a SIP to be accepted, it must fulfill two requirements:
221+
222+
- 70% of the committee votes in favor of it.
223+
- Martin Odersky does not veto it.
224+
225+
### Responsibilities of the members
226+
227+
- Review the proposals they are assigned to. The process lead will always notify
228+
them two weeks in advance, at minimum.
229+
- Play a role in the discussions, learn in advance about the topic if needed, and
230+
make up their mind in the voting process.
231+
- Decide which utilities should be inside the core module and are required by the
232+
compiler. The goal is to shrink it over time, and, where possible, move modules
233+
to the platform, that will be managed by the SLIP process.
234+
235+
### Guests
236+
237+
Experts in some fields of the compiler may be invited to concrete meetings as
238+
guests when discussing related SIPs. Their input would be important to discuss
239+
the current state of the proposal, both its design and implementation.
240+
241+
## Proposal states
242+
243+
The state of a proposal changes over time depending on the phase of the process
244+
and the decisions taken by the Committee. A given proposal can be in one of
245+
several states:
246+
247+
1. **Validated:** The Process Lead has validated the proposal and checked that
248+
meets all the formal requirements.
249+
2. **Numbered:** The Committee agrees that the proposal is a valid document and
250+
it’s worth considering it. Then, the Process Lead gives it a number.
251+
3. **Awaiting review:** The proposal has been scheduled to be reviewed for a
252+
concrete date.
253+
4. **Under review:** Once the author has delivered a new version, the proposal will
254+
be under review until the next available SIP meeting takes place.
255+
5. **Under revision:** Authors are addressing the issues pinpointed by the
256+
committee or working on the implementation.
257+
6. **Dormant:** When a SIP has been under revision for more than two iterations (that
258+
is, no progress has been made since the last review), it’s considered dormant,
259+
in which case any related activity will be paralysed and the Process Lead will
260+
not allocate more resources to it.
261+
7. **Postponed:** The SIP has been postponed under some concrete conditions. When these
262+
are met, the SIP can be resubmitted.
263+
8. **Rejected:** The SIP has been rejected with a clear and full explanation.
264+
9. **Accepted:** The SIP has been accepted and it’s waiting for the merge into the
265+
Scala compiler.
266+
267+
## How do I submit? ##
268+
269+
The process to submit is simple:
270+
271+
* Fork the Scala documentation repository, [http://github.com/scala/scala.github.com](http://github.com/scala/scala.github.com).
272+
* Create a new SIP file in the `sips/pending/_posts/`. Use the [S(L)IP template](https://github.com/scala/slip/blob/master/slip-template.md)
273+
* Make sure the new file follows the format: `YYYY-MM-dd-{title}.md`. Use the proposal date for `YYYY-MM-dd`.
274+
* Use the [Markdown Syntax](http://daringfireball.net/projects/markdown/syntax) to write your SIP.
275+
* Follow the instructions in the [README](https://github.com/scala/scala.github.com/blob/gh-pages/README.md) to build your SIP locally so you can ensure that it looks correct on the website.
276+
* Create a link to your SIP in the "pending sips" section of `index.md`
277+
* Commit your changes to your forked repository
278+
* Create a new [pull request](https://github.com/scala/scala.github.com/pull/new/gh-pages). This will notify the Scala SIP team.
60279

61-
We will ask new members to join from time to time. The committee decides collectively, but Martin reserves the final say if there is a disagreement.

0 commit comments

Comments
 (0)