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
::Rubyis now reserved. -
rb_newobjandrb_newobj_of(and corresponding macrosRB_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(), andarray_all() -
New subclasses
Pdo\Dblib,Pdo\Firebird,Pdo\MySql,Pdo\Odbc,Pdo\Pgsql, andPdo\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 theclang,libomp,compiler-rt,lld,python-lit, andlldbpackages into thellvmSRPM. For Fedora 42, we will also be mergingllvm-bolt,polly,libcxx, andmlirinto thellvmSRPM.
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
tooldirectives ingo.mod. -
The new
-toolflag 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
toolmeta-pattern refers to all tools in the current module. This can be used to upgrade them all withgo get toolor to install them into your GOBIN directory withgo install tool. -
Executables created by
go runand the new behavior ofgo toolare now cached in the Go build cache. This makes repeated executions faster at the expense of making the cache larger. -
The
go buildandgo installcommands now accept a-jsonflag that reports build output and failures as structured JSON output on standard output. For details of the reporting format, seego help buildjson. -
Furthermore,
go test -jsonnow reports build output and failures in JSON, interleaved with test result JSON. These are distinguished by newActiontypes, but if they cause problems in a test integration system, you can revert to the text build output with GODEBUG settinggotestjsonbuildtext=1. -
The new
GOAUTHenvironment variable provides a flexible way to authenticate private module fetches. Seego help goauthfor more information. -
The
go buildcommand now sets the main module’s version in the compiled binary based on the version control system tag and/or commit. A+dirtysuffix will be appended if there are uncommitted changes. Use the-buildvcs=falseflag to omit version control information from the binary. -
The new GODEBUG setting
toolchaintrace=1can 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-openjdkandjava-17-openjdkare now deprecated in Fedora 39, 40, and 41. They will print a warning message upon use. -
java-1.8.0-openjdk,java-11-openjdkandjava-17-openjdkare 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 python3-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-runnerfrom yoursetup_requires, preferably removing thesetup_requiresoption. -
Remove
pytestand any other testing requirements fromtests_require, preferably removing thesetup_requiresoption. -
See Fedora Packaging Guidelines for how to specify test dependencies.
-
Invoke tests with
pytest. -
Another good option is to configure a
tox.ininext to yoursetup.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.
Want to help? Learn how to contribute to Fedora Docs ›