[Python-Dev] Python version numbers
On Tue, Apr 3, 2018 at 10:51 PM, Paul G <paul at ganssle.io> wrote:
> Breaking this off from the pickle thread because it seems unrelated:
> On 04/02/2018 06:57 PM, Lukasz Langa wrote:
>> I think we need to get past thinking about "Python 2" vs. "Python 3". This frame of mind creates space for another mythical release of Python that will break all the compatibilities, something we promised not to do. A moving backward compatibility window that includes the last release still under security fixes seems like a good new framework for this.
> Maybe this has already been discussed ad nauseum, but is the idea here that Python will stay on Python 3.x, but also start breaking backwards compatibility with old versions? That would seem to be a violation of semantic versioning.
Compatibility can be broken in small ways by minor versions. For
instance, if you have a function "def await(x):", that will work
perfectly on older Pythons, but will fail now that 'await' is a
keyword. Does that require a major version bump? The pickle situation
was one of changing a default, and if you need compatibility with
ancient versions, you can specify protocol 0. By maintaining a sane
default, we encourage people to use that rather than specifying
protocol=-1 and breaking compatibility *immediately* when a new
protocol is created.
The expectation is that a minor version bump generally won't break
things, but you test your code anyway, in case it does. (A revision
release should never break anything that wasn't already broken, eg
depending on a bug.) A change to the default pickle protocol seems
like a fairly safe change to me, since it's so easy to override if you
When programs use calendar-based versioning, I'm left with no
information as to whether it's breaking changes or not. In fact, it
might as well have no version numbers whatsoever. If I care about
backward compatibility, I just have to stick with the exact same
unpatched version that I had before. Not a good thing for a language
that releases periodic bugfix updates to older versions.