You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
An \acf{API} defines how data types, data structures, and functions are represented in source code.
643
+
An \acf{ABI} defines how data types, data structures, and functions are represented in machine code for a given system.
644
+
An important aspect of an \ac{ABI} is the size, layout, and alignment of data structures.
645
+
A stable \ac{ABI} may allow a program compiled with one implementation of the PMIx Standard to run with a different implementation of the PMIx Standard as long as both implementations adhere to the same \ac{ABI}.
646
+
647
+
The PMIx Standard should strive to maintain a stable \ac{ABI} to support applications and tools that rely on more than one implementation of the PMIx Standard.
648
+
To facilitate such interoperability the PMIx \ac{ASC} will maintain a standard set of headers that are versioned in relation to the PMIx Standard document that applications and tools can reference~\footnote{PMIx Headers for ABI Compatibility \url{https://github.com/pmix/pmix-abi}}.
649
+
650
+
In recognition that there are circumstances where the \ac{ABI} needs to be modified this section defines some guidance for making such modifications.
651
+
Additions to the PMIx interface can occur without breaking \ac{ABI} compatibility.
652
+
Deprecating portions of the PMIx interface does not break \ac{ABI} compatibility but serves as a warning that the \ac{ABI} may be impacted in the future.
653
+
Removing portions of the PMIx interface does break \ac{ABI} compatibility and that process (see Section~\ref{deprecation}) must continue to adhere to the following guidance.
654
+
As such the following text focuses on modifications to the existing PMIx interface.
655
+
656
+
The PMIx Standard ABI is defined in two parts.
657
+
The \textit{PMIx Standard Stable ABI} represents the Stable PMIx Standard elements (see Section~\ref{classes-of-standard}).
658
+
The \textit{PMIx Standard Provisional ABI} represents the Provisional PMIx Standard elements (see Section~\ref{classes-of-standard}).
659
+
The rationale for this separation is in recognition that Provisional PMIx Standard elements are able to change frequently in response to broad experimentation.
660
+
This is in contrast to Stable PMIx Standard elements which are permanent, non-changing parts of the PMIx Standard.
661
+
662
+
Both the Stable ABI and Provisional ABI are versioned with two increasing numbers (largely following the Semantic Versioning 2.0.0 specification\footnote{Semantic Versioning \url{https://semver.org/spec/v2.0.0.html}}):
663
+
\begin{itemize}
664
+
\item\texttt{MAJOR} incremented when the ABI changed in a backward-incompatible manner.
665
+
\item\texttt{MINOR} incremented when functionality is added to the ABI in a backward-compatible manner.
666
+
\end{itemize}
667
+
668
+
The PMIx Standard Stable ABI will increment the \texttt{MAJOR} only in major releases of the PMIx Standard.
669
+
The PMIx Standard Stable ABI may increment the \texttt{MINOR} in any release of the PMIx Standard.
670
+
The PMIx Standard Provisional ABI may increment either the \texttt{MAJOR} or \texttt{MINOR} in any release of the PMIx Standard.
671
+
672
+
The PMIx ASC will maintain a mapping between the PMIx Standard version and the ABI version.
0 commit comments