Old post, but I was looking for a solution and stumbled upon this article of Brett Uglow (permalink) which is the best thing I have ever read about versioning applications which will be delivered directly to end-users, especially desktop applications.
An excerpt from the article:
is the person who has to install the application. To them, the “public
API” of the application is the installation-requirements. But who is
For the Twitter mobile app and desktop app, the
installer is (usually) the end-user. The installation-requirements
would be a minimum required version of the operating system and an
For the Twitter web application, the installer is
someone from the DevOps (or Operations) team. They care deeply about
the installation-requirements as they need to provision the correct
infrastrucure based on these requirements.
importance of the installation-requirements of an application to
installer-users, I propose that semver be used to version end-user
applications using the installation-requirements as the public API
with installer-users as the consumers of this API.
MAJOR version when you make incompatible API changes
(e.g. installer-users have to modify their infrastructure
(phone/tablet/PC/web-server/firewall config/etc) in some way),
version when you add functionality in a backwards-compatible manner
(e.g. passing additional data to an already-provisioned API or adding
any end-user functionality that does not affect the
PATCH version when you make
backwards-compatible bug fixes (e.g. fixing any end-user bug that does
not affect the installation requirements).
By treating the
installer-users as the consumers of an end-user application, and the
installation-requirements as the public API, I believe that semver
does make sense and is valuable as a communications mechanism for