Update:
We’ve identified the root cause of the crash occurring after installing binary Python wheels (e.g., ITK wheels). The issue stems from recent wheels being built with the newer std::string
ABI, while the official Slicer and Python binaries target the older ABI. This mismatch leads to compatibility issues.
To learn more about the Dual ABI, refer to GCC’s Dual ABI Documentation.
Proposed Solution
To resolve this, we plan to introduce an option that packages a _manylinux.py
module specific to the build environment. This module will restrict the latest compatible version of GLIBC, ensuring compatibility with the host system.
For example, adding the following _manylinux.py
module to the environment ensures compatibility with manylinux_2_17
or older wheels, avoiding the installation of newer, incompatible wheels like manylinux_2_28
:
from typing import NamedTuple
class _GLibCVersion(NamedTuple):
major: int
minor: int
def manylinux_compatible(tag_major, tag_minor, tag_arch, **_): # PEP 600
if _GLibCVersion(tag_major, tag_minor) > _GLibCVersion(2, 17):
return False
return True
This ensures compatible wheels are installed on Ubuntu systems.
References
- Dual ABI Documentation: https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html
- PEP 600: Package Installers: https://peps.python.org/pep-0600/#package-installers
- Discussion on PEP 600: https://discuss.python.org/t/pep-600-text-and-example-code-for-package-installers-section-disagree/55329
Next Steps
Later today, we’ll validate this solution by running the full SlicerMorph
and SlicerANTs
workflows. Once confirmed, we’ll integrate the fix into Slicer and proceed with the release process.
For now, Preview and Stable builds remain disabled.
Thank you for understanding.
cc: @muratmaga