scala/scala — pull request #2833 by adriaanm (2013-08-15 00:16:52+00:00)
Title: Check backwards binary compatibility against 2.11.0-M4.

We're going to start testing (and partially enforcing) backwards binary compatibility of subsequent 2.11 milestones. This is necessary to allow modules built with, say 2.11.0-M4 to be used in an M5 context. Once this PR is merged, `ant test.bc` will be run during PR validation. Please make sure to run it before submitting (it's pretty quick, assuming you already have a build of your PR).

Concretely, scala-xml, scala-parser-combinators and scala-partest (which depends on scalacheck) will soon only be rebuilt for every milestone, published, and then used for the next milestone cycle (scala-actors will get the same treatment, and a lot of this also holds for e.g. SBT and the Eclipse plugin).

We do not want to break any of these modules. We'll go through a quick deprecation cycle. Module authors must fix deprecation warnings (detected via nightly builds that run with -deprecation -Xfatal-warnings) at the latest by the next milestone, after which we can safely break binary compatibility for these (now) unused methods/classes.

On the Scala end, we'll be using mima (mostly preventatively) to detect incompatibilities during PR validation, so that we're at least aware of where we're breaking compatibility. We'll initially be pretty liberal about additions to bincompat-backward.whitelist.conf, but will tighten as the end of the 2.11 release cycle approaches. Additionally, we'll soon use dbuild to build these modules as an additional early warning mechanism.

Think of this as a feasibility study of full (backwards) binary compatibility across major Scala releases. We're not ready to commit to this yet, but we're working towards this goal (e.g. via modularization to reduce the core that must be stable.)

review by everyone (@gkossawoski, @retronym -- cc @huitseeker)