33
votes

The MSDN documentation states:

Version numbers consist of two to four components: major, minor, build, and revision. The major and minor components are required; the build and revision components are optional, but the build component is required if the revision component is defined. All defined components must be integers greater than or equal to 0.

The format of the version number is as follows (optional components are shown in square brackets ([ and ]): major.minor[.build[.revision]] The components are used by convention as follows:

  • Major: Assemblies with the same name but different major versions are not interchangeable. A higher version number might indicate a major rewrite of a product where backward compatibility cannot be assumed.

  • Minor: If the name and major version number on two assemblies are the same, but the minor version number is different, this indicates significant enhancement with the intention of backward compatibility. This higher minor version number might indicate a point release of a product or a fully backward-compatible new version of a product.

  • Build: A difference in build number represents a recompilation of the same source. Different build numbers might be used when the processor, platform, or compiler changes.

  • Revision: Assemblies with the same name, major, and minor version numbers but different revisions are intended to be fully interchangeable. A higher revision number might be used in a build that fixes a security hole in a previously released assembly.

Subsequent versions of an assembly that differ only by build or revision numbers are considered to be Hotfix updates of the prior version.

My question is concerning the meaning of the terms Build and Revision in this context.

It seems to me that in general parlance, we do "builds" when there are changes in the source. Thus "build 678" and "build 679" are different precisely because the sources are different in some way - typically as a result of a checkin of some changed source. It seems to me that the .NET definition uses "Revision" in the way one generally uses "build".

Does anybody USE the definition above in their versioning? If so can you give concrete examples of WHY you did?

2

2 Answers

26
votes

Subsequent versions of an assembly that differ only by build or revision numbers are considered to be Hotfix updates of the prior version.

This section explains the difference. The Revision is used when your product has shipped and you need to make fixes to a shipped version while you are already progressing with updates.

For example 1.1.10.0 ships. I am making small changes to functionality and am at 1.1.20.0 when I get a security alert that needs fixing. I can't increment 1.1.10.0 to 1.1.11.0, as that represents something else. So I use 1.1.10.1 to identify it is a revision of the 1.1.10.0 code.

Hope this is a little clearer than mud. Also remember the size of the company and the size of the software projects they ship that came up with these definitions.

4
votes

I agree with you totally here. The given descriptions don't make a great deal of sense unless you interpret them with a pinch of salt. For me, the last of the version numbers should mean build, i.e. the number that gets updated on each compilation. The other numbers represent differing degrees of change to the software/API.

In practice, this is how the version numbers typically get used. (Certainly, how I use them.)

  • Major - increased when the feature set/API of the software changes significantly

  • Minor - increased when notable changes are made, minor API changes or addition of new functionality

  • Build - increased when minor changes are made, typically bug fixes and improvements (though no API changes)

  • Revision - a unique ID/number that represents the build instance