On Sat, 15 Aug 2026 at 05:20:27 +0900, Simon Richter wrote:
On 8/14/26 23:24, Charles Plessy wrote:
I would appreciate if there would be easier way to turn off (and on)
i386 or any future new partial relesease without having to update
control fields and reupload a package and its whole dependency chain.
I'm not sure how much value we necessarily get from prematurely
generalizing this. i386 is special because it's an architecture that we
don't want to support on its native hardware (32-bit CPUs) any more, AND
there's a significant amount of legacy binary-only software for it
(either directly for i386-linux-gnu, or for 32-bit Windows via Wine),
which we can conveniently run on newer-but-backward-compatible CPUs. Is
there any other architecture where we can expect both facts to be true?
amd64 has a significant amount of binary-only software, but I don't see
us discontinuing amd64 in the next few decades. (If we imagine a future
where x86 hardware is no longer produced, we'd probably still want an
amd64 partial architecture that could run old software under emulation,
but I don't think that's a realistic possibility any time soon!)
armel, armhf, s390 and powerpc all have/had
newer-but-backward-compatible CPUs that could run them (armhf/arm64,
arm64, s390x and ppc64 respectively), but they never had a significant
amount of binary-only software that we can run, and the 64-bit time_t
transition has broken their ABIs anyway, so they don't seem practically
useful as partial architectures.
(Of course armhf does have a significant amount of binary-only software
*for Android*, but I don't think that's directly relevant here.)
Short-term we could probably reuse the build-dependency hack, where an
empty package is only available on a subset of architectures, so
buildds can never build the package on any others.
Perhaps architecture-properties:amd64 etc. Provides:
architecture-is-full or architecture-is-not-partial,
architecture-properties:i386 doesn't provide it, and your package
Build-Depends on that name? That would be a generalization of having a
Build-Depends: unsupported-architecture [i386], which is what can be
done right now.
The other obvious way I can see to do this with existing mechanisms is
if the buildds could be configured to add some Build-Profiles when
building i386; and then we could build it with a "partial-arch" profile,
and packages that don't want to be buildable on i386 could use:
Build-Depends: unsupported-architecture <partial-arch>, ...
Building i386 with the noudeb build profile would also be an immediate
reduction in how much compiling is needed, because i386 no longer has
d-i, so there is nothing that will use the udebs.
Perhaps someone involved in operating the buildds could comment on
whether setting some Build-Profiles by default for an architecture is
easy or difficult to achieve?
That could also make it easier for a source package to build on i386
with reduced functionality (for example disabling a GUI, or something
needed during boot), instead of having an all-or-nothing choice between
building it fully-functional or not at all:
Build-Depends:
libbasic-dev,
libgui-dev <!partial-arch>,
...
Package: foo-gui
Build-Profiles: <!partial-arch>
If we want other equivalence classes of architectures, then build-profiles
or the architecture-properties package seem like they would be the way
to gate that.
For example we could classify architectures into those where a GUI might
be practically useful (everything except s390x) and those where it isn't
(s390x), or those that could be useful for "heavy" CPU-bound computation
like scientific software (amd64, arm64) and those that most likely
aren't (riscv64, loong64).
As with any feature reduction, turning off packages per-architecture
without breaking dependencies needs to start from leaf packages, and work
inwards towards core packages.
smcv