On Thu, 13 Aug 2026 at 13:00:41 +0200, John Paul Adrian Glaubitz wrote:
On Thu, 2026-08-13 at 12:53 +0200, Bastien Roucaries wrote:
In order to ease the user/devel experience I want for isa-support to create
test for forky baseline
For now I test for armhf:
armv8-support
CPU feature checking - require ARMv8
neon-support
Not sure I understand this. You want to raise armhf to ARMv8? Why would
anyone then install a 32-bit port when they could just use the 64-bit
port in the first place?
I think perhaps what Bastien is trying to do is to identify useful
functionality levels that are *above* the baseline, so that isa-support
can be used to gate their availability; while avoiding checks for
functionality levels that are *below* the baseline, because by
definition Debian is not expected to run on CPUs that lack that
functionality anyway?
The purpose of isa-support is that when our official architecture
baseline is relatively low (like i586 on bookworm i386), but a specific
package needs a higher functionality level (like various i386 packages
that needed SSE2 anyway), those specific packages can depend on
something like
sse2-support [i386]
and the result will be that the package fails to install on baseline
CPUs, and only installs successfully on those CPUs where it can actually
work.
Since trixie, we officially require more i386 features than we did in
bookworm[1] so the common case of needing SSE2 is no longer interesting:
all of our x86 CPUs are meant to have SSE2 anyway. But I expect that
we'll see analogous situations appear for higher CPU functionality
levels: there's already some x86 binary software that requires higher
than x86-64-v1. For example, Steam requires SSE3 and CMPXCHG8, which are
x86-64-v2 features.
[1]
https://www.debian.org/releases/trixie/release-notes/issues.en.html#reduced-support-for-i386
The use case for armv8-support on armhf would be a piece of software
that has to be compiled as 32-bit for ABI compatibility reasons, but
requires ARMv8 CPU functionality, and therefore has:
Depends armv8-support [armhf]
Bastien, are you aware of any specific pieces of software on armhf that
have this requirement, or are you adding a check and a package
speculatively in case a package needs it in future? On x86, there's a
lot of legacy binary-only software that requires 32-bit libraries to
continue to exist on x86_64 (mostly games), but I wasn't aware that
armhf had a similar legacy binary requirement (and if it does, we'll
have broken a lot of it anyway, by doing the 64-bit time_t transition).
For amd64/i386 (i will like to only use psABI defintion so
sse3-support
vérification de caractéristique de CPU – besoin de SSE3
sse4.1-support
CPU feature checking - require SSE4.1
sse4.2-support
SSE4.2
x86-64-v2-support
CPU feature checking - require x86-64-v2
x86-64-v3-support
CPU feature checking - require x86-64-v3
Isn't that something that should be done using hwcaps support?
You can use hwcaps or a similar mechanism for libraries, for example if
your use-case is that you have a less-optimized version of OpenSSL
compiled for the x86_64 baseline, and a more-optimized version compiled
with x86-64-v2 requirements that can be used to speed up systems with a
better CPU. As long as the ABI is the same, the better/faster library
can be a drop-in substitute for the less-optimized one.
But, using hwcaps isn't necessarily feasible if a whole program or
component makes higher-than-baseline assumptions. For example Steam is
known to require SSE3 and CMPXCHG16B, which are higher than the
x86_64-v1 baseline (they're a subset of x86-64-v2); and I could easily
imagine Chromium or Firefox deciding that its x86_64 JIT implementation
is going to assume non-baseline CPU features to improve performance or
code complexity.
(Steam as packaged in Debian as steam-installer doesn't currently use
isa-support, but the upstream code has a check for the required CPU
features and an error message popup if they are missing. A dependency on
sse3-support would probably make sense, I'll add that at some point.)
Sometimes the use of these newer CPU features is a pervasive
architectural assumption, rather than something you can turn on and off.
For example, I don't know for sure why Steam needs CMPXCHG16B (128-bit
atomic operations), but it's probably safe to assume that it's using
them for some sort of lockless synchronization between threads or
processes. If it's that, then its developers are unlikely to be willing
to write a baseline-compatible fallback - and after committing to using
128-bit atomic ops, it might not be *possible* to write a fallback without
breaking compatibility, even if they wanted to.
for ppc/ppc64
altivec-support
POWER8 already has AltiVec. For powerpc and ppc64, AltiVec is not
required in the baseline because there are some embedded systems
that people use that don't support AltiVec despite being more recent
than some of the first AltiVec CPUs.
Right, that makes this a good example of where isa-support is useful.
The purpose of having an altivec-support package in isa-support would be
so that Debian-as-a-whole can continue to be installable on those
embedded CPUs, but when a specific piece of software *does* require
Altivec (like ioquake3 did in the past), that piece of software can be
installable onto POWER8 and Apple G4/G5 systems, but flagged as not
suitable for the embedded CPUs that you mentioned.
smcv