Debian's approach to Rust – Dependency handling (2022)
Debian’s proposed Rust policy
- Debian is considering routinely compiling Rust packages against dependency versions that violate upstream semver constraints, then shipping those binaries.
- Rationale: preserve Debian’s “global” dependency view, minimize duplicated libraries, ease system-wide security patching, and fit Rust into the traditional shared-library distro model.
- Several commenters note it is unclear whether this proposal was ever fully adopted in practice.
Stability and security concerns
- Many argue this will introduce subtle logic and stability bugs that upstream cannot reproduce or support.
- Semantic changes often aren’t reflected in types (e.g., “take a string, return a string” APIs changing behavior), so type safety doesn’t prevent regressions.
- Ignoring version constraints can undermine security too, e.g., by reintroducing versions with known vulnerabilities.
- Some see this as “injecting bugs and waiting for users to report them,” which could be exploited by malicious actors.
Dynamic vs static linking and resource trade-offs
- Distro maintainers emphasize benefits of shared libraries: lower disk/RAM use, faster updates (patch one library, fix many apps), and manageable SBOMs.
- Others counter that modern systems can afford duplication and that static or bundled builds (as with Rust, Go, Python tools, containers, Flatpak/Snap) often “just work” better.
- There’s disagreement on how big the resource cost is and whether it justifies Debian’s global versioning stance.
Distro model vs modern language ecosystems
- Traditional distros assume one or a few versions of each library, dynamically linked, with the distro responsible for backports and CVE fixes.
- Modern ecosystems (Rust/Cargo, Python/venv, Node/npm, Go) assume per-project dependency resolution, multiple versions, and often static linkage.
- Some argue distros must adapt (vendored deps, app-level isolation, per-app envs); others insist the distro model is critical for security and maintainability.
- Nix/Guix and containers are cited as alternative models; opinions differ on whether they solve or just relocate the problem.
Upstream–distro relationship and UX
- Upstreams fear getting bug reports caused by distro-specific dependency changes they never tested.
- Traditional expectation: users report to the distro first; in practice, many go straight to upstream (e.g., via GitHub), increasing upstream support burden.
- Some developers say they would avoid or block such distro packaging; others accept distro autonomy but insist that any consequences are on the distro.