Dropping cc on bug report and replacing pkg-rust-maintainers with
debian-rust, as these are policy discussions.
On 20/09/25 10:31, Jonas Smedegaard wrote:
My question is aimed at something else: Why did this happen in the first
place? I ask with this case as a concrete example, but I have filed
numerous bugreports¹ for Rust packages having broken dependencies, and
my aim here is to address what I suspect is a more general issue:
Why do the Rust team upload known broken packages to unstable?
There is no policy in Rust Team allowing broken packages in unstable. If
a package is uninstallable in unstable, that's 100% a bug. If it's done
on purpose, that's a choice of the uploader in their personal capacity,
not reflective of team policy. Since the Rust Team maintains a large
fraction of Rust packages, broken packages usually create issues to us
too, so we aren't happy about those either.
There is, however an underlying "policy" reason why packages maintained
by the Rust Team may have an increased chance of being uninstallable.
This can happen due to a chain of events (or lack thereof) which in my
opinion is unnecessarily broken at the bottom:
1. We don't usually use piuparts. This is fine because most of the
binary packages' dependencies are source package build-dependencies:
usually, if a binary package is uninstallable, the source package is B-D
uninstallable, and we catch that as a FTBFS bug instead. Uploading a B-D
uninstallable/FTBFS package to unstable is a policy violation.
2. Crates marked as optional in Cargo.toml -- e.g. crates needed for
non-default features -- are binary dependencies but not source
build-dependencies: these missing wouldn't be caught at build-time.
Nonetheless, by default, they are autopkgtest dependencies (trivially,
because they are binary dependencies). If autopkgtests pass, it means
the package was installable. So our default minimal policy is: the
package must build and its autopkgtests must pass. As long as it does,
we don't even need to care about piuparts. Also, if they fail, it's a
(release) policy violation.
3. There is, however, a loophole here: by policy, autopkgtest are marked
as skip-not-installable by default. So if tests don't fail, but they
don't pass either, we would e.g. reject to sponsor their upload for new
contributors (again, the default policy is autopkgtest must pass), but
someone with more experience may just think "eh, I'll fix it later".
Assuming they ran autopkgtest, which they are supposed to. This is where
the chain breaks and to test installability you should use piuparts, or
whatever alternative you are.
Uninstallability is a bug regardless of its causes, but I think what I
described above may increase the chances of it happening in
Rust-Team-maintained packages. If memory serves me well (but it may very
well not :-)), at DebConf you expressed you're not happy about the
skip-not-installable policy. I agree, and I can't think of a concrete
reason why we should keep it. Note this does not mean there *isn't* a
concrete reason to do so. Other people have spent much more time than me
thinking about these issues, so a reason may very well exist.
In the same bucket, as far as I'm concerned, there's running cargo tests
in debug -- rather than release -- mode. I agree with you this is wrong:
no code is ever going to reach the Debian archive compiled in debug
mode. Again, someone with more experience than me may have a different
understanding about this.
In your reflections above, you seem to consider experimental a place
for cross*team* coordination.
No, I was only thinking about that in the context of transitions.
I urge to use experimental more generally as a staging place for cross
*package* coordination: Release known broken packages to experimental,
and then re-release to unstable only when the package is believed stable
with respect to its declared dependencies.
I'd rather we don't upload broken packages at all, but yeah, if you
must, anything but experimental surely violates policy and makes
everyone's work harder.
Cheers!