|
| 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