@@ -1364,81 +1364,89 @@ Open MPI Version Numbers and Binary Compatibility
13641364Open MPI has two sets of version numbers that are likely of interest
13651365to 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
13731398Software 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
14441452For example, a snapshot tarball filename of
@@ -1458,25 +1466,6 @@ human-recognizable ordering for snapshot tarballs.
14581466Shared 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-
14801469The GNU Libtool official documentation details how the versioning
14811470scheme works. The quick version is that the shared library versions
14821471are 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