Este conteúdo não está disponível no idioma selecionado.
Chapter 7. Compilers and development tools
The following chapter contains the most notable changes to compilers and development tools between RHEL 8 and RHEL 9.
7.1. Notable changes to glibc
All threading APIs now merged into libc.so.6
In RHEL 8, the system threading library, libpthread.so
, was a distinct library. In RHEL 9, all threading APIs have been merged into the core C library libc.so.6
. Moving threading into the core C library enables the library to support threads by default. With a single file the in-place upgrade process is also made smoother since the thread APIs and core C, POSIX and BSD APIs are all updated at the same time (no distinct libraries).
Developers can continue to use the -lpthread
option when linking threaded applications, but it is no longer necessary.
Historically, libraries used a weak reference to pthread_create
or pthread_cancel
to detect if processes could possibly be multi-threaded. Since this check now always succeeds, because libpthread.so
is now in the core C library, libraries should use the __libc_single_threaded
symbol for this instead.
The libdl
library now merged into libc.so.6
In RHEL 8, the libdl
library was a distinct library. In RHEL 9, the libdl
library has been merged into the core C library libc.so.6
. This means that interposing the dlsym
function is now much more difficult. Applications that need to control the way how symbol resolution works should switch to the auditor (LD_AUDIT
) interfaces.
Name Service Switch service plugins for dns
and files
now merged into libc.so.6
In RHEL 8, the Name Service Switch (NSS) services for files
and dns
, which provides data to user and group identity management APIs, was a distinct plugin. In RHEL 9, the plugins have been merged into the core C library libc.so.6.
Moving the files
and dns
service providers ensures that applications that need to cross a mount namespace boundary (for example, enter a container) can do so knowing that NSS files
and dns
access services are always loaded at process startup.
When calling user and group APIs, where those APIs depend on an nsswitch.conf
that references files
or dns
, developers can expect those services to always be present and provide the underlying service data.
7.2. Red Hat build of OpenJDK
Red Hat build of OpenJDK 17 is the default Java implementation since RHEL 9.5
The default RHEL 9 Java implementation is being changed from OpenJDK 11, which has reached its End Of Life (EOL), to OpenJDK 17. After this update, the java-17-openjdk
packages, which provide the OpenJDK 17 Java Runtime Environment and the OpenJDK 17 Java Software Development Kit, will also provide the java
and java-devel
packages. For more information, see the OpenJDK documentation.
Existing packages in RHEL 9 that call java/bin
or java-openjdk/bin
directly will be immediately able to use OpenJDK 17.
Existing packages in RHEL 9 that require the java
or java-devel
packages directly, namely tomcat
and systemtap-runtime-java
, will pull the appropriate dependency automatically.
Ant, Maven, and packages that are using Java indirectly through the javapackages-tools
package will be fully transitioned in an asynchronous update shortly after the general availability of RHEL 9.5.
If you need to install OpenJDK for the first time or if the default package is not installed through a dependency chain, use DNF:
# dnf install java-17-openjdk-devel
For more information, see Installing multiple minor versions of Red Hat build of OpenJDK on RHEL by using yum.
The current java-11-openjdk
packages in RHEL 9 will not receive any further updates. However, Red Hat will provide Extended Life Cycle support (ELS) phase 1 with updates for Red Hat build of OpenJDK 11 until October 31, 2027. See Red Hat build of OpenJDK 11 Extended Lifecycle Support (ELS-1) Availability for details.
For information specific to the OpenJDK ELS program and the OpenJDK lifecycle, see the OpenJDK Life Cycle and Support Policy.
If you have the alternatives
command set to manual
mode for java
and related components, OpenJDK 11 will still be used after the update. To use OpenJDK 17 in this case, change the alternatives
setting to auto
, for example:
# alternatives --auto java # alternatives --auto javac
Use the alternatives --list
command to verify the settings.
7.3. .NET on RHEL 9
.NET 7.0 is no longer supported
.NET 7.0 reached its End Of Life (EOL) in May 2024. Use .NET 8.0 or later instead. For details about usage, see .NET 8.0 documentation. For information about the length of support, see the Red Hat Enterprise Linux Application Streams Life Cycle.