Why release 2.0?

Django “1.0” was released in 2008. Every release for the following 9 years had the major version “1”. Why did the Django project decide that this release merits increasing to major version “2”?

Release cadence

The Django release process document explains:

Starting with Django 2.0, version numbers will use a loose form of semantic versioning such that each version following an LTS will bump to the next “dot zero” version. For example: 2.0, 2.1, 2.2 (LTS), 3.0, 3.1, 3.2 (LTS), etc.

This implies that the Django project interprets the Semantic Versioning standard such that a “major version” (the first component of the version string) is reached following a long-term service (LTS) release of the code.

Meaning of a major version

An interesting question is whether this interpretation of the meaning of the “major version” is strictly conformant with the Semantic Versioning standard. According to that standard:

Bug fixes not affecting the API increment the patch version, backwards compatible API additions/changes increment the minor version, and backwards incompatible API changes increment the major version.

which is earlier summarised as:

Given a version number MAJOR.MINOR.PATCH, increment the:

  1. MAJOR version when you make incompatible API changes,
  2. MINOR version when you add functionality in a backwards-compatible manner, and
  3. PATCH version when you make backwards-compatible bug fixes.

The release notes for Django 2.0 state:

[…] there aren’t any major backwards incompatible changes that might be expected of a 2.0 release. Upgrading should be a similar amount of effort as past feature releases.

So is this – incrementing the major version when there are not “any major backwards incompatible changes” in the release – conformant with the the SemVer standard?

I think the answer is yes. The project have wisely chosen to signal backward incompatibility with a major version increment. As we will see later in this series, it is the first version to omit support for Python 2; any code base using Django will need to make that backward-incompatible upgrade to use this Django release.

This and many other smaller changes merit the important change to the major version. We will get to those in future articles here.

Do you have questions about Django, or want to hire me for some work in a Django-related project? Come chat to me either privately at my Matrix address @bignose:matrix.org, or in the public Django chat channel.