So some discussions on github are popping up regarding which Scala 3
version we should pick so I think it's time to discuss this formally on the
mailing list.

As a precursor one thing people need to understand is that the Scala 3
release cycle has changed, quoting from
https://github.com/apache/incubator-pekko/issues/6#issuecomment-1302701657

> Scala 2 used epoch.major.minor version convention. Scala 3 has
major.minor.patch.

> So there is no 3.0/3.1/3.2/etc cross-compilation - the assumption is that:

> * you can compile against the same minor version with backward- and
forward-compatibility: 3.1.3 dependency against 3.1.0 code, 3.0.0
dependency against 3.0.1 code, etc
> * within the same major version you always have backward-compatibility:
3.1.3 dependency can be used in 3.1.3 project, but also 3.2.0 project and
in future against 3.3.0 project

This means that if we pick a Scala version, we are essentially forcing the
potential Scala 3 users of Pekko to bump their Scala 3 version to the minor
that we decide on. On surface value this means that we should pick the
lowest Scala 3 minor version that we can support however there is the fact
that Scala 3.3 is going to come out soon which will be an LTS release. The
LTS release means that if any bugs are found after Scala 3.3 for a period
of 2 years, they will be backported to Scala 3.3. The big advantage this
brings us, is that it allows us to freely bump Scala 3.3 without breaking
our users if any potential bugs are found in the future. If we decide to
stick with Scala 3.2 or 3.1 and some bug is found in Scala 3 later on that
affects us, we will have to update to a version of Scala 3 that will break
binary compatibility. This facet is of even more importance when
considering our 1.0.x release branches, which are designed to never break
binary/backwards compatibility, i.e. if we do 1.0.x releases with Scala
3.1/3.2 and some critical bug/CVE comes out later we could potentially be
forced to update the minor version which would break this binary/backwards
compatibility, this wouldn't be the case with Scala 3.3 (for a certain
period of time).

Of course the counter argument to using Scala 3.3 is that it would force
all potential Pekko users (and the transitive set of Scala 3 libraries for
that Pekko user) to also use/support Scala 3.3. Unfortunately its not
possible to get download stats from Sonatype for artifacts you don't
maintain, but I wouldn't say its a controversial statement that the amount
of people that use Akka long with Scala 3 would be a tiny minority (this is
also regarding other factors, i.e. the typical demographic of Akka users).
Ontop of this we need to take into account the delay of current Akka users
migrating to Pekko, in other words by the time people migrate to using
Pekko the fact that its using Scala 3.3 LTS would likely be a non concern
at that point in time.

And finally another thing to note is that even in the worst case scenario,
nothing is stopping users from using Scala 2 artifacts from within Scala 3
(this is perfectly supported and has been for a while). Afaik the current
Scala 3 version of Akka/Pekko is not using any unique/bespoke features of
Scala 3, if true this would mean from a Scala 3 user perspective there
really isn't going to be
a difference in using a Scala 2 artifact vs Scala 3 artifact.

For these reasons my recommendation would be, assuming that the full
release of Scala 3.3 LTS is ready by the time we decide to make a release
that we should try and target that. For details on the current release
schedule for Scala 3.3 LTS you can read
https://contributors.scala-lang.org/t/3-3-0-release-thread/6079/3.

-- 

Matthew de Detrich

*Aiven Deutschland GmbH*

Immanuelkirchstraße 26, 10405 Berlin

Amtsgericht Charlottenburg, HRB 209739 B

Geschäftsführer: Oskari Saarenmaa & Hannu Valtonen

*m:* +491603708037

*w:* aiven.io *e:* matthew.dedetr...@aiven.io

Reply via email to