Skip to content

Commit 0069ba0

Browse files
committed
Addresses feedback in #560
1 parent c193df1 commit 0069ba0

File tree

1 file changed

+47
-42
lines changed

1 file changed

+47
-42
lines changed

blog/_posts/2016-11-28-spp.md

Lines changed: 47 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ Platform, the idea is simple; let's reduce the Scala standard library to a very
1111
small core, and open up the decision about what popular libraries should be
1212
shipped in a "batteries included" distribution of Scala. This is the basic idea
1313
of the Scala Platform.
14-
14+
1515
However, bringing many open source libraries together,
1616
isn't easy, nor is is it easy to ensure that these essential libraries continue
1717
to be developed. This is why we've come up with and proposed an initial draft of
@@ -21,115 +21,120 @@ releasing) as well as help with project governance (processes and guidelines to
2121
recruit contributors) to try and make it easier on platform library authors to
2222
ensure that maintenance and releases of their library can scale beyond just them
2323
alone.
24-
24+
2525
## Infrastructure
2626

2727
The infrastructure that the Scala Center provides includes:
28-
* sbt-platform plugin,
29-
* continuous integration, and
28+
29+
* [sbt-platform plugin](https://scalacenter.github.io/platform-staging/sbt-platform.html),
30+
* [continuous integration](https://scalacenter.github.io/platform-staging/ci-integration.html), and
3031
* a release manager.
31-
32+
3233
The sbt-platform plugin bundles together many tasks required for Scala Platform
3334
libraries such as; configuring automatic nightly builds, automatic releases of
3435
stable versions when a git tag is found, MiMa compatibility checks and PGP
3536
signatures for artifacts (with Scala Platform keys), integration with our Drone
3637
setup for writing your own sbt scripts, and other configuration that is
37-
oftentimes tedious to manage. Continuous integration (CI) is provided by Drone,
38-
on an EPFL cluster.
39-
40-
The CI integration comes with a default Scala template that requires minor
38+
oftentimes tedious to manage.
39+
40+
Continuous integration (CI) is provided by Drone, on an EPFL cluster. The CI
41+
integration comes with a default Scala template that requires minor
4142
customization, and yet allows users to remotely configure the build, store their
4243
tokens, send notifications and act on certain events.
43-
44+
4445
When new changes are forwarded to the corresponding projects' `platform-release`
4546
branch, our release manager releases them every night. If anything goes wrong,
4647
it will notify maintainers via email with an error log.
4748

4849
## Governance
49-
50+
5051
The Scala Platform process also establishes process and policies to enable
5152
outside contributors, companies, and industrial users to contribute back to the
52-
modules, and to help along the modules’ maintenance.
53-
53+
modules, and to help along the modules’ maintenance.
54+
5455
The goals of these policies are to create and evolve friendly communities around
5556
the modules and to provide a way for libraries to synchronize on releases and
5657
updates while still providing stability guarantees to users. For that, the
5758
process offers contracts for maintaining and contributing to modules as well as
58-
a [predictable release process](https://scalacenter.github.io/platform-staging/policies.html#policies-on-release-and-stability).
59-
59+
a [predictable release process](https://scalacenter.github.io/platform-staging/policies.html#policies-on-release-and-stability).
60+
6061
The aforementioned policies can be best summed up as a slightly [modified version
6162
of the C4 contract](https://scalacenter.github.io/platform-staging/policies.html#policies-on-committers-and-contributors), Pieter Hintjens’ set of rules that made ZeroMQ successful.
62-
63+
6364
### The Collective Code Construction Contract (C4) contract
6465

6566
The C4 process can perhaps be most succinctly motivated by its goals, taken directly from [the C4 specification](https://rfc.zeromq.org/spec:42/C4/):
66-
67-
> C4 is meant to provide a reusable optimal collaboration model for open source software projects. It has these specific goals:
68-
> 1. To maximize the scale and diversity of the community around a project, by reducing the friction for new Contributors and creating a scaled participation model with strong positive feedbacks;
69-
> 1. To relieve dependencies on key individuals by separating different skill sets so that there is a larger pool of competence in any required domain;
70-
> 1. To allow the project to develop faster and more accurately, by increasing the diversity of the decision making process;
71-
> 1. To support the natural life cycle of project versions from experimental through to stable, by allowing safe experimentation, rapid failure, and isolation of stable code;
72-
> 1. To reduce the internal complexity of project repositories, thus making it easier for Contributors to participate and reducing the scope for error;
73-
> 1. To enforce collective ownership of the project, which increases economic incentive to Contributors and reduces the risk of hijack by hostile entities.
74-
67+
68+
<blockquote>
69+
C4 is meant to provide a reusable optimal collaboration model for open source software projects. It has these specific goals:
70+
<ol>
71+
<li>To maximize the scale and diversity of the community around a project, by reducing the friction for new Contributors and creating a scaled participation model with strong positive feedbacks;</li>
72+
<li>To relieve dependencies on key individuals by separating different skill sets so that there is a larger pool of competence in any required domain;</li>
73+
<li>To allow the project to develop faster and more accurately, by increasing the diversity of the decision making process;</li>
74+
<li>To support the natural life cycle of project versions from experimental through to stable, by allowing safe experimentation, rapid failure, and isolation of stable code;</li>
75+
<li>To reduce the internal complexity of project repositories, thus making it easier for Contributors to participate and reducing the scope for error;</li>
76+
<li>To enforce collective ownership of the project, which increases economic incentive to Contributors and reduces the risk of hijack by hostile entities.</li>
77+
</ol>
78+
</blockquote>
79+
7580
As an example, the C4 contract sets rules for developer interaction such as what
7681
happens when someone submits a patch, how users should create pull-requests and
7782
motivate them, how maintainers can evolve and document APIs, or how they should
7883
deal with bad actors in case of a conflict.
79-
84+
8085
Our modifications to the process focus on minor Scala Platform requirements and
8186
licensing, where all modules can choose their open-source licenses so long as
8287
they are compatible with the modules already in the Platform. For those that
8388
don't have one yet, Mozilla Public License v2 is recommended. The complete
8489
description of the rules is available
8590
[here](https://scalacenter.github.io/platform-staging/policies.html#policies-on-committers-and-contributors).
86-
91+
8792
### A predictable release process
8893
The predictable release process allows potential contributors to more easily
89-
reason about releases. It consists of three release pipelines:
94+
reason about releases. It consists of three release pipelines:
9095

91-
* nightly (for beta testers and early adopters),
96+
* nightly (for beta testers and early adopters),
9297
* stable (for users), and
93-
* bug fixes (in case that critical bugs are found).
94-
98+
* bug fixes (in case that critical bugs are found).
99+
95100
While nightlies are published automatically every night, stable versions of
96101
platform libraries are released cyclically every 12 weeks, if a release is
97102
ready.
98-
103+
99104
The release process asks modules to use semantic versioning to reflect breaking
100105
behaviour. Therefore, major releases happen every 18 months or when new Scala
101106
versions are released. Maintainers that want to experiment with major changes
102107
can use the @experimental annotation, whose semantics are documented [here](https://scalacenter.github.io/platform-staging/platform.html#expectations).
103-
108+
104109
Modules also need to be cross-compiled with the latest two Scala major versions
105110
and, in order to ensure Platform's long-term compatibility, bug fixes are
106111
accepted and released for major Platform releases in the last 24 months. Those
107112
modules that fall unmaintained are removed in every major release.
108-
113+
109114
### The current draft
110115

111116
We think that the benefits of these policies are twofold: they help maintainers
112117
and contributors to organize themselves and they make it easier for outside
113118
contributors, companies and organizations to engage in the development of these
114119
libraries.
115-
120+
116121
With the help of the Scala Platform Committee members, we have drafted these
117-
processes in the Scala Platform specification.
118-
122+
processes in the Scala Platform specification.
123+
119124
These policies are open for discussion and we hope that the Scala community will
120125
help us improve them!
121-
126+
122127
## The Committee
123128

124129
The Scala Platform Committee is exclusively composed of members of the Scala
125130
community. They set the direction of the Platform, review proposals from the
126131
community, and decide on the modules that join the Platform.
127-
132+
128133
The members of the Committee are dedicated developers with a long record of
129134
contributions to the Scala ecosystem, the development of the language and major
130135
open-source projects. They have been elected to represent and serve the broad
131136
interest of the Scala community, not their personal or employers' viewpoints.
132-
137+
133138
1. Dale Wijnand (@dwijnand)
134139
1. Aleksandar Prokopec (@axel22)
135140
1. Lars Hupel (@larsrh)
@@ -147,11 +152,11 @@ To make the Scala Platform successful, we need the help from the Community. Here
147152
1. Make suggestions to improve the Scala Platform policies on our [Scala Contributors Discourse Forum][discourse].
148153
1. Create a Scala Platform proposal;
149154
1. Discuss and give feedback on current proposals on our [Scala Contributors Discourse Forum][discourse];
150-
155+
151156
The process has been designed to “give feedback early, give feedback often” on
152157
any proposal. We encourage you to [get your hands dirty and submit
153158
yours](https://scalacenter.github.io/platform-staging/proposal-submission.html)!
154-
159+
155160
Stay tuned, our first SPP meeting is to be broadcasted on Monday, 17th January!
156161
[Tune in here](https://www.youtube.com/watch?v=eqSSXg7Up2I)!
157162

0 commit comments

Comments
 (0)