Chapter 6. Compilers and development tools


The following chapter contains the most notable changes to compilers and development tools between RHEL 9 and RHEL 10.

Initial versions available in RHEL 10.0

The following system toolchain components are available with RHEL 10.0:

  • GCC 14.2
  • glibc 2.39
  • Annobin 12.92
  • binutils 2.41

The following performance tools and debuggers are available with RHEL 10.0:

  • GDB 14.2
  • Valgrind 3.24.0
  • SystemTap 5.2
  • Dyninst 12.3.0
  • elfutils 0.192
  • libabigail 2.6

The following performance monitoring tools are available with RHEL 10.0:

  • PCP 6.3.7
  • Grafana 10.2.6

The following compiler toolsets are available with RHEL 10.0:

  • LLVM Toolset 19.1.7
  • Rust Toolset 1.84.1
  • Go Toolset 1.23.2

RHEL 10 provides cmake in version 3.30.5

RHEL 10 is distributed with cmake version 3.30.5. For notable changes, see the upstream release notes.

RHEL 10 provides Rust Toolset in version 1.84.0

RHEL 10 is distributed with Rust Toolset in version 1.84.0. Notable enhancements since the previously available version 1.79.0 include:

  • The new LazyCell and LazyLock types delay the initialization until the first use. These extend the earlier OnceCell and OnceLock types with the initialization function included in each instance.
  • The new sort implementations in the standard library improve the runtime performance and compile times. They also try to detect cases where a comparator is not producing a total order, making that panic instead of returning unsorted data.
  • Precise capturing for opaque return types have been added. The new use<..> syntax specifies the generic parameters and lifetimes used in an impl Trait return type.
  • Many new features for const code have been added, for example:

    • Floating point support
    • const immediates for inline assembly
    • References to statics
    • Mutable reference and pointers
  • Many new features for unsafe code have been added, for example:

    • Strict provenance APIs
    • &raw pointer syntax
    • Safely addressing statics
    • Declaring safe items in unsafe extern blocks
  • The Cargo dependency resolver is now version aware. If a dependency crate specifies its minimum supported Rust version, Cargo uses this information when it resolves the dependency graph instead of using the latest semver-compatible crate version.

Compatibility notes:

  • The WebAssembly System Interface (WASI) target is changed from rust-std-static-wasm32-wasi to rust-std-static-wasm32-wasip1. You can select the WASI target also by using the --target wasm32-wasip1 parameter on the command line. For more information, see the Changes to Rust’s WASI targets upstream blog post.
  • The split panic hook and panic handler arguments core::panic::PanicInfo and std::panic::PanicInfo are now different types.
  • An abort on uncaught panics now requires to use the extern "C-unwind" instruction instead of extern "C" to allow unwinding across ABI boundaries.

Rust Toolset is a rolling Application Stream, and Red Hat only supports the latest version. For more information, see the Red Hat Enterprise Linux Application Streams Life Cycle document.

LLVM Toolset provided to 19.1.7

LLVM Toolset is provided inversion 19.1.7.

Notable changes of the LLVM compiler:

  • LLVM now uses debug records, a more efficient representation for debug information.

Notable updates of the Clang:

  • C++14 sized deallocation is now enabled by default.
  • C++17 support has been completed.
  • Improvements to C++20 support, especially around modules, concepts, and Class Template Argument Deduction (CTAD) have been added.
  • Improvements to C23, C2c, C23, and C2y support have been added.

For more information, see the LLVM release notes and Clang release notes.

Go Toolset provided in version 1.23

RHEL 10.0 provides Go Toolset in version 1.23. Notable enhancements include:

  • The for-range loop accepts iterator functions of the following types:

    • func(func() bool)
    • func(func(K) bool)
    • func(func(K, V) bool)

      Calls of the iterator argument function create the iteration values for the for-range loop. For reference links, see the upstream release notes.

  • The Go Toolchain can collect usage and breakage statistics to help the Go team to understand how the Go Toolchain is used and working. By default, Go Telemetry does not upload telemetry data and stores it only locally. For further information, see the upstream Go Telemetry documentation.
  • The go vet sub-command includes the stdversion analyzer which flags references to symbols that are too new for the version of Go you use in the referring file.
  • The cmd and cgo features support the -ldflags option to pass flags to the C linker. The go command uses this flag automatically to avoid argument list too long errors when you use a very large CGO_LDFLAGS environment variable.
  • The trace utility tolerates partially broken traces and attempts to recover the trace data. This is especially useful in case of crashes, because you can get the trace leading up to the crash.
  • The traceback printed by the runtime after an unhandled panic or other fatal error carries indentation to distinguish the stack trace of the goroutine from the first goroutine.
  • The compiler build time overhead of using profile-guided optimization was reduced to single-digit percentage.
  • The new -bindnow linker flag enables immediate function binding when building a dynamically-linked ELF binary.
  • The //go:linkname linker directive no longer refer to internal symbols in the standard library and the runtime that are not marked with //go:linkname on their definition.
  • If a program no longer refers to a Timer or Ticker, garbage collection cleans them up immediately even if their Stop method has not been called. The timer channel associated with a Timer or Ticker is now unbuffered with capacity 0. This ensures that, every time a Reset or Stop method is called, no stale values are not sent or received after the call.
  • The new unique package provides facilities for canonicalizing values, such as interning or hash-consing.
  • The new iter package provides the basic definitions to work with user-defined iterators.
  • The slices and maps packages introduce several new functions that work with iterators.
  • The new structs package provides types for struct fields that modify properties of the containing struct type, such as memory layout.
  • Minor changes are made in the following packages:

    • archive/tar
    • crypto/tls
    • crypto/x509
    • database/sql
    • debug/elf
    • encoding/binary
    • go/ast
    • go/types
    • math/rand/v2
    • net
    • net/http
    • net/http/httptest
    • net/netips
    • path/filepath
    • reflect
    • runtime/debug
    • runtime/pprof
    • runtime/trace
    • slices
    • sync
    • sync/atomic
    • syscall
    • testing/fstest
    • text/template
    • time
    • unicode/utf16

For more information, see the upstream release notes.

Go Toolset is a rolling Application Stream, and Red Hat supports only the latest version. For more information, see the Red Hat Enterprise Linux Application Streams Life Cycle document. LLVM Toolset is a rolling Application Stream, and only the latest version is supported. For more information, see the Red Hat Enterprise Linux Application Streams Life Cycle document.

GCC 14 defaults to x86-64-v3

GCC 14 in RHEL 10 defaults to the x86-64-v3 microarchitecture level. This level enables certain capabilities by default, such as the AVX and AVX2 instruction sets and the fused multiply-add (FMA) instruction set. See the related article for more details.

Warnings changed to errors impacting C code compilation in GCC 14

Starting with GCC 14, several C warnings have been elevated to errors, such as implicit int types, implicit function declarations, and using pointers as integers. This update can disrupt application builds in cases where developers have been ignoring these warnings. Developers now must address these issues for successful compilation. For more information, see Porting to GCC 14.

GCC defaults to using the IEEE128 floating point format on IBM Power Systems

In RHEL10, GCC uses the IEEE128 floating point format by default for all long double floating point numbers on IBM Power Systems instead of the earlier software-only IBM-DOUBLE-DOUBLE code. As a result, you can notice performance improvements in C or C++ code that performs computations by using long double floating point numbers.

Note that this 128-bit long double floating point ABI is incompatible with the floating point ABI used in RHEL 8 and earlier versions. Support for hardware instructions to perform IEEE128 operations is available since IBM POWER9.

nscd replaced by systemd-resolved and sssd

The nscd caching daemon has been removed from RHEL 10. The GNU C Library (glibc) continues to work with the available replacements:

  • If you need DNS caching, install and enable the systemd-resolved service.
  • If you need caching for any other name services, install and configure the sssd service.

Grafana, PCP, and grafana-pcp now use Valkey to store data

In RHEL 10, the Valkey key-value store replaces Redis. As a result, Grafana, PCP, and the grafana-pcp plug-in now use Valkey to store data instead of Redis. The PCP Redis data source in the grafana-pcp plug-in is now named PCP Valkey.

The new version of TBB is incompatible

RHEL 10 includes the Threading Building Blocks (TBB) library version 2021.11.0, which is incompatible with the versions distributed with previous releases of RHEL. You must rebuild applications that use TBB to make them run on RHEL 10.

Significant performance improvements in zlib-ng

The zlib-ng library provides substantial performance improvements and, therefore, RHEL 10 replaces the traditional zlib implementation with zlib-ng.

Result of benchmarks with zlib-ng 2.2.3 :

  • Decompression is 378% faster than with zlib.
  • Compression is 423% faster than with zlib.

Red Hat build of OpenJDK 21 is the default Java implementation in RHEL 10

The default RHEL 10 Java implementation is OpenJDK 21. Use the java-21-openjdk packages, which provide the OpenJDK 21 Java Runtime Environment and the OpenJDK 21 Java Software Development Kit. For more information, see the OpenJDK documentation.

Back to top
Red Hat logoGithubredditYoutubeTwitter

Learn

Try, buy, & sell

Communities

About Red Hat Documentation

We help Red Hat users innovate and achieve their goals with our products and services with content they can trust. Explore our recent updates.

Making open source more inclusive

Red Hat is committed to replacing problematic language in our code, documentation, and web properties. For more details, see the Red Hat Blog.

About Red Hat

We deliver hardened solutions that make it easier for enterprises to work across platforms and environments, from the core datacenter to the network edge.

Theme

© 2025 Red Hat