‘When I use a word,’ Humpty Dumpty said, in a rather scornful tone,’ it means just what I choose it to mean, neither more nor less.’
‘The question is,’ said Alice, ‘whether you can make words mean so many different things.’
‘The question is,’ said Humpty Dumpty, ‘which is to be master – that’s all.’
– Alice’s Adventures in Wonderland and brought to mind by almost anybody reading SDK documentation for any length of time
Windows Installer has three ways of upgrading products from one version to another:
- Major upgrades
- Minor upgrades
- Small updates
There are two common problems we run into when discussing upgrades given size-related terms to describe upgrades.
Major and minor are also commonly used to refer to particular elements in a version number (major.minor.build.patchlevel being most common).
But major upgrades can upgrade any product version number to any other version number, regardless of which parts of the version number change. For example, the WiX installers are always major upgrades for every 3.0.xxxx version; only the build portion of the version number changes with each weekly build. And the WiX v3.0 installers don’t do major upgrades down to WiX v2; we intentionally designed the installers to be able to live “side-by-side” on the same system to help migrating from WiX v2 to v3.
Minor upgrades, on the other hand, are usually used to deliver service packs; they must change some part of the product version but can’t change the major part of the product version (at least according to PatchWiz.dll error ERROR_PCW_INVALID_MAJOR_VERSION).
Small updates cannot change the product version at all.
Size matters not
Major, minor, and small also bring to mind size or breadth of a particular upgrade. To an extent, that’s true: Small updates tend to be for single-purpose “hotfix” types of fixes. Minor upgrades can update many files but can make only limited “structural” changes such as adding features and components; they can’t be used to remove components.
Major upgrades aren’t so limited: They can change anything in a product, but also support as few changes as a small update. So even if you’re changing only a few files, you can still use major upgrades. Think of major as an upper limit on the set of changes, not the lower limit on the type of upgrade you need.
Major upgrades also have the advantage of built-in support in Windows Installer. Using Upgrade and UpgradeVersion elements, you can use a “naked” .msi package to install a product for the first time or by major-upgrading a prior version of the product. Doing the same thing with a minor upgrade requires a bootstrapper executable or extra work to set the and REINSTALLMODE properties appropriately.