Has the minimum CPU requirement for Qt 6.10 Linux x86_64 binaries changed to x86-64-v2?
-
Qt 6.10 and the loss of compatibility with older x86-64 CPUs
I would like to raise a compatibility and documentation concern regarding the CPU requirements of the prebuilt Qt binaries.
I recently encountered this when running a Python application using PySide6 on an older x86-64 system. The CPU supports SSE4.1, but not SSE4.2 or POPCNT.
With PySide6 6.9.3 (Qt 6.9.3), the application runs normally. With PySide6 6.10.0 (Qt 6.10.0), importing QtCore immediately terminates with:
Incompatible processor. This Qt build requires the following features: sse4.2 popcnt AbortedI compared the actual Qt libraries from the two PySide6 distributions. The Qt 6.9.3
libQt6Core.so.6contains no POPCNT instructions, whereas the Qt 6.10.0 library contains actual POPCNT instructions.This therefore appears to be an intentional change in the CPU baseline of the Qt 6.10 binaries rather than an application or Python problem.
I understand the motivation for this change. The Qt development discussion from 2022 proposed raising the default x86-64 target to x86-64-v2 in order to enable additional optimizations in QtCore and QtGui. x86-64-v2 includes SSE4.2 and POPCNT. This is a reasonable engineering decision if the performance benefits justify it.
However, there is an important compatibility consequence.
An application which updates from Qt 6.9 to Qt 6.10 can become completely unusable on an otherwise functional x86-64 system. This is particularly relevant for long-lived Linux installations and older computers, where x86-64 itself is still supported by the operating system.
This is not merely a case of an optional optimization being unavailable. The application does not start at all.
I have also encountered reports of the same problem in other Qt applications, including Linphone. This suggests that the impact is not limited to PySide6 applications.
My main concern is therefore not that Qt has chosen to raise the CPU baseline. Rather, it is that this change does not appear to be clearly communicated in the supported-platform documentation.
The Qt documentation continues to describe Linux x86-64 as a supported architecture, but does not prominently state that the prebuilt Qt binaries require an x86-64-v2-capable processor. For users maintaining older hardware, this distinction is significant.
I would therefore suggest:
- Clearly documenting the minimum CPU instruction set required by the prebuilt Qt binaries for each Qt release.
- Clearly identifying the Qt release in which the x86-64 CPU baseline was raised.
- Considering whether an x86-64-v1 build could remain available for users who need compatibility with older processors.
I am not arguing that Qt should never raise its CPU requirements. I am asking that the compatibility impact of such a change be made explicit, because otherwise users may reasonably interpret "x86_64" as meaning the traditional x86-64 baseline.
For reference, the practical boundary I observed is:
Qt 6.9.3 — works on an SSE4.1 / non-POPCNT CPU Qt 6.10.0 — requires SSE4.2 + POPCNTThis makes the change particularly easy to reproduce and verify.
-
Qt 6.10 and the loss of compatibility with older x86-64 CPUs
I would like to raise a compatibility and documentation concern regarding the CPU requirements of the prebuilt Qt binaries.
I recently encountered this when running a Python application using PySide6 on an older x86-64 system. The CPU supports SSE4.1, but not SSE4.2 or POPCNT.
With PySide6 6.9.3 (Qt 6.9.3), the application runs normally. With PySide6 6.10.0 (Qt 6.10.0), importing QtCore immediately terminates with:
Incompatible processor. This Qt build requires the following features: sse4.2 popcnt AbortedI compared the actual Qt libraries from the two PySide6 distributions. The Qt 6.9.3
libQt6Core.so.6contains no POPCNT instructions, whereas the Qt 6.10.0 library contains actual POPCNT instructions.This therefore appears to be an intentional change in the CPU baseline of the Qt 6.10 binaries rather than an application or Python problem.
I understand the motivation for this change. The Qt development discussion from 2022 proposed raising the default x86-64 target to x86-64-v2 in order to enable additional optimizations in QtCore and QtGui. x86-64-v2 includes SSE4.2 and POPCNT. This is a reasonable engineering decision if the performance benefits justify it.
However, there is an important compatibility consequence.
An application which updates from Qt 6.9 to Qt 6.10 can become completely unusable on an otherwise functional x86-64 system. This is particularly relevant for long-lived Linux installations and older computers, where x86-64 itself is still supported by the operating system.
This is not merely a case of an optional optimization being unavailable. The application does not start at all.
I have also encountered reports of the same problem in other Qt applications, including Linphone. This suggests that the impact is not limited to PySide6 applications.
My main concern is therefore not that Qt has chosen to raise the CPU baseline. Rather, it is that this change does not appear to be clearly communicated in the supported-platform documentation.
The Qt documentation continues to describe Linux x86-64 as a supported architecture, but does not prominently state that the prebuilt Qt binaries require an x86-64-v2-capable processor. For users maintaining older hardware, this distinction is significant.
I would therefore suggest:
- Clearly documenting the minimum CPU instruction set required by the prebuilt Qt binaries for each Qt release.
- Clearly identifying the Qt release in which the x86-64 CPU baseline was raised.
- Considering whether an x86-64-v1 build could remain available for users who need compatibility with older processors.
I am not arguing that Qt should never raise its CPU requirements. I am asking that the compatibility impact of such a change be made explicit, because otherwise users may reasonably interpret "x86_64" as meaning the traditional x86-64 baseline.
For reference, the practical boundary I observed is:
Qt 6.9.3 — works on an SSE4.1 / non-POPCNT CPU Qt 6.10.0 — requires SSE4.2 + POPCNTThis makes the change particularly easy to reproduce and verify.
-
From where did you install PyQt and the corresponding Qt libraries?
-
@Rocus
It's https://qt-project.atlassian.net/jira/projects nowadays. That is for bugs etc. I don't know whether your suggestions belong there. They may be more appropriate in https://lists.qt-project.org/listinfo/development.For your current issue please answer @Christian-Ehrlicher above, he may be able to help.
@Christian-Ehrlicher said in Has the minimum CPU requirement for Qt 6.10 Linux x86_64 binaries changed to x86-64-v2?:
From where did you install PyQt and the corresponding Qt libraries?
To avoid confusion, I think he meant PySide rather than PyQt.
-
From where did you install PyQt and the corresponding Qt libraries?
I tried to install a program Streamtuner-ng (can be found on github.com/IronWolve). I installed it according his instructions and requirements. It crashed on an illegal instruction. This program is written in python and uses PySide6. He required that PYSide6>=6.6. It installed 6.11 (I think) and apparently also installed qt libraries in a venv. In the end the program worked with PySide 6.9.3 (and thus Qt 6.9.3). Debian 13 uses apparently Qt 6.8.2.
This all worries me because a next version of Debian (or an update) may not work at all on my old PC's. I completely accept that certain things go slow or do not run well on my PC's but I would like to be able to run a normal OS (like Debian).
-
If you mean in the Redhat binaries. RedHat removed support for x86_64v1, and has even deprecated x86_64v2, and will from RHEL10 only support x86_64v3. Qt merely detects the minimum requirements set when it was compiled and checks them at runtime instead of risking a later crash.
-
But Debian should still work with v1, they have not raised the minimum like RedHat did.
-
Qt 6.10 and the loss of compatibility with older x86-64 CPUs
I would like to raise a compatibility and documentation concern regarding the CPU requirements of the prebuilt Qt binaries.
I recently encountered this when running a Python application using PySide6 on an older x86-64 system. The CPU supports SSE4.1, but not SSE4.2 or POPCNT.
With PySide6 6.9.3 (Qt 6.9.3), the application runs normally. With PySide6 6.10.0 (Qt 6.10.0), importing QtCore immediately terminates with:
Incompatible processor. This Qt build requires the following features: sse4.2 popcnt AbortedI compared the actual Qt libraries from the two PySide6 distributions. The Qt 6.9.3
libQt6Core.so.6contains no POPCNT instructions, whereas the Qt 6.10.0 library contains actual POPCNT instructions.This therefore appears to be an intentional change in the CPU baseline of the Qt 6.10 binaries rather than an application or Python problem.
I understand the motivation for this change. The Qt development discussion from 2022 proposed raising the default x86-64 target to x86-64-v2 in order to enable additional optimizations in QtCore and QtGui. x86-64-v2 includes SSE4.2 and POPCNT. This is a reasonable engineering decision if the performance benefits justify it.
However, there is an important compatibility consequence.
An application which updates from Qt 6.9 to Qt 6.10 can become completely unusable on an otherwise functional x86-64 system. This is particularly relevant for long-lived Linux installations and older computers, where x86-64 itself is still supported by the operating system.
This is not merely a case of an optional optimization being unavailable. The application does not start at all.
I have also encountered reports of the same problem in other Qt applications, including Linphone. This suggests that the impact is not limited to PySide6 applications.
My main concern is therefore not that Qt has chosen to raise the CPU baseline. Rather, it is that this change does not appear to be clearly communicated in the supported-platform documentation.
The Qt documentation continues to describe Linux x86-64 as a supported architecture, but does not prominently state that the prebuilt Qt binaries require an x86-64-v2-capable processor. For users maintaining older hardware, this distinction is significant.
I would therefore suggest:
- Clearly documenting the minimum CPU instruction set required by the prebuilt Qt binaries for each Qt release.
- Clearly identifying the Qt release in which the x86-64 CPU baseline was raised.
- Considering whether an x86-64-v1 build could remain available for users who need compatibility with older processors.
I am not arguing that Qt should never raise its CPU requirements. I am asking that the compatibility impact of such a change be made explicit, because otherwise users may reasonably interpret "x86_64" as meaning the traditional x86-64 baseline.
For reference, the practical boundary I observed is:
Qt 6.9.3 — works on an SSE4.1 / non-POPCNT CPU Qt 6.10.0 — requires SSE4.2 + POPCNTThis makes the change particularly easy to reproduce and verify.
@Rocus said in Has the minimum CPU requirement for Qt 6.10 Linux x86_64 binaries changed to x86-64-v2?:
This therefore appears to be an intentional change in the CPU baseline of the Qt 6.10 binaries
As @Allan-Jensen mentionded, Qt itself doesn't have a hard requirement for x86-64-v2. Rather, the build environment (and build-time config options) determine the minimum requirements of the binaries.
So, as a "first line" workaround, building Qt from source in a x86-64-v1 environment should allow you to support older machines.
So why did the more recent pre-built Qt binaries gain a hard dependency on x86-64-v2? The summary is:
- The release infrastructure used RHEL 8.10 to build Qt 6.9 binaries: https://wiki.qt.io/Qt_6.9_Tools_and_Versions#Software_configurations_for_Qt_6.9.3
- The release infrastructure used RHEL 9.6 to build Qt 6.11 binaries: https://wiki.qt.io/Qt_6.11_Tools_and_Versions#Software_configurations_for_Qt_6.11.2
- RHEL 9 raised the CPU baseline to x86-64-v2: https://www.phoronix.com/news/RHEL-9-x86-64-v2-Plans
(Notes: In the Wiki links above, the keyword
Packagingtells us which distro is used to build the binaries)So that explains why the recent binaries provided by the Qt Online Installer (and PyPI) no longer work on older machines.
Perhaps the Qt release infrastructure can be configured to explicitly support x86-64-v1? I suggest starting a discussion at the Development mailing list (you must subscribe first to post there): https://lists.qt-project.org/listinfo/development
-
@Rocus said in Has the minimum CPU requirement for Qt 6.10 Linux x86_64 binaries changed to x86-64-v2?:
This therefore appears to be an intentional change in the CPU baseline of the Qt 6.10 binaries
As @Allan-Jensen mentionded, Qt itself doesn't have a hard requirement for x86-64-v2. Rather, the build environment (and build-time config options) determine the minimum requirements of the binaries.
So, as a "first line" workaround, building Qt from source in a x86-64-v1 environment should allow you to support older machines.
So why did the more recent pre-built Qt binaries gain a hard dependency on x86-64-v2? The summary is:
- The release infrastructure used RHEL 8.10 to build Qt 6.9 binaries: https://wiki.qt.io/Qt_6.9_Tools_and_Versions#Software_configurations_for_Qt_6.9.3
- The release infrastructure used RHEL 9.6 to build Qt 6.11 binaries: https://wiki.qt.io/Qt_6.11_Tools_and_Versions#Software_configurations_for_Qt_6.11.2
- RHEL 9 raised the CPU baseline to x86-64-v2: https://www.phoronix.com/news/RHEL-9-x86-64-v2-Plans
(Notes: In the Wiki links above, the keyword
Packagingtells us which distro is used to build the binaries)So that explains why the recent binaries provided by the Qt Online Installer (and PyPI) no longer work on older machines.
Perhaps the Qt release infrastructure can be configured to explicitly support x86-64-v1? I suggest starting a discussion at the Development mailing list (you must subscribe first to post there): https://lists.qt-project.org/listinfo/development
@JKSH Note. RedHat sets the march flags automatically to include x86_64v2, and the standard library and everything else is build with it too. So if anything works at all on an older machine without full x86_64v2, it is completely be accident and could break at any time. Qt can not support architectures the OS itself no longer supports.
-
@JKSH Note. RedHat sets the march flags automatically to include x86_64v2, and the standard library and everything else is build with it too. So if anything works at all on an older machine without full x86_64v2, it is completely be accident and could break at any time. Qt can not support architectures the OS itself no longer supports.
@Allan-Jensen said in Has the minimum CPU requirement for Qt 6.10 Linux x86_64 binaries changed to x86-64-v2?:
Qt can not support architectures the OS itself no longer supports.
But RHEL 8.10 is still supported in the upcoming Qt 6.12 LTS? https://doc-snapshots.qt.io/qt6-6.12/supported-platforms.html#linux
-
@Allan-Jensen said in Has the minimum CPU requirement for Qt 6.10 Linux x86_64 binaries changed to x86-64-v2?:
Qt can not support architectures the OS itself no longer supports.
But RHEL 8.10 is still supported in the upcoming Qt 6.12 LTS? https://doc-snapshots.qt.io/qt6-6.12/supported-platforms.html#linux
@JKSH Not sure, but I do not think we provide prebuilt binaries for that, so there you can work around it by building yourself.