MPI Version Numbering
Software
Life Cycle Policy | MPI Release Types
| MPI Version Numbering |
General Example | Branch
Example
![]()
Major
The Major number indicates a fundamental change in the system architecture, severe technical changes, or major new functionality. Any type of change is possible for a major version release.
| Interface changes may include: | |
|
Application Compatibility
An application written for a previous minor release must be recompiled.
Additionally, there might be source code level changes for methods, structures,
enumerations, or defines. All deprecated code will be removed at the major
version change.
Minor
The Minor number signifies the addition of new modules, new features, expansion of existing features, or minor changes to the interface. The changes are limited for a minor version release. A minor release will support features that existed in a previous minor release.
| Interface changes may include: | |
|
Application Compatibility
An application written for a previous minor release must be recompiled.
The new minor release will still have all of its previous methods, structures,
enumerations, and defines. It may also have new methods, structures, enumerations,
or defines.
It may have minor changes to existing structures, enums, or defines.
Once an application begins to use the new methods, structures,
enumerations, or defines, it may become incompatible with previous minor
releases. However, an application can become compatible with a new minor release with a few minor changes.
Interface changes are kept to a minimum. They are only implemented when absolutely necessary to expand an existing feature or correct a problem. Interface changes will enable application compatibility issues to be discovered at compile time instead of at run time.
A new minor release may deprecate methods, structures, enumerations, or defines. An application will be required to include a "deprecated" header file to access the deprecated code.
Release
The Release level indicates the relative maturity of the release. It follows an ordered progression:
|
Application Compatibility
Dev, Alpha, and Beta releases follow the same change limitations and
application compatibility rules as minor versions, unless the major version
number changes, in which case it will follow the compatibility rules of
major versions.
Patch releases are interface and binary compatible with a Production or a previous patch release. Interface changes for methods, structures, or defines are not allowed. New members may be added to enumerations, as long as they don’t change the value of existing members. New macros, constants and functions can be introduced.
If an application uses an API which has become available in a particular release, it will no longer build or operate with previous versions.
New elements added to an existing enum type can cause backward compatibility issues. The problem occurs when a program contains a static list that has a one-to-one relationship to the elements in an enum. If new elements are added to the enum, then elements must also be added to the list. It is recommended that the length of such lists be verified at run-time.
Below is an example of a static list that is mapped to the elements of the MPIControlIoBit enum type. The example also shows how to verify that the length of the list is correct.
static unsigned bitMasks[/* MPIControlIoBitLAST */] = {
#define _countof(array) (sizeof(array)/sizeof(array[0])) ASSERT(_countof(bitMasks) == MPIControlIoBitLAST); |
Branch.Release (optional)
The Branch number identifies a branch from an existing version (Major.Minor.Release) or from another Branch. The Branch number is incremented for each instance of a Branch from an existing version (or from an existing Branch). The Release level definition is the same as defined in Major.Minor.Release.
The Branch.Release identifiers are always added as a pair. Every Branch REQUIRES a corresponding Release. Using Branch.Release makes it possible to trace back to any previous Branch.Release and eventually back to the starting Version. It provides a traceable history for infinitely expandable, multi-branched, multi-release trees.
Application Compatibility
Branch.Release releases follow the same change limitations as minor
versions. Since a Branch development is customer specific, the scope of
its changes can vary. Please consult the Release Notes section or MEI
for details.
Using this scheme, every software build/release is guaranteed to have a unique identifying value.
