ADR-0603: Ubuntu 26.04 (Resolute Raccoon) fallout fixes — CUDA 13.2, Python 3.14, apt renames¶
- Status: Accepted
- Date: 2026-05-19
- Deciders: lusoris, Claude (Anthropic)
- Tags:
build,cuda,ci,python,supply-chain
Context¶
Renovate PR #1402 bumped the dev container base image from ubuntu:24.04 to ubuntu:26.04@sha256:f3d28607… (codename: Resolute Raccoon). Ubuntu 26.04 ships several incompatible changes that break the container build:
-
glibc 2.43 + CUDA 13.0/13.1
rsqrtconflict. Ubuntu 26.04 ships glibc 2.43 whosebits/mathcalls.hdeclaresrsqrt(double)withnoexcept(true). CUDA 13.0 and 13.1'scrt/math_functions.hredeclares the same symbol without the noexcept spec, causing NVCC to emit a C2059/C2143/C2085 cascade during the host-compile pass. CUDA 13.2 aligns itscrt/math_functions.hwith glibc 2.43's noexcept annotation and eliminates the conflict. -
Python 3.14 is the default. Ubuntu 26.04 (Resolute Raccoon) drops Python 3.12 from the archive;
python3is Python 3.14. Thepython3.12,python3.12-venv, andpython3.12-devpackages are not available. Therequires-pythonceilings intools/vmaf-tune/pyproject.toml(<3.13) andai/pyproject.toml(<3.13) must be raised to<3.15to accept 3.14. -
mesa-va-driversrenamed tomesa-libgallium. Ubuntu 26.04 reorganised the Mesa gallium driver packaging; the package formerly known asmesa-va-drivers(which shippedradeonsi_drv_video.soandiris_drv_video.so) is nowmesa-libgallium. Requesting the old name producesE: Unable to locate package mesa-va-drivers. -
libxml2.so.2soname removed — ROCm LLD broken. Ubuntu 26.04 renamed thelibxml2package tolibxml2-16, and the shared library soname changed fromlibxml2.so.2tolibxml2.so.16. ROCm 7.2.3's bundled LLD (/opt/rocm-7.2.3/lib/llvm/bin/lld) was linked against the old soname; it fails withcannot open shared object file: libxml2.so.2at.hsacolink time when compiling HIP kernels. The fix installslibxml2-16and creates alibxml2.so.2 → libxml2.so.16.1.2compat symlink. The libxml2 C API is backward-compatible; the soname change was a Debian packaging decision, not an ABI break. -
NVIDIA apt repo. The NVIDIA
ubuntu2604apt repository exists and provides thecuda-keyring.deb and driver packages, but does NOT yet contain the fullcuda-toolkitmeta-package (onlycuda-compat-13-2and driver debs are present). Theubuntu2404repo carries the full toolkit includingcuda-toolkit-13-2; NVIDIA's .deb packages are glibc-backward-compatible and install correctly on Ubuntu 26.04. -
ROCm apt channel. AMD's
repo.radeon.comonly publishes anoble(Ubuntu 24.04) channel as of 2026-05-19; there is noresolute(Ubuntu 26.04) channel yet. ROCm userspace .debs are glibc- backward-compatible; thenoblepackages install correctly on Ubuntu 26.04.
Decision¶
We apply six targeted fixes to the container build and two belt-and-suspenders defensive additions:
-
CUDA: pin
cuda-toolkit-13-2from the ubuntu2404 NVIDIA repo. Replace the unversionedcuda-toolkitmeta-package withcuda-toolkit-13-2. Keep the ubuntu2404 CUDA apt repo (the ubuntu2604 repo lacks the full toolkit). Bump the CI Jimver/cuda-toolkit-action pin from13.0.0to13.2.0inlibvmaf-build-matrix.yml(Linux and Windows legs). -
CUDA Fix B —
-D__MATH_NO_INLINESin meson.build. Add-D__MATH_NO_INLINESto the nvcccuda_flagsincore/src/meson.build. This flag tells glibc to suppress the inline math-function definitions (including the noexcept-annotatedrsqrtoverload), eliminating the redeclaration conflict even if a future CUDA patch version accidentally re-introduces the mismatch. Harmless on older glibc versions. -
Python 3.14: replace package names in Containerfile. Replace
python3.12/python3.12-venv/python3.12-devwithpython3.14/python3.14-venv/python3.14-dev. Usepython3.14 -m venvin the Stage 4 Python environment layer. Raiserequires-pythonceilings intools/vmaf-tune/pyproject.tomlandai/pyproject.tomlfrom<3.13to<3.15. Python 3.14 wheels for every declared dependency (numpy 2.4.5, scipy, torch, etc.) are available on PyPI. -
mesa-va-drivers→mesa-libgallium. Replace the old package name in the Containerfile Stage 1 apt install list. Update the post-install verificationRUNto checkmesa-libgallium. -
ROCm: document the
noble-only situation. No change to the ROCm apt source line (it already usesnoble). Add a comment explaining thatresolutedoes not exist yet and when to flip it. -
libxml2.so.2compat symlink for ROCm LLD. Installlibxml2-16(Ubuntu 26.04's renamed libxml2 package) and create alibxml2.so.2 → libxml2.so.16.1.2symlink so that ROCm 7.2.3's bundled LLD can load the library at.hsacolink time. The symlink is added in the sameRUNstep as therocm-hip-runtime-devinstall to keep layer count unchanged.
Alternatives considered¶
| Option | Pros | Cons | Why not chosen |
|---|---|---|---|
Pin back to CUDA 13.1 + add -D__MATH_NO_INLINES only | Avoids NVIDIA repo complexity | CUDA 13.1 does not exist in the ubuntu2404 apt repo; unversioned cuda-toolkit meta-package would resolve to 13.2 anyway; also no ubuntu2604 toolkit | Only cuda-toolkit-13-2 is available in the NVIDIA apt repos |
| Stay on ubuntu:24.04 base image | No compatibility work needed | Renovate PR #1402 already bumped it; ubuntu:24.04 hits EOL in 2029; ubuntu:26.04 is the LTS target | Ubuntu 26.04 is the new LTS baseline; reverting Renovate is the wrong direction |
| Use ubuntu2604 NVIDIA repo for keyring and toolkit | Keeps URLs consistent | ubuntu2604 repo only has cuda-compat-13-2 + driver packages — no cuda-toolkit meta-package | ubuntu2404 toolkit cross-installs cleanly and is the only path to the full nvcc on 26.04 |
Wait for ROCm resolute channel | Cleanest repo URL | AMD has not published it; container build would fail indefinitely | noble packages install on resolute; noble channel is the pragmatic fix |
Install Ubuntu system lld to replace ROCm's bundled one | Avoids soname shim | System LLD may not support amdgcn target; ROCm LLD is patched with AMD-specific backends not in upstream LLVM | Symlink is the minimal invasive fix that leaves ROCm's toolchain intact |
Consequences¶
- Positive: container build unblocked on Ubuntu 26.04 LTS; CUDA 13.2 fixes the glibc 2.43
rsqrtnoexcept conflict permanently; Python 3.14 support opens doors to CPython 3.14 free-threaded builds in future iterations; HIP kernel compilation restored by thelibxml2.so.2compat symlink. - Negative:
cuda-toolkitis now pinned to a versioned meta-package (cuda-toolkit-13-2); future CUDA major releases require an explicit Containerfile bump rather than being pulled in automatically by the unversioned meta. - Neutral / follow-ups:
- When NVIDIA publishes
cuda-toolkit-13-3or later: update thecuda-toolkit-13-2pin. The-D__MATH_NO_INLINESflag is retained as a permanent defensive measure. - When AMD publishes a
resoluteROCm channel: replacenoblewithresolutein the ROCm apt source line. - When Ubuntu 26.04 builds a
python3.12backport (unlikely for LTS): no action required;python3.14is the correct target. - CI gate
Build — Ubuntu CUDAandBuild — Windows MSVC + CUDAnow test CUDA 13.2 rather than 13.0. The sm_50 gencode guard (<13version check inmeson.build) is unaffected — 13.2 is still ≥ 13.
References¶
- Renovate PR #1402 — triggered the Ubuntu 26.04 bump.
- ADR-0541 — original container GPU stack design (CUDA, SYCL, Vulkan, ROCm, oneAPI).
- ADR-0568 — SDK audit that introduced ORT 1.26.0, vvenc 1.14.0, AMF 1.5.2 (same PR round).
- NVIDIA ubuntu2604 apt repo index:
https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2604/x86_64/ - ROCm apt repo:
https://repo.radeon.com/rocm/apt/7.2.3/dists/(noble only as of 2026-05-19). - Source: req — "fix every fallout in ONE DRAFT PR" (user directive, 2026-05-19).