Hi,

Quick update on this one. A few things changed since my last message in
December, and I've since taken a closer look at the whole reverse-dependency
chain.

State of things: 1.3.0-1 is still sitting in experimental, and sid is
back on 1.2.1-2. I retried an upload of 1.3.0-2 to unstable, and the
debusine reverse-dep QA flagged a fresh set of build failures. The round
of fixes I did back in December (cgroups 0.0.6, runtime-tools 0.9.0.141,
runc) all went to experimental alongside 1.3.0-1 and were never picked up
in unstable, so the current breaker list is effectively the full one.

The good news is that the ecosystem has caught up in the meantime. As of
today, released versions of the major consumers build against 1.3.0:

- runc 1.4.0 (and 1.5.1) adopt 1.3.0
- containerd 2.2.1+ and 2.3.x adopt 1.3.0 (note: the initial 2.2.0 still
  pinned 1.2.1); current stable is 2.3.3
- buildah 1.44.0 adopts 1.3.0, and pins runc 1.4.2
- golang-github-containerd-cgroups 3.1.3 adopts 1.3.0

Also worth keeping in mind: upstream dropped 1.2.x entirely, there is no
release-1.2 branch, only main, and v1.2.1 (Feb 2025) is the final 1.2.x
release. So staying on 1.2.x is a dead end either way.

A few findings that aren't obvious from the changelog:

1. The Go breaking change is narrower than I originally thought. Only
   LinuxPids.Limit changed from int64 to *int64; LinuxMemory.Limit was
   already a pointer in 1.2.1. The other compile-level break is in the
   IntelRdt struct, where EnableCMT/EnableMBM were removed in favour of
   schemata and enableMonitoring.

2. crun is off the list. 1.24-1 now builds against its bundled copy of
   the OCI specs, so it no longer consumes this package. (#1122251)

3. docker.io is a new find, and a slightly awkward one. Moby's
   getPidsLimit in daemon/daemon_unix.go assigns a plain int64 to
   specs.LinuxPids.Limit, which breaks against 1.3.0. The fix is in Moby
   master, but there is no released version that carries it (latest is
   still 28.5.2). So either a small quilt patch, or we wait for the next
   docker release.

4. runtime-tools is the last hard blocker upstream: no release contains
   the 1.3.0 fix, only master. Since we already package it from git
   snapshots, I'll just snapshot master instead of patching around it.

Proposed upload order, trying to keep the broken window in unstable as
small as possible (every consumer needs 1.3.0 in the archive to build at
all, so specs has to go first):

1. golang-github-opencontainers-specs 1.3.0 -> unstable
2. runc 1.4.x
3. golang-github-containerd-cgroups 3.1.3, golang-github-containerd-nri 0.12.0
4. containerd 2.3.3 (plus the container-device-interface bump it needs)
5. golang-github-containers-buildah 1.44.x
6. golang-github-opencontainers-runtime-tools (master snapshot)
7. docker.io (quilt patch for getPidsLimit)

I'll rerun the debusine reverse-dep tests after each step, and once the
last consumer is green the upload should migrate on its own. Planning to
start with runc 1.4.x unless somebody objects.

-rt

Reply via email to