A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://access.redhat.com/articles/rhel9-abi-compatibility below:

Red Hat Enterprise Linux 9: Application Compatibility Guide

Red Hat Enterprise Linux 9:
Application Compatibility Guide
May 2022

Note: This article discusses application compatibility for Red Hat Enterprise Linux 9. For Red hat Enterprise Linux 8, please see the Red Hat Enterprise Linux 8: Application Compatibility GUIDE.

Table of Contents Executive summary

This guide is intended to provide software developers with Red Hat’s guidelines regarding support of third-party applications across multiple releases of the Red Hat® Enterprise Linux® platform. ISV and customer applications can reduce or avoid migration issues between major and minor Red Hat® Enterprise Linux® versions by following these guidelines during application development.

This document describes the recommended uses of the system application programming (API) and binary interfaces (ABI) that are intended to provide compatibility across Red Hat® Enterprise Linux® releases. It outlines the tiered framework under which applications are considered compatible or not compatible.

Introduction

The purpose of this document is to provide guidance regarding the stability of applications and libraries written for RHEL and run under newer releases of RHEL. The document focuses primarily on issues of software backwards-compatibility. Although backwards compatibility is the goal, development of new capabilities or security concerns sometimes makes that impractical. Hence, the guidelines and published policy may sometimes be overridden by the objective of providing our customers with the most competitive, secure, and capable systems possible; situational testing is always recommended.
If additional clarification of these compatibility guidelines is required, please contact your Red Hat representative.

Terminology

The following are basic terms used in this document:

Compatibility levels

All components and packages in Red Hat Enterprise Linux are classified under one of the following four compatibility levels:

Notes on compatibility levels

Compatibility levels for bare-metal configurations also apply to virtualized and containerized configurations except for any features that directly interact with hardware. Those features directly related to hardware have no API or ABI compatibility level. For example, applications that rely on Graphics Processing Unit (GPU) features cannot expect binary compatibility.

Red Hat requests that application developers validate that any behavior they depend on is explicitly defined in formal API documentation to prevent introducing dependencies on unspecified implementation-specific behavior or dependencies on bugs in a particular implementation of an API. For example, new releases of the GNU C library (glibc) may not be compatible with older releases if an application uses an undocumented API or relies on undefined behavior.

Your support representative will be happy to guide you through any specific questions you may have.

Compatibility exceptions

The following are exceptions to compatibility in RHEL.

SystemTap static probes

Static linking with the C/C++ runtime

C/C++ application sanitizers

CodeReady Linux Builder repository

Guidelines for preserving binary compatibility

Red Hat recommends that application developers adopt the following principles in order to improve binary compatibility:

  1. Use only libraries and applications listed in the compatibility level that suits your application needs.

  2. Build applications using the published interfaces of a library. Non-published (internal) interfaces are subject to change at any time, which can cause instability in the dependent application if relied upon.

  3. An application is only guaranteed to run correctly if it executes in an environment that is as new as the environment it was built in or newer. For example, compiling your application on Red Hat Enterprise Linux 9.0 means your application is only guaranteed to run correctly on Red Hat Enterprise Linux 9.0 or later depending on the compatibility level of the components you depend upon.

  4. Application developers should validate that any behavior they depend on is described in the published API documentation to prevent introducing dependencies on unspecified implementation-specific semantics or introducing dependencies on bugs in a particular implementation of an API. For example, new releases of the GNU C library are not guaranteed to be compatible with older releases if the old behavior was not consistent with a published specification.

  5. Avoid static linking of libraries (C/C++). Static linking causes the executables to have their own version of the library. This increases the chance of an application not running predictably on a later version of the operating system as these library dependencies might have changed along the way. Linking applications dynamically is strongly recommended in order to avoid this problem.

  6. Package applications using the RPM mechanism. RPM provides a software-packaging mechanism that includes a detailed specification of application dependencies. When creating RPMs, the following should be kept in mind:

  7. Follow the Filesystem Hierarchy Standard (FHS) version 2.3 or higher when installing programs. Third-party software should be installed to the '/opt' subdirectory. More information on the FHS is available at http://www.pathname.com/fhs/.

  8. Do not design applications that rely on configuration files provided by system packages or other components. These files can change between versions unless the upstream community is explicitly committed to preserving them.

  9. Do not install packages, modules, or other global identifiers with the same names as system components shipped by Red Hat. This includes RPM package names (including Provides), shared object names (sonames, e.g. libpthread.so.0), and symbol names (e.g. log), but also Python package names, and D-Bus endpoints used by the systems.

  10. If you require functionality from a component that is currently not listed in any of the application compatibility levels, or if you would like a component to be moved to a different compatibility level, please contact your support representative for review.

  11. Do not depend on components with a shorter compatibility guarantees than your application. Please see Compatibility levels for specific packages and libraries for a list of packages and their compatibility level.

  12. Do not depend on a specific Linux kernel version. Avoid reading from proc, sys, and debug filesystems, or any other pseudo-filesystem. Avoid using ioctls to directly interact with hardware.

Note: During the life cycle of a major release, Red Hat makes commercially reasonable efforts to maintain the binary compatibility of the runtime environment across all minor releases and errata advisories. If necessary, Red Hat may make exceptions to this compatibility goal for critical impact security or other significant issues. Furthermore, as described above and in Compatibility levels for specific packages and libraries, major releases of Red Hat Enterprise Linux contain a limited set of backward-compatible libraries included in previous major releases to allow for the easy migration of applications. Typically, Red Hat applies changes in such a way as to minimize the amount of change and to maintain binary compatibility.

Compatibility levels for specific packages and libraries

For each compatibility level Red Hat defines the binary packages which provide APIs and ABIs that are part of the compatibility level. The specific compatibility level for each package can be reviewed within the Red Hat Enterprise Linux 9 Package manifest.


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4