Changes in Fedora 42 For Developers

The Copilot Runtime Verification Framework

Fedora 42 provides the Copilot Language and Runtime Verification System is a stream-based runtime-verification framework for generating hard real-time C code, , developed for NASA. It allows users to write concise programs in a simple but powerful way using a stream-based approach.

Programs can be interpreted for testing, or translated C99 code to be incorporated in a project, or as a standalone application. The C99 backend ensures us that the output is constant in memory and time, making it suitable for systems with hard realtime requirements.

You can get started by installing the ghc-copilot package. For more information, see the following upstream documentation:

Ruby 3.4

The latest stable release of this programming language is now available in Fedora 42. Some notable changes include:

  • The default parser changed from parse.y to Prism to improve maintainability, error tolerance, portability, and performance.

  • YJIT compiler now offers better performance across most benchmarks on both x86-64 and arm64 CPU architectures.

  • The socket library features Happy Eyeballs Version 2 to provide efficient and reliable network connections adapted for modern Internet environments.

  • Block passing is no longer allowed in index.

  • The toplevel name ::Ruby is now reserved.

  • rb_newobj and rb_newobj_of (and corresponding macros RB_NEWOBJ, RB_NEWOBJ_OF, NEWOBJ, NEWOBJ_OF) were removed.

  • Removed the deprecated function rb_gc_force_recycle.

For more details, see the upstream release notes.

PHP 8.4

The latest stable release of this programming language is now available in Fedora 42. Notable changes include:

  • Property hooks to support computed properties that can be natively understood by IDEs and static utilities without the need for docblock comments.

  • The scope to write to a property can now be controlled independently from the scope to read the property.

  • The new #[\Deprecated] attribute.

  • New functions array_find(), array_find_key(), array_any(), and array_all()

  • New subclasses Pdo\Dblib, Pdo\Firebird, Pdo\MySql, Pdo\Odbc, Pdo\Pgsql, and Pdo\Sqlite

For more details, see the upstream release notes.

GNU Toolchain update

The GNU toolchain in Fedora 41 has been updated to:

  • GNU C Compiler (gcc) 15

  • GNU Binary Utilities (binutils) 2.44

  • GNU C Library (glibc) 2.41

  • GNU Debugger (gdb) 15+

Also see the upstream release notes for GCC, Binutils, GLibC NEWS, and GDB NEWS.

LLVM 20

LLVM sub-projects in Fedora have been updated to version 20.

There is a soname version change for the llvm libraries, and an llvm19 compat package added to ensure that packages that currently depend on clang and llvm version 19 libraries will continue to work.

Other notable changes:

  • Install Prefix Changes: The install prefix for all new llvm packages will be /usr/lib64/llvm$VERSION/ instead of /usr/. There will be symlinks for each binary and library added to /usr/ which point to the corresponding binary in /usr/lib64/llvm$VERSION/ The goal of this change is to reduce the differences between the compat and non-compat versions so that it it easier for packages that depend on llvm to switch between the two.

  • Merging more packages into llvm: In Fedora 41, we merged the clang, libomp, compiler-rt, lld, python-lit, and lldb packages into the llvm SRPM. For Fedora 42, we will also be merging llvm-bolt, polly, libcxx, and mlir into the llvm SRPM.

Haskell GHC 9.8 and Stackage LTS 23

For Fedora 42, the main GHC Haskell compiler package have been from version 9.6.6 to the latest stable 9.8.4 release (rebasing the ghc package from the ghc9.8 package). Along with this, Haskell packages in Stackage (the stable Haskell source package distribution) have been updated from the versions in LTS 22 to latest LTS 23 release. Haskell packages not in Stackage have been updated to the latest appropriate version in the upstream Hackage package repository.

For full information about this release, see the upstream release notes and migration guide.

Golang 1.24

The latest stable release of the Go programming language is now available in Fedora 42. Notable changes include:

  • Go modules can now track executable dependencies using tool directives in go.mod.

  • The new -tool flag for go get causes a tool directive to be added to the current module for named packages in addition to adding require directives.

  • The new tool meta-pattern refers to all tools in the current module. This can be used to upgrade them all with go get tool or to install them into your GOBIN directory with go install tool.

  • Executables created by go run and the new behavior of go tool are now cached in the Go build cache. This makes repeated executions faster at the expense of making the cache larger.

  • The go build and go install commands now accept a -json flag that reports build output and failures as structured JSON output on standard output. For details of the reporting format, see go help buildjson.

  • Furthermore, go test -json now reports build output and failures in JSON, interleaved with test result JSON. These are distinguished by new Action types, but if they cause problems in a test integration system, you can revert to the text build output with GODEBUG setting gotestjsonbuildtext=1.

  • The new GOAUTH environment variable provides a flexible way to authenticate private module fetches. See go help goauth for more information.

  • The go build command now sets the main module’s version in the compiled binary based on the version control system tag and/or commit. A +dirty suffix will be appended if there are uncommitted changes. Use the -buildvcs=false flag to omit version control information from the binary.

  • The new GODEBUG setting toolchaintrace=1 can be used to trace the go command’s toolchain selection process.

For more iformation, see the upstream release notes.

Tcl/Tk 9

Tcl (Tool Command Language) and Tk (TCL graphical toolkit) have been rebased to version 9 in Fedora 42. There are some major incompatibilities and it’s unrealistic to port all depending packages, so compat Tcl/Tk 8 packages (tcl8 and tk8) have been provided.

New features include:

  • 64-bit Capacity: Data values larger than 2Gb.

  • Unicode and Encodings: full codepoint range, added encodings, encoding profiles to govern I/O, and more.

  • Access to OS facilities: notifications, print, and tray systems.

  • Scalable Vector Graphics: partial support in images, extensive use to enable scalable widget and theme appearances.

  • Platform Features and Conventions: many improvements, including two-finger gesture support where available.

For more information about this release, see the upstream release notes.

GNOME Shell extension Dependency Generator

Fedora 42 provides a new GNOME Shell extension dependency generator, packaged as gnome-shell-extension-rpm-macros.

GNOME Shell extensions ship with a metadata.json that lists the supported versions of GNOME Shell. This data was previously unused in Fedora when packaging an extension, unless the package maintainer explicitly transfered this information to the spec — and then kept it up to date.

Starting with Fedora 42, the binary RPM automatically declares its dependency on the correct versions of GNOME Shell, ensuring that we will discover after mass rebuild if some extensions need to be updated because they will FTI. This results in an improved user experience for Fedora users, because extensions that install are now more likely to work.

Intel Compute Runtime upgrade and hardware cut-off

The intel-compute-runtime and intel-igc packages have been rebased to the latest upstream releases, providing support for new Intel hardware. However, note that these newer versions drop compute support for older Intel GPUs released prior to 2020 (gen 12 and earlier) - see this file for a list of dropped architectures.

This change does not affect the intel-media-driver included in the default package set, which continues to have support for old generations of hardware in the main development branches for now.

Third Party Legacy JDKs

In Fedora 42, java and java-devel package provides and requires have been adjusted to obsolote all non-system LTS JDKs. In effect, this means:

  • java-1.8.0-openjdk, java-11-openjdk and java-17-openjdk are now deprecated in Fedora 39, 40, and 41. They will print a warning message upon use.

  • java-1.8.0-openjdk, java-11-openjdk and java-17-openjdk are retired in Fedora 42.

Those who need these packages should use the adoptium-temurin-java-repository package, which enables the Adoptium Temurin repository, which in turn allows you to install the following packages:

  • temurin-8-jdk

  • temurin-8-jre

  • temurin-11-jdk

  • temurin-11-jre

  • temurin-17-jdk

  • temurin-17-jre

  • temurin-21-jdk

  • temurin-21-jre

The adoptium-temurin-java-repository package is available from Fedora 39 onwards.

For more detailed information, see the Change page on the Fedora Wiki. A list of known issues is available on GitHub.

Setuptools 74

Fedora 42 updates the pyhon3-setuptools package to version 74.

Note that this release is not 100% compatible with previous releases. Notably, version 72.0.0 removed support for the setup.py test command (deprecated for 5 years). This is a breaking change and Fedora packages that use the setup.py test command during the build need to be adapted to use a different test runner, such as unittest, pytest, etc.

See upstream documentation for information about this release.

NumPy updated to version 2

The NumPy package has been updated from version 1.26 to 2.2.4. The update provides a large amount of improvements to the library.

See the upstream documentation for a list of changes as well as a migration guide and advice for downstream package authors. A blogpost by the NumPy developers is also available which discusses some of the more high-level changes in the 2.x release.

Django 5.1

The Django stack has been updated to version 5.1 in Fedora 42.

Similar to the packaging approach for the Python interpreter itself, Fedora is moving to a single source RPM for each Django major version. The major version initially shipped with a given Fedora release will have unsuffixed binary packages (e.g. python3-django), while any newer or older versions will have suffixed binary packages (e.g. python3-django5). Suffixed packages (source and binary) will only list the major version (so python-django5 instead of python-django5.1).

For information about the 5.1 release, see the upstream release notes.

Python 3.8 retirement

The python3.8 package will be retired without replacement from Fedora Linux 42. Python 3.8 reached upstream End of Life 2024-10-07. RHEL 8 Python 3.8 Stream has been retired since May 2023. Debian Buster had Python 3.7, Bullseye has 3.9. Ubuntu 20.04 LTS (Focal Fossa) has Python 3.8, but standard support ends in April 2025, which is when Fedora 42 releases as well. Python 3.8 was only kept in Fedora to make it possible for Fedora users to test their software against it, but with other distributions retiring it as well, this use case is no longer relevant.

Note that python3.6 will remain available for the foreseeable future to support developers who target RHEL 8.

Retirement of Py03 v0.19, v0.20 and v0.21

The packages for obsolete versions of PyO3 (v0.21, v0.20, and v0.19), the Rust bindings for CPython and PyPy, were removed from Fedora. All Python packages that contain native Python extensions written in Rust are now built with PyO3 v0.22 or later, bringing official support for Python 3.13 and / or support for running on a "free-threaded" Python interpreter.

python-pytest-runner is now deprecated

The python-pytest-runner (python3-pytest-runner) package is deprecated in Fedora 42 due to being deprecated upstream since 2019 and the upstream repository being archived since 2023. Dependent packages are encouraged to switch to using pytest directly.

To migrate, follow these steps:

  • Remove pytest-runner from your setup_requires, preferably removing the setup_requires option.

  • Remove pytest and any other testing requirements from tests_require, preferably removing the setup_requires option.

  • See Fedora Packaging Guidelines for how to specify test dependencies.

  • Invoke tests with pytest.

  • Another good option is to configure a tox.ini next to your setup.cfg. https://tox.readthedocs.io/en/latest/

Zbus v1 retirement

The packages for v1 of the zbus crate (and the packages for v2 of the zvariant crate) have been retired from Fedora 42. Dependent packages are to be ported to a non-obsolete version of these libraries (i.e. zbus v4 or v5) or to be retired as well.

Rust library packages are not intended to be installed on end-user systems, and are almost exclusively installed in ephemeral build environments (i.e. mock chroots), so this change should not have any impact on end users.

gtk3-rs is now deprecated

The Rust bindings for GTK3 are obsolete and officially unmaintained. The packages for them have been marked as deprecated to prevent new packages that depend on them from being added to Fedora, and they will be removed from a future release.