Skip to content

Commit c193df1

Browse files
Merge pull request #560 from scala/spp-announcement
Add spp blog post
2 parents 70321ee + 2e465c7 commit c193df1

File tree

1 file changed

+158
-0
lines changed

1 file changed

+158
-0
lines changed

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

Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
---
2+
layout: blog
3+
post-type: blog
4+
by: Jorge Vicente Cantero
5+
title: "Introducing the Scala Platform"
6+
---
7+
8+
Today we're happy to release our (initial) plans for the Scala Platform and
9+
Scala Platform Process. If you're unfamiliar with previous calls for a Scala
10+
Platform, the idea is simple; let's reduce the Scala standard library to a very
11+
small core, and open up the decision about what popular libraries should be
12+
shipped in a "batteries included" distribution of Scala. This is the basic idea
13+
of the Scala Platform.
14+
15+
However, bringing many open source libraries together,
16+
isn't easy, nor is is it easy to ensure that these essential libraries continue
17+
to be developed. This is why we've come up with and proposed an initial draft of
18+
what we call the Scala Platform Process. The goal of the Scala Platform Process
19+
is simple; provide infrastructure (for building, continuous integration, and
20+
releasing) as well as help with project governance (processes and guidelines to
21+
recruit contributors) to try and make it easier on platform library authors to
22+
ensure that maintenance and releases of their library can scale beyond just them
23+
alone.
24+
25+
## Infrastructure
26+
27+
The infrastructure that the Scala Center provides includes:
28+
* sbt-platform plugin,
29+
* continuous integration, and
30+
* a release manager.
31+
32+
The sbt-platform plugin bundles together many tasks required for Scala Platform
33+
libraries such as; configuring automatic nightly builds, automatic releases of
34+
stable versions when a git tag is found, MiMa compatibility checks and PGP
35+
signatures for artifacts (with Scala Platform keys), integration with our Drone
36+
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
41+
customization, and yet allows users to remotely configure the build, store their
42+
tokens, send notifications and act on certain events.
43+
44+
When new changes are forwarded to the corresponding projects' `platform-release`
45+
branch, our release manager releases them every night. If anything goes wrong,
46+
it will notify maintainers via email with an error log.
47+
48+
## Governance
49+
50+
The Scala Platform process also establishes process and policies to enable
51+
outside contributors, companies, and industrial users to contribute back to the
52+
modules, and to help along the modules’ maintenance.
53+
54+
The goals of these policies are to create and evolve friendly communities around
55+
the modules and to provide a way for libraries to synchronize on releases and
56+
updates while still providing stability guarantees to users. For that, the
57+
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+
60+
The aforementioned policies can be best summed up as a slightly [modified version
61+
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+
### The Collective Code Construction Contract (C4) contract
64+
65+
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+
75+
As an example, the C4 contract sets rules for developer interaction such as what
76+
happens when someone submits a patch, how users should create pull-requests and
77+
motivate them, how maintainers can evolve and document APIs, or how they should
78+
deal with bad actors in case of a conflict.
79+
80+
Our modifications to the process focus on minor Scala Platform requirements and
81+
licensing, where all modules can choose their open-source licenses so long as
82+
they are compatible with the modules already in the Platform. For those that
83+
don't have one yet, Mozilla Public License v2 is recommended. The complete
84+
description of the rules is available
85+
[here](https://scalacenter.github.io/platform-staging/policies.html#policies-on-committers-and-contributors).
86+
87+
### A predictable release process
88+
The predictable release process allows potential contributors to more easily
89+
reason about releases. It consists of three release pipelines:
90+
91+
* nightly (for beta testers and early adopters),
92+
* stable (for users), and
93+
* bug fixes (in case that critical bugs are found).
94+
95+
While nightlies are published automatically every night, stable versions of
96+
platform libraries are released cyclically every 12 weeks, if a release is
97+
ready.
98+
99+
The release process asks modules to use semantic versioning to reflect breaking
100+
behaviour. Therefore, major releases happen every 18 months or when new Scala
101+
versions are released. Maintainers that want to experiment with major changes
102+
can use the @experimental annotation, whose semantics are documented [here](https://scalacenter.github.io/platform-staging/platform.html#expectations).
103+
104+
Modules also need to be cross-compiled with the latest two Scala major versions
105+
and, in order to ensure Platform's long-term compatibility, bug fixes are
106+
accepted and released for major Platform releases in the last 24 months. Those
107+
modules that fall unmaintained are removed in every major release.
108+
109+
### The current draft
110+
111+
We think that the benefits of these policies are twofold: they help maintainers
112+
and contributors to organize themselves and they make it easier for outside
113+
contributors, companies and organizations to engage in the development of these
114+
libraries.
115+
116+
With the help of the Scala Platform Committee members, we have drafted these
117+
processes in the Scala Platform specification.
118+
119+
These policies are open for discussion and we hope that the Scala community will
120+
help us improve them!
121+
122+
## The Committee
123+
124+
The Scala Platform Committee is exclusively composed of members of the Scala
125+
community. They set the direction of the Platform, review proposals from the
126+
community, and decide on the modules that join the Platform.
127+
128+
The members of the Committee are dedicated developers with a long record of
129+
contributions to the Scala ecosystem, the development of the language and major
130+
open-source projects. They have been elected to represent and serve the broad
131+
interest of the Scala community, not their personal or employers' viewpoints.
132+
133+
1. Dale Wijnand (@dwijnand)
134+
1. Aleksandar Prokopec (@axel22)
135+
1. Lars Hupel (@larsrh)
136+
1. Marius Eriksen (@mariusae)
137+
1. Bill Venners (@bvenners)
138+
1. Konrad Malawski (@ktoso)
139+
1. Pathikrit Bhowmick (@pathikrit)
140+
1. Alexander Podkhalyuzin (@Alefas)
141+
1. Mathias Doenitz (@sirthias)
142+
1. Rex Kerr (@Ichoran)
143+
1. David Hall (@dlwh)
144+
145+
## We need your help!
146+
To make the Scala Platform successful, we need the help from the Community. Here's how you can get involved!:
147+
1. Make suggestions to improve the Scala Platform policies on our [Scala Contributors Discourse Forum][discourse].
148+
1. Create a Scala Platform proposal;
149+
1. Discuss and give feedback on current proposals on our [Scala Contributors Discourse Forum][discourse];
150+
151+
The process has been designed to “give feedback early, give feedback often” on
152+
any proposal. We encourage you to [get your hands dirty and submit
153+
yours](https://scalacenter.github.io/platform-staging/proposal-submission.html)!
154+
155+
Stay tuned, our first SPP meeting is to be broadcasted on Monday, 17th January!
156+
[Tune in here](https://www.youtube.com/watch?v=eqSSXg7Up2I)!
157+
158+
[discourse]: https://contributors.scala-lang.org/

0 commit comments

Comments
 (0)