Against 1.0

what if semantic versioning but the semantics were consistent

Something I’ve been holding in too long but that I want off my chest:

The notation 1.0 for a first public release doesn’t really make sense.

  • At the major version level, 0 means “pre-public” and “public” starts with 1.
  • At the minor version level, 0 means “public” for major version >= 1.
  • At the minor version level, 0 is not used for major version 0.

So 1.0 uses 0-based indexing for minor versions and 1-based for major versions.

  • Except when it doesn’t. Got it?

I suggest that 0 should always mean “pre-public” and “public” should always start from 1.

  • Full public releases should have major and minor version numbers >= 1.
  • So a project’s very first full public release could perfectly well be 1.1.
  • n.0 should be reserved for a public beta of n.1 (a pretty normal thing to have).

From consistency we get an obvious way to semantically version a public beta.

  • I don’t know about you, but I’ve found this otherwise impossible to do nicely.

Obligatory xkcd:

1.0 is the kind of thing Black Hat Guy would come up with

Gordon Arsenoff
Senior Research Specialist

Bayesian. He/him.