← Back to context

Comment by M95D

3 days ago

All I can say is that Gentoo specifically forbids downgrading glibc. I think it's the only package where they did this. [1] The .ebuild is full of patches and workarounds.

[1] See line 873. https://github.com/gentoo/gentoo/blob/master/sys-libs/glibc/...

Yeah, that's forwards-compatibility, which is different. Something built targeting a newer version of glibc is unlikely to work with an older one. (and gentoo will by default build against the latest you have installed, so yeah, downgrading has a good chance of breaking near everything).

> All I can say is that Gentoo specifically forbids downgrading glibc.

Nope. You're protected from accidentally doing it, not forbidden. Look:

  # I_ALLOW_TO_BREAK_MY_SYSTEM=yes emerge -1v =sys-libs/glibc-2.43-r4
  These are the packages that would be merged, in order:
  <snip>
  [ebuild     UD ] sys-libs/glibc-2.43-r4:2.2::gentoo [2.44-r3:2.2::gentoo] <snip>

  Total: 1 package (1 downgrade), Size of downloads: 0 KiB

  >>> Verifying ebuild manifests
  
  >>> Running pre-merge checks for sys-libs/glibc-2.43-r4
  
  >>> Emerging (1 of 1) sys-libs/glibc-2.43-r4::gentoo
   * glibc-2.43.tar.xz BLAKE2B SHA512 size ;-) ...           [ ok ]
   * glibc-2.43-patches-5.tar.xz BLAKE2B SHA512 size ;-) ... [ ok ]
   * Checking whether python3_14 is suitable ...
   *   dev-lang/python:3.14 ...                              [ ok ]
   * Using python3.14 to build (via PYTHON_COMPAT iteration)
  >>> Unpacking source...
   * Checking general environment sanity.
   * Sanity check to keep you from breaking your system:
   *  Downgrading glibc is not supported and a sure way to destruction.
   * Performing simple compile test for ABI=amd64 ...
   <snip>

If you don't set that environment variable, the downgrade blows up at the "Sanity check to keep you from breaking your system:" step with a message that includes a call stack that pretty much tells you how to override the safety check:

  * Call stack:
  *     ebuild.sh, line  143:  Called src_unpack
  *   environment, line 3570:  Called sanity_prechecks
  *   environment, line 3199:  Called die
  * The specific snippet of code:
  *               [[ ${I_ALLOW_TO_BREAK_MY_SYSTEM} = yes ]] || die "Aborting to save your system.";