Skip to content

Commit 85f0fff

Browse files
committed
README: update for the new version numbering scheme
1 parent 83eec67 commit 85f0fff

File tree

1 file changed

+76
-159
lines changed

1 file changed

+76
-159
lines changed

README

Lines changed: 76 additions & 159 deletions
Original file line numberDiff line numberDiff line change
@@ -1364,81 +1364,89 @@ Open MPI Version Numbers and Binary Compatibility
13641364
Open MPI has two sets of version numbers that are likely of interest
13651365
to end users / system administrator:
13661366

1367-
* Software version number
1368-
* Shared library version numbers
1367+
* Software version number
1368+
* Shared library version numbers
13691369

1370-
Both are described below, followed by a discussion of application
1371-
binary interface (ABI) compatibility implications.
1370+
Both are predicated on Open MPI's definition of "backwards
1371+
compatibility."
1372+
1373+
NOTE: The version numbering conventions were changed with the release
1374+
of v1.10.0. Most notably, Open MPI no longer uses an "odd/even"
1375+
release schedule to indicate feature development vs. stable
1376+
releases. See the README in releases prior to v1.10.0 for more
1377+
information (e.g.,
1378+
https://github.com/open-mpi/ompi-release/blob/v1.8/README#L1392-L1475).
1379+
1380+
Backwards Compatibility
1381+
-----------------------
1382+
1383+
Open MPI version Y is backwards compatible with Open MPI version X
1384+
(where Y>X) if users can:
1385+
1386+
* Compile an MPI/OSHMEM application with version X, mpirun/oshrun it
1387+
with version Y, and get the same user-observable behavior.
1388+
* Invoke ompi_info with the same CLI options in versions X and Y and
1389+
get the same user-observable behavior.
1390+
1391+
Note that this definition encompasses several things:
1392+
1393+
* Application Binary Interface (ABI)
1394+
* MPI / OSHMEM run time system
1395+
* mpirun / oshrun command line options
1396+
* MCA parameter names / values / meanings
13721397

13731398
Software Version Number
13741399
-----------------------
13751400

1376-
The version number of Open MPI distribution tarballs are the union of
1377-
several different values: major, minor, release, and an optional
1378-
quantifier.
1401+
Official Open MPI releases use the common "A.B.C" version identifier
1402+
format. Each of the three numbers has a specific meaning:
13791403

13801404
* Major: The major number is the first integer in the version string
1381-
(e.g., v1.2.3). Changes in the major number typically indicate a
1382-
significant change in the code base and/or end-user
1383-
functionality. The major number is always included in the version
1384-
number.
1405+
Changes in the major number typically indicate a significant
1406+
change in the code base and/or end-user functionality, and also
1407+
indicate a break from backwards compatibility. Specifically: Open
1408+
MPI releases with different major version numbers are not
1409+
backwards compatibile with each other.
1410+
1411+
CAVEAT: This rule does not extend to versions prior to v1.10.0.
1412+
Specifically: v1.10.x is not guaranteed to be backwards
1413+
compatible with other v1.x releases.
13851414

13861415
* Minor: The minor number is the second integer in the version
1387-
string (e.g., v1.2.3). Changes in the minor number typically
1388-
indicate a incremental change in the code base and/or end-user
1389-
functionality. The minor number is always included in the version
1390-
number. Starting with Open MPI v1.3.0, the minor release number
1391-
took on additional significance (see this wiki page for more
1392-
details):
1393-
1394-
o Even minor release numbers are part of "super-stable"
1395-
release series (e.g., v1.4.0). Releases in super stable series
1396-
are well-tested, time-tested, and mature. Such releases are
1397-
recomended for production sites. Changes between subsequent
1398-
releases in super stable series are expected to be fairly small.
1399-
o Odd minor release numbers are part of "feature" release
1400-
series (e.g., 1.3.7). Releases in feature releases are
1401-
well-tested, but they are not necessarily time-tested or as
1402-
mature as super stable releases. Changes between subsequent
1403-
releases in feature series may be large.
1416+
string (e.g., v2.5.3). Changes in the minor number indicate a
1417+
user-observable change in the code base and/or end-user
1418+
functionality. Backwards compatibility will still be preserved
1419+
with prior releases that have the same major version number (e.g.,
1420+
v2.5.3 is backwards compatible with v2.3.1).
14041421

14051422
* Release: The release number is the third integer in the version
1406-
string (e.g., v1.2.3). Changes in the release number typically
1407-
indicate a bug fix in the code base and/or end-user
1408-
functionality. If the release number is 0, it is omitted from the
1409-
version number (e.g., v1.2 has a release number of 0).
1423+
string (e.g., v4.3.0). Changes in the release number typically
1424+
indicate a bug fix in the code base and/or end-user functionality.
1425+
For example, if there is a release that only contains bug fixes
1426+
and no other user-observable changes or new features, only the
1427+
third integer will be increased (e.g., from v4.3.0 to v4.3.1).
14101428

14111429
* Quantifier: Open MPI version numbers sometimes have an arbitrary
14121430
string affixed to the end of the version number. Common strings
14131431
include:
14141432

1415-
o aX: Indicates an alpha release. X is an integer indicating
1416-
the number of the alpha release (e.g., v1.2.3a5 indicates the
1417-
5th alpha release of version 1.2.3).
1418-
o bX: Indicates a beta release. X is an integer indicating
1419-
the number of the beta release (e.g., v1.2.3b3 indicates the 3rd
1420-
beta release of version 1.2.3).
1421-
o rcX: Indicates a release candidate. X is an integer
1422-
indicating the number of the release candidate (e.g., v1.2.3rc4
1423-
indicates the 4th release candidate of version 1.2.3).
1424-
o Prior to October 2014, nightly snapshot tarballs would include a
1425-
repository version number as well, such as r1234, indicating
1426-
that that snapshot tarball was built at Subversion r1234).
1427-
1428-
Starting in October 2014, although the major, minor, and release
1429-
values (and optional quantifiers) are reported in Open MPI nightly
1430-
snapshot tarballs, the filenames of these snapshot tarballs follow a
1431-
slightly different convention.
1432-
1433-
Specifically, the snapshot tarball filename contains three distinct
1434-
values:
1435-
1436-
* Most recent Git tag name on the branch from which the tarball was
1437-
created.
1438-
1433+
o aX: Indicates an alpha release. X is an integer indicating the
1434+
number of the alpha release (e.g., v1.10.3a5 indicates the 5th
1435+
alpha release of version 1.10.3).
1436+
o bX: Indicates a beta release. X is an integer indicating the
1437+
number of the beta release (e.g., v1.10.3b3 indicates the 3rd
1438+
beta release of version 1.10.3).
1439+
o rcX: Indicates a release candidate. X is an integer indicating
1440+
the number of the release candidate (e.g., v1.10.3rc4 indicates
1441+
the 4th release candidate of version 1.10.3).
1442+
1443+
Nightly development snapshot tarballs use a different version number
1444+
scheme; they contain three distinct values:
1445+
1446+
* The most recent Git tag name on the branch from which the tarball
1447+
was created.
14391448
* An integer indicating how many Git commits have occurred since
14401449
that Git tag.
1441-
14421450
* The Git hash of the tip of the branch.
14431451

14441452
For example, a snapshot tarball filename of
@@ -1458,25 +1466,6 @@ human-recognizable ordering for snapshot tarballs.
14581466
Shared Library Version Number
14591467
-----------------------------
14601468

1461-
Open MPI started using the GNU Libtool shared library versioning
1462-
scheme with the release of v1.3.2.
1463-
1464-
NOTE: Only official releases of Open MPI adhere to this versioning
1465-
scheme. "Beta" releases, release candidates, and nightly
1466-
tarballs, developer snapshots, and snapshot tarballs likely will
1467-
all have arbitrary/meaningless shared library version numbers.
1468-
1469-
For deep voodoo technical reasons, only the MPI API libraries were
1470-
versioned until Open MPI v1.5 was released (i.e., libmpi*so --
1471-
libopen-rte.so or libopen-pal.so were not versioned until v1.5).
1472-
Please see https://svn.open-mpi.org/trac/ompi/ticket/2092 for more
1473-
details.
1474-
1475-
NOTE: This policy change will cause an ABI incompatibility between MPI
1476-
applications compiled/linked against the Open MPI v1.4 series;
1477-
such applications will not be able to upgrade to the Open MPI
1478-
v1.5 series without re-linking. Sorry folks!
1479-
14801469
The GNU Libtool official documentation details how the versioning
14811470
scheme works. The quick version is that the shared library versions
14821471
are a triple of integers: (current,revision,age), or "c:r:a". This
@@ -1519,96 +1508,24 @@ Here's how we apply those rules specifically to Open MPI:
15191508
* libmca_common_*
15201509

15211510
3. The following libraries use a slightly modified version of the
1522-
above rules: rules 4, 5, and 6 only apply to the official MPI
1523-
interfaces (functions, global variables). The rationale for this
1524-
decision is that the vast majority of our users only care about
1525-
the official/public MPI interfaces; we therefore want the .so
1526-
version number to reflect only changes to the official MPI API.
1527-
Put simply: non-MPI API / internal changes to the
1528-
MPI-application-facing libraries are irrelevant to pure MPI
1529-
applications.
1511+
above rules: rules 4, 5, and 6 only apply to the official MPI and
1512+
OpenSHMEM interfaces (functions, global variables). The rationale
1513+
for this decision is that the vast majority of our users only care
1514+
about the official/public MPI/OSHMEM interfaces; we therefore want
1515+
the .so version number to reflect only changes to the official
1516+
MPI/OSHMEM APIs. Put simply: non-MPI/OSHMEM API / internal
1517+
changes to the MPI-application-facing libraries are irrelevant to
1518+
pure MPI/OSHMEM applications.
15301519

15311520
* libmpi
15321521
* libmpi_mpifh
15331522
* libmpi_usempi_tkr
15341523
* libmpi_usempi_ignore_tkr
15351524
* libmpi_usempif08
15361525
* libmpi_cxx
1537-
1538-
Application Binary Interface (ABI) Compatibility
1539-
------------------------------------------------
1540-
1541-
Open MPI provided forward application binary interface (ABI)
1542-
compatibility for MPI applications starting with v1.3.2. Prior to
1543-
that version, no ABI guarantees were provided.
1544-
1545-
Starting with v1.3.2, Open MPI provides forward ABI compatibility in
1546-
all versions of a given feature release series and its corresponding
1547-
super stable series. For example, on a single platform, an MPI
1548-
application linked against Open MPI v1.7.2 shared libraries can be
1549-
updated to point to the shared libraries in any successive v1.7.x or
1550-
v1.8 release and still work properly (e.g., via the LD_LIBRARY_PATH
1551-
environment variable or other operating system mechanism).
1552-
1553-
* A bug that causes an ABI compatibility issue was discovered after
1554-
v1.7.3 was released. The bug only affects users who configure their
1555-
Fortran compilers to use "large" INTEGERs by default, but still have
1556-
"normal" ints for C (e.g., 8 byte Fortran INTEGERs and 4 byte C
1557-
ints). In this case, the Fortran MPI_STATUS_SIZE value was computed
1558-
incorrectly.
1559-
1560-
Fixing this issue breakes ABI *only in the sizeof(INTEGER) !=
1561-
sizeof(int) case*. However, since Open MPI provides ABI guarantees
1562-
for the v1.7/v1.8 series, this bug is only fixed if Open MPI is
1563-
configured with the --enable-abi-breaking-fortran-status-i8-fix
1564-
flag, which, as its name implies, breaks ABI. For example:
1565-
1566-
shell$ ./configure --enable-abi-breaking-fortran-status-i8-fix \
1567-
CC=icc F77=ifort FC=ifort CXX=icpc \
1568-
FFLAGS=i8 FCFLAGS=-i8 ...
1569-
1570-
* A second bug was discovered after v1.7.3 was released that causes
1571-
ABI to be broken for gfortran users who are using the "mpi" Fortran
1572-
module. In short, for versions of gfortran that do not support
1573-
"ignore TKR" functionality (i.e., gfortran <=v4.8), Open MPI was
1574-
providing interfaces for MPI subroutines with choice buffers (e.g.,
1575-
MPI_Send) in the Fortran mpi module. The MPI-3.0 specification
1576-
expressly states not to do this. To be consistent with MPI-3, Open
1577-
MPI v1.7.4 therefore removed all MPI interfaces with choice buffers
1578-
from the no-ignore-TKR version of the Fortran mpi module, even
1579-
though this breaks ABI between v1.7.3 and v1.7.4. Affected users
1580-
should be able to recompile their MPI applications with v1.7.4 with
1581-
no changes.
1582-
1583-
Other Fortran compilers that provide "ignore TKR" functionality are
1584-
not affected by this change.
1585-
1586-
* The Fortran ABI was inadvertantly changed between Open MPI v1.8.1
1587-
and v1.8.2 for users who built Open MPI with gfortran >= v4.9. In
1588-
particular, if an MPI application was built against Open MPI <=
1589-
v1.8.2 with gfotran >= v4.9, and the MPI application used
1590-
MPI_SIZEOF, it will not be ABI compatible with Open MPI v1.8.3. The
1591-
ABI incompatibility problem was fixed in v1.8.4.
1592-
1593-
* The 1.8 series suffered an inadvertent break in ABI compatibility
1594-
prior to release 1.8.5 due to a test that rejected TCP connections
1595-
from processes compiled against another version. The test
1596-
incorrectly checked all three parts of the version number, thus
1597-
preventing a process compiled against 1.8.3 from connecting to one
1598-
compiled against 1.8.4. This was fixed in 1.8.5, so ABI will be
1599-
maintained from there forward.
1600-
1601-
Open MPI reserves the right to break ABI compatibility at new feature
1602-
release series. For example, the same MPI application from above
1603-
(linked against Open MPI v1.7.2 shared libraries) will likely *not*
1604-
work with Open MPI v1.9 shared libraries.
1605-
1606-
NOTE: The 1.8 series suffered an inadvertent break in ABI compatibility
1607-
prior to release 1.8.5 due to a test that rejected TCP connections from
1608-
processes compiled against another version. The test incorrectly checked
1609-
all three parts of the version number, thus preventing a process compiled
1610-
against 1.8.3 from connecting to one compiled against 1.8.4. This was fixed
1611-
in 1.8.5, so ABI will be maintained from there forward.
1526+
* libmpi_java
1527+
* liboshmem
1528+
* liboshmem_java
16121529

16131530
===========================================================================
16141531

0 commit comments

Comments
 (0)