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:
...
The installer-user
The installer-user
is the person who has to install the application. To them, the “public
API” of the application is the installation-requirements. But who is
the installer-user?
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
internet connection.
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.
Proposal
Given the
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.
In practice,
increment the:
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),
MINOR
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
installation-requirements), and
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
end-user applications.