Let me try to summarize the understanding of the problem with 32-bit libraries in Fedora.
The top post might be updated later Corrections or additions are welcome.
Q: Why keeping the status quo is bad?
Overhead on maintainers
Maintainers of the i686 libraries currently are forced to keep building and maintaining them even when the upstream disappears or no longer supports the bug resolution, because someone else might depend on them for the unknown reason.
A failure to build on the i686 task blocks the entire build from succeeding. If the upstream is unwilling/unable to assist with the build failure, that puts quite a bit of stress on the maintainer to figure out the problem themselves so they can keep updating the package for all other architectures. This is even more stressful when CVEs are involved. They either have to solve the problem themselves, or exclude the i686 architecture. The latter can be quite disruptive if it isn’t a leaf package.
Overhead on infrastructure
We generate a lot of load on infrastructure and people maintaining it simply by building the packages. It roughly can be guesstimated to up to 20%(corrections welcome!) of the load of the infra, not counting the effort of engineering resources needed to perform a successful mass-rebuild every release.
Overhead on infrastructure tooling
The current implementation of the multilib creates constant overhead on infrastructure tooling (test tools, analytics, admin tools,..) which need to handle special cases and keep additional logic for i686 packages.
Q: Why it is hard to phase out 32-bit libraries gradually in Fedora
Inertia
Simply lack of awareness among existing and new packagers about the initiatives like:
This is partially solved by the recent discussion I guess
Opt-out vs opt-in
New packages are created with i686 builds enabled which grows the 32-bit dependency tree. Which goes against the efforts to trim it.
The possible solutions here:
- introduce IncludeArch tag in the RPM spec file - requires work in RPM upstream OR abuse one of the existing tags, for example, Group to store the opt-in information;
- AND introduce a check for explicit mention of i686 in the rpm spec file in Koji - requires patch in Koji upstream like:
if not 'i686' in koji.get_header_field(h, 'group'):
archlist.remove('i686')
Lack of tooling and data to track workloads and their dependencies
It is not easy to figure out which packages are the dependency tree of the 32-bit libraries and which workloads depend on them. Especially when we talk about libraries which might be useful for tools and apps not packaged to Fedora.
This issue is unresolved. The attempts to solve it include:
- There is Overview - leafdrop - Pagure.io by @decathorpe
- The ContentResolver tool needs work: Initial results of trying to use content-resolver for i686
- There are some collections of lists of runtime dependencies for Steam client and similar apps, but not resolved to the clear list of dependent packages.
“no multilib support in koji”
noarch dependencies may resolve to i686 dependencies in the background increasing the 32-bit dependency tree.
If an arch-dependent package has a dependency on a tool like asciidoctor or pytest to build docs or test a package during build time, these dependencies will be resolved according to i686 architecture and pull in ruby.i686 or python.i686 even though ruby.x86_64 would be enough for the use case.