Chapter 17. Compilers and development tools
This chapter lists the most notable changes to compilers and development tools between RHEL 8 and RHEL 9.
17.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.