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: For more information, see Installing multiple minor versions of Red Hat build of OpenJDK on RHEL by using yum . Important 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 . Note 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: 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 .

Commands:
dnf install java-17-openjdk-devel
alternatives --auto java alternatives --auto javac