Probably the most widespread software version numbering scheme in use today takes the form of a dotted sequence of integers. Variants of this scheme usually share the following characteristics:
- Version numbers consist of at least two (often three, rarely four) non-negative integers written in decimal notation and separated from each other by full stops, sometimes with an extra tag appended at the end (alpha, beta, rc, sometimes with further numbers following);
- The ordering is big-endian: the first number denotes the most significant kind of change. As such, version tuples can be (usually) sorted lexicographically;
- The first integer is called the ‘major’ release number, the second the ‘minor’ release number, and the third (if present) is usually called the ‘patch’ release number;
- The first stable version is commonly denoted 1.0; major version 0 denotes pre-release or unstable versions.
Other version naming systems do exist (code names, date-based version numbers, TeX’s ‘asymptotic’ numbering), but this one is probably the most well-known. It has even made its way into popular culture, with phrases like ‘Web 2.0’ and its snowclones entering the popular lexicon. Semantic Versioning is a modern form of it (though far from universally adopted). Also, sometimes, with only major and minor release numbers present, the full version number was commonly thought of as a decimal fraction (for example, Windows 3.1 is internally known as 3.10, and these version numbers are considered equivalent; version number 0.9 or 0.99 often suggests that it’s very close to 1.0), though today this usage seems to be slowly fading away.
Where was this version numbering scheme invented? What was the first software package to use it? Did the ‘minor’ number originally denote a fraction or was it an independent number from the start?