F44 Change Proposal: DropQEMU32bitHostBuilds [SystemWide]

DropQEMU32bitHostBuilds

Wiki

Announced

This is a proposed Change for Fedora Linux.
This document represents a proposed Change. As part of the Changes process, proposals are publicly announced in order to receive community feedback. This proposal will only be implemented if approved by the Fedora Engineering Steering Committee.

Summary :open_book:

The QEMU upstream project deprecated support for 32-bit host builds and will start removing this in a near-term forthcoming release. It is not practical for Fedora to re-enable 32-bit support over the long term, as QEMU’s intent with dropping 32-bit support code is to enable code to be changed to assume 64-bit atomic ops in all builds.
Fedora will thus stop building the QEMU package on the i686 architecture.

Owner :open_book:

Detailed Description :open_book:

The QEMU upstream project deprecated support for 32-bit host builds for system emulator binaries in its 8.0.0 release (April 2023), and subsequently deprecated all support for 32-bit host builds in its 10.0.0 release (April 2025).
The QEMU deprecation policy (Deprecated features — QEMU documentation) requires the deprecation notice to be present for a minimum of 2 release before the feature is removed. It is thus possible that some aspects of 32-bit host support will be removed in 10.2.0 (Dec 2025) with full removal likely in 11.0.0 (April 2026).
It will not be practical for Fedora to re-enable support for 32-bit builds with downstream patches, as QEMU intends to change its code to assume the support of 64-bit atomic ops.
Fedora thus has to discontinue builds of QEMU on the i686 architecture, and any packages which rely on QEMU provided binaries need to ensure they exclude the i686 architecture.
Aside from upstream support, Fedora maintainers continue to expend (waste) effort debugging koji build problems on i686 for binaries that will never be present on any end user installation of Fedora, since QEMU has no multilib components. The only place where the i686 binaries may get used is in koji build roots for i686 builds via build dependencies.
=== Removed RPMs on i686 ===

  • qemu
  • qemu-audio-alsa
  • qemu-audio-dbus
  • qemu-audio-jack
  • qemu-audio-oss
  • qemu-audio-pa
  • qemu-audio-pipewire
  • qemu-audio-sdl
  • qemu-audio-spice
  • qemu-block-blkio
  • qemu-block-curl
  • qemu-block-dmg
  • qemu-block-gluster
  • qemu-block-iscsi
  • qemu-block-nfs
  • qemu-block-rbd
  • qemu-block-ssh
  • qemu-char-baum
  • qemu-char-spice
  • qemu-common
  • qemu-device-display-qxl
  • qemu-device-display-vhost-user-gpu
  • qemu-device-display-virtio-gpu
  • qemu-device-display-virtio-gpu-ccw
  • qemu-device-display-virtio-gpu-gl
  • qemu-device-display-virtio-gpu-pci
  • qemu-device-display-virtio-gpu-pci-gl
  • qemu-device-display-virtio-gpu-pci-rutabaga
  • qemu-device-display-virtio-gpu-rutabaga
  • qemu-device-display-virtio-vga
  • qemu-device-display-virtio-vga-gl
  • qemu-device-display-virtio-vga-rutabaga
  • qemu-device-uefi-vars
  • qemu-device-usb-host
  • qemu-device-usb-redirect
  • qemu-device-usb-smartcard
  • qemu-docs
  • qemu-guest-agent
  • qemu-img
  • qemu-kvm
  • qemu-kvm-core
  • qemu-pr-helper
  • qemu-rdp
  • qemu-sanity-check
  • qemu-sanity-check-nodeps
  • qemu-system-aarch64
  • qemu-system-aarch64-core
  • qemu-system-alpha
  • qemu-system-alpha-core
  • qemu-system-arm
  • qemu-system-arm-core
  • qemu-system-avr
  • qemu-system-avr-core
  • qemu-system-hppa
  • qemu-system-hppa-core
  • qemu-system-loongarch64
  • qemu-system-loongarch64-core
  • qemu-system-m68k
  • qemu-system-m68k-core
  • qemu-system-microblaze
  • qemu-system-microblaze-core
  • qemu-system-mips
  • qemu-system-mips-core
  • qemu-system-or1k
  • qemu-system-or1k-core
  • qemu-system-ppc
  • qemu-system-ppc-core
  • qemu-system-riscv
  • qemu-system-riscv-core
  • qemu-system-rx
  • qemu-system-rx-core
  • qemu-system-s390x
  • qemu-system-s390x-core
  • qemu-system-sh4
  • qemu-system-sh4-core
  • qemu-system-sparc
  • qemu-system-sparc-core
  • qemu-system-tricore
  • qemu-system-tricore-core
  • qemu-system-x86
  • qemu-system-x86-core
  • qemu-system-xtensa
  • qemu-system-xtensa-core
  • qemu-tests
  • qemu-tools
  • qemu-ui-curses
  • qemu-ui-dbus
  • qemu-ui-egl-headless
  • qemu-ui-gtk
  • qemu-ui-opengl
  • qemu-ui-sdl
  • qemu-ui-spice-app
  • qemu-ui-spice-core
  • qemu-user
  • qemu-user-binfmt
  • qemu-user-static
  • qemu-user-static-aarch64
  • qemu-user-static-alpha
  • qemu-user-static-arm
  • qemu-user-static-hexagon
  • qemu-user-static-hppa
  • qemu-user-static-loongarch64
  • qemu-user-static-m68k
  • qemu-user-static-microblaze
  • qemu-user-static-mips
  • qemu-user-static-or1k
  • qemu-user-static-ppc
  • qemu-user-static-riscv
  • qemu-user-static-s390x
  • qemu-user-static-sh4
  • qemu-user-static-sparc
  • qemu-user-static-x86
  • qemu-user-static-xtensa
  • libvirt-daemon-qemu
  • libvirt-daemon-driver-qemu
    === Removed binaries on i686 ===
  • /usr/bin/qemu-aarch64
  • /usr/bin/qemu-aarch64_be
  • /usr/bin/qemu-aarch64_be-static
  • /usr/bin/qemu-aarch64-static
  • /usr/bin/qemu-alpha
  • /usr/bin/qemu-alpha-static
  • /usr/bin/qemu-arm
  • /usr/bin/qemu-armeb
  • /usr/bin/qemu-armeb-static
  • /usr/bin/qemu-arm-static
  • /usr/bin/qemu-edid
  • /usr/bin/qemu-ga
  • /usr/bin/qemu-hexagon
  • /usr/bin/qemu-hexagon-static
  • /usr/bin/qemu-hppa
  • /usr/bin/qemu-hppa-static
  • /usr/bin/qemu-i386
  • /usr/bin/qemu-i386-static
  • /usr/bin/qemu-img
  • /usr/bin/qemu-io
  • /usr/bin/qemu-keymap
  • /usr/bin/qemu-kvm
  • /usr/bin/qemu-loongarch64
  • /usr/bin/qemu-loongarch64-static
  • /usr/bin/qemu-m68k
  • /usr/bin/qemu-m68k-static
  • /usr/bin/qemu-microblaze
  • /usr/bin/qemu-microblazeel
  • /usr/bin/qemu-microblazeel-static
  • /usr/bin/qemu-microblaze-static
  • /usr/bin/qemu-mips
  • /usr/bin/qemu-mips64
  • /usr/bin/qemu-mips64el
  • /usr/bin/qemu-mips64el-static
  • /usr/bin/qemu-mips64-static
  • /usr/bin/qemu-mipsel
  • /usr/bin/qemu-mipsel-static
  • /usr/bin/qemu-mipsn32
  • /usr/bin/qemu-mipsn32el
  • /usr/bin/qemu-mipsn32el-static
  • /usr/bin/qemu-mipsn32-static
  • /usr/bin/qemu-mips-static
  • /usr/bin/qemu-nbd
  • /usr/bin/qemu-or1k
  • /usr/bin/qemu-or1k-static
  • /usr/bin/qemu-ppc
  • /usr/bin/qemu-ppc64
  • /usr/bin/qemu-ppc64le
  • /usr/bin/qemu-ppc64le-static
  • /usr/bin/qemu-ppc64-static
  • /usr/bin/qemu-ppc-static
  • /usr/bin/qemu-pr-helper
  • /usr/bin/qemu-rdp
  • /usr/bin/qemu-riscv32
  • /usr/bin/qemu-riscv32-static
  • /usr/bin/qemu-riscv64
  • /usr/bin/qemu-riscv64-static
  • /usr/bin/qemu-s390x
  • /usr/bin/qemu-s390x-static
  • /usr/bin/qemu-sanity-check
  • /usr/bin/qemu-sh4
  • /usr/bin/qemu-sh4eb
  • /usr/bin/qemu-sh4eb-static
  • /usr/bin/qemu-sh4-static
  • /usr/bin/qemu-sparc
  • /usr/bin/qemu-sparc32plus
  • /usr/bin/qemu-sparc32plus-static
  • /usr/bin/qemu-sparc64
  • /usr/bin/qemu-sparc64-static
  • /usr/bin/qemu-sparc-static
  • /usr/bin/qemu-storage-daemon
  • /usr/bin/qemu-system-aarch64
  • /usr/bin/qemu-system-alpha
  • /usr/bin/qemu-system-arm
  • /usr/bin/qemu-system-avr
  • /usr/bin/qemu-system-hppa
  • /usr/bin/qemu-system-i386
  • /usr/bin/qemu-system-loongarch64
  • /usr/bin/qemu-system-m68k
  • /usr/bin/qemu-system-microblaze
  • /usr/bin/qemu-system-microblazeel
  • /usr/bin/qemu-system-mips
  • /usr/bin/qemu-system-mips64
  • /usr/bin/qemu-system-mips64el
  • /usr/bin/qemu-system-mipsel
  • /usr/bin/qemu-system-or1k
  • /usr/bin/qemu-system-ppc
  • /usr/bin/qemu-system-ppc64
  • /usr/bin/qemu-system-riscv32
  • /usr/bin/qemu-system-riscv64
  • /usr/bin/qemu-system-rx
  • /usr/bin/qemu-system-s390x
  • /usr/bin/qemu-system-sh4
  • /usr/bin/qemu-system-sh4eb
  • /usr/bin/qemu-system-sparc
  • /usr/bin/qemu-system-sparc64
  • /usr/bin/qemu-system-tricore
  • /usr/bin/qemu-system-x86_64
  • /usr/bin/qemu-system-x86_64.rpm
  • /usr/bin/qemu-system-xtensa
  • /usr/bin/qemu-system-xtensaeb
  • /usr/bin/qemu-trace-stap
  • /usr/bin/qemu-vmsr-helper
  • /usr/bin/qemu-x86_64
  • /usr/bin/qemu-x86_64-static
  • /usr/bin/qemu-xtensa
  • /usr/bin/qemu-xtensaeb
  • /usr/bin/qemu-xtensaeb-static
  • /usr/bin/qemu-xtensa-static

Feedback :open_book:

TBD

Benefit to Fedora :open_book:

Fedora QEMU maintainers no longer have to waste effort debugging periodic failures on i686 builds, which are never installed by Fedora users.
Fedora QEMU maintainers will not have to hold QEMU back on an outdated upstream release to retain i686 support. Such an outdated release will accumulate CVEs and miss out on new features.

Scope :open_book:

=== Proposal owners ===

  • Submit PRs to any Fedora RPMs that pull in QEMU packages in i686 build roots to “ExcludeArch: i686”
  • Add ‘ExcludeArch: i686’ to QEMU
    === Other developers ===
  • Merge any PRs submitted to their packages which depend on QEMU in i686 build roots. (Most are already merged)
    === Release engineering ===
    N/A
    === Policies and guidelines ===
    N/A
    === Trademark approval===
    N/A
    === Alignment with the Fedora Strategy ===
    N/A

Upgrade/compatibility impact :open_book:

Fedora already dropped i686 as an installable architecture many releases ago. i686 packages are only consumed in multilib context, and QEMU does not have any binaries that are relevant to multilib. Thus there should be no impact on end user deployments of Fedora from dropping of i686 builds for QEMU.
Downstream maintainers who consume Fedora content (eg Copr, RPM Fusion) who rely on i686 QEMU builds as dependencies in a build root will have to add ExcludeArch: i686 to any affected RPM spec files.

Early Testing (Optional) :open_book:

leafdrop is used to identify all packages which need adapting before QEMU is made to ExcludeArch. Final validation will be a lack of any new FTBFS after QEMU excludes i686.

How To Test :open_book:

  • Observe that there are no i686 packages of QEMU in the koji builds in rawhide after the exclusion of i686.
  • Observe that there are no newly discovered FTBFS issue reported after the exclusion of QEMU on i686.

User Experience :open_book:

i686 is not a deployment architecture for Fedora any more so no deployment experience changes.
Developers relying on QEMU in i686 build roots will have to add ExcludeArch.

Dependencies :open_book:

Most dependencies which pull QEMU into i686 build roots have already had an ‘ExcludeArch: i686’ added. Currently identified remaining deps on QEMU (direct & indirect) are:

Contingency Plan :open_book:

Documentation :open_book:

This change proposal is sufficient documentation for the removal of i686 builds.

Release Notes :open_book:

\ni686 builds of QEMU are no longer available.

Last edited by @alking 2025-11-13T14:31:38Z

Last edited by @alking 2025-11-13T14:31:38Z

1 Like

How do you feel about the proposal as written?

  • Strongly in favor
  • In favor, with reservations
  • Neutral
  • Opposed, but could be convinced
  • Strongly opposed
0 voters

If you are in favor but have reservations, or are opposed but something could change your mind, please explain in a reply.

We want everyone to be heard, but many posts repeating the same thing actually makes that harder. If you have something new to say, please say it. If, instead, you find someone has already covered what you’d like to express, please simply give that post a :heart: instead of reiterating. You can even do this by email, by replying with the heart emoji or just “+1”. This will make long topics easier to follow.

Please note that this is an advisory “straw poll” meant to gauge sentiment. It isn’t a vote or a scientific survey. See About the Change Proposals category for more about the Change Process and moderation policy.