Problem: Programs linked against libc < 2.22 abort when trying to load libc 2.22-or-later locale data: https://lists.gnu.org/archive/html/guix-devel/2015-08/msg00737.html Programs linked against libc 2.22 do not abort when trying to load 2.21 locale data, but they fail to load data for the LC_COLLATE category (in which case ‘setlocale’ returns ENOENT and the program prints a warning) due to the addition of the _NL_COLLATE_ENCODING_TYPE element. In all situations, as a last resort, one can always run: export LC_ALL=C to sidestep the incompatibility issues. Since ‘core-updates’ will soon be merged, bringing libc 2.22, here’s a preview of the problems you may encounter and possible solutions. Consequences on GuixSD: • If programs in user profile use libc 2.22 but /run/current-system/locale provides libc 2.21 locales: no hard problem, but the LC_COLLATE problem. • If LOCPATH points to 2.22 locales but /run/current-system/profile contains 2.21 programs (Coreutils, sed, grep, etc.), these will abort. Solution: unset LOCPATH so that programs use the 2.21 locale data from /run/current-system/locale. • If /run/current-system is upgraded to 2.22 but user profiles contain 2.21 programs, these will abort. Solution: upgrade user profiles, or install glibc-utf8-locale-2.21 in user profile (preferably before upgrading GuixSD to libc 2.22.) Consequences for Guix on foreign distros: • If the host distro provides binaries that use libc < 2.22 and you use a mixture of Guix-provided and distro-provided programs, this is pretty bad. Solution: unset LOCPATH and say goodbye to locales for Guix-provided packages (setting LOCPATH=$HOME/.guix-profile/lib/locale would break all the distro-provided programs), or use exclusively Guix-provided programs, or use the “C” locale. Lesson learned: • On GuixSD, we should use a versioned directory, /run/current-system/locale/X.Y, as the default locale directory, which would avoid problems. • The attached patches allow GuixSD users to choose a different libc than the current one to build the locales that go to /run/current-system/locale. However this isn’t really satisfying. Comments welcome! Ludo’.