Skip to content

Commit d859874

Browse files
authored
Merge pull request #34 from jjhursey/abi-lang
Guidance on ABI stability
2 parents 940f180 + d5eaf37 commit d859874

File tree

1 file changed

+42
-1
lines changed

1 file changed

+42
-1
lines changed

pmix_governance.tex

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@
8585
\acrodef{PMI}[PMI]{Process Management Interface}
8686
\acrodef{PMIx}[PMIx]{Process Management Interface - Exascale}
8787
\acrodef{ASC}[ASC]{Administrative Steering Committee}
88+
\acrodef{API}[API]{Application Programming Interface}
89+
\acrodef{ABI}[ABI]{Application Binary Interface}
8890

8991
%%%%%%%%%%%%%%%%%%%
9092
% Footers
@@ -619,7 +621,7 @@ \subsubsection{Minor Document Changes Guidance}%
619621
changes to the attention of the ASC Co-Chairs and Release Managers.
620622
The Co-Chairs and Release Managers will evaluate the proposed
621623
changes to determine whether they are minor or substantive.
622-
Additionally, all PMIx participants are encouranged to examine
624+
Additionally, all PMIx participants are encouraged to examine
623625
and comment on the changes in the pull request to aid the
624626
Co-Chairs and Release Managers in their decision.
625627
If all Co-Chairs and Release Managers determine that the
@@ -631,6 +633,45 @@ \subsubsection{Minor Document Changes Guidance}%
631633
the changes will be handled using the full rigorous process
632634
as described in Section~\ref{the-standardization-process}.
633635

636+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
637+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
638+
\hypertarget{abi-changes-guidance}{%
639+
\subsubsection{Application Binary Interface (ABI) Changes Guidance}%
640+
\label{abi-changes-guidance}}
641+
642+
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.
673+
674+
634675
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
635676
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
636677
\hypertarget{the-standardization-process}{%

0 commit comments

Comments
 (0)