Gconv package split in glibc
Most Gconv modules with the exception of unicode and similar essential ones have been split into a separate package called glibc-gconv-extra. Currently, the core package glibc has a strong (Requires) dependency on glibc-gconv-extra making this change transparent to users. This proposal is to weaken this dependency to Recommends so that it is possible to remove glibc-gconv-extra from installations that do not need it.
- Name: Siddhesh Poyarekar
- Email: email@example.com
- Targeted release: Fedora Linux 35
- Last updated: 2021-07-16
- FESCo issue: #2644
- Tracker bug: #1983145
- Release notes tracker: #721
The glibc-gconv-extra package contains all iconv converter plugins except UTF-*, unicode, ISO-8859-1, ISO8859-15, CP1252 and ANSI_X3.110. A number of minimal installations would typically not need all those plugins and they can be removed without any ill effects to those environments. To achieve this, the glibc dependency on glibc-gconv-extra needs to be weakened from Requires to Recommends.
Weakening the dependency of glibc on glibc-gconv-extra implies that glibc-gconv-extra may not be pulled into certain installations by default, e.g. in buildroots for package builds. glibc-gconv-extra is however necessary because a number of packages either run tests that verify conversions between arbitrary character sets or need similar functionality to convert character sets of files in the upstream sources. A method would have to be devised to ensure that glibc-gconv-extra is available in buildroots. One option is to have redhat-rpm-config Require glibc-gconv-extra as a way to ensure that glibc-gconv-extra is in every buildroot, but better ideas are desirable.
The change was made assuming that the weak dependency would be sufficient to address compatibility but it was subsequently rolled back when it was discovered that buildroots do not pull in weak dependencies. Since the announcement on fedora-devel the reception to the change idea itself has been positive. There are compatibility concerns with respect to buildroots and backward compatibility, which will be addressed.
Benefit to Fedora
The ability to remove glibc-gconv-extra brings in two main benefits:
- Removal can save about 8MB in the installed size, which is an advantage for minimal container images
- A number of the infrequently used modules have historically had bugs that have been considered security issues. Removing the glibc-gconv-extra package is thus a hardening opportunity for UTF-8 clean environments.
- Proposal owners:
The change required in glibc is minimal, requiring only spec file changes to change dependencies.
- Other developers:
To allow glibc-gconv-extra to be installed in minimal koji buildroots, redhat-rpm-config needs to be modified to depend on glibc-gconv-extra. Alternatively, the buildroot definition needs to be altered somehow to include glibc-gconv-extra.
If none of the above are feasible, package owners will need to add a BuildRequires on glibc-gconv-extra if they need the extra converter modules. However this is the last option and should ideally be avoided.
- Release engineering: 
- Policies and guidelines: N/A (not needed for this Change)
- Trademark approval: N/A (not needed for this Change)
- Alignment with Objectives:
The dependency changes will take into account that upgrading from older packages will automatically pull in glibc-gconv-extra, so as to make the change transparent to the user.
How To Test
1. Update glibc on an older system and verify that glibc-gconv-extra gets updated by default 2. Update glibc on a system that has glibc-gconv-extra removed and verify that glibc-gconv-extra is not pulled in 3. glibc downgrades should also have analogous behaviour 4. Build any package in mock or koji and verify that glibc-gconv-extra is present in the buildroot
Minimal, UTF-8-only containers can be reduced by 8MB.
If buildroot issues cannot be resolved through releng or a dependency on redhat-rpm-config, a number of packages will need to be updated to ensure that they build. At this moment that list is unknown.
- Contingency mechanism: glibc dependency on glibc-gconv-extra is reverted to Requires
- Contingency deadline: 2021/08/24 (Beta freeze)
- Blocks release? No
Package split and its potential announced and discussed here: https://firstname.lastname@example.org/thread/JQTTSNHMSFV63KIDDPW4M7WV7CI6KZYW/