APT Rust requirement raises questions
Rust-to-C Transpilation Debate
- Some argue a Rust→C transpiler would avoid needing Rust toolchains on all architectures. Others counter that:
- Rust’s LLVM IR cannot be mapped cleanly to portable C because C has lots of undefined behavior (e.g., signed overflow, pointer aliasing) that Rust defines differently.
- You’d either need to target a very narrow “gcc-with-specific-flags” dialect or generate verbose, non‑idiomatic C to preserve semantics.
- Assembly is a simpler, more predictable target; C is a high-level language with complex semantics and aggressive compilers.
- Existing projects (mrustc, GCC backends) are mentioned as partial alternatives but don’t remove the core portability and semantics issues.
Rust in APT & “Rewrite It in Rust”
- One camp sees Rust in APT as sensible: APT is critical supply‑chain infrastructure with complex parsers and string handling; memory safety and stronger checks are desirable.
- The opposing camp sees “Rust everywhere” as faddish, especially rewrites of “battle-tested” tools like sudo or coreutils, and worries about regressions, lost features, and license shifts (GPL→MIT).
- Some distinguish between total rewrites and incremental refactors within existing codebases; the APT changes are framed by some as the latter.
- Supporters say Rust attracts new contributors and reduces a large class of bugs, but skeptics stress it only prevents certain vulnerabilities and is not a panacea.
Debian Governance, Canonical, and Retro Ports
- There’s strong criticism of the APT maintainer’s announcement tone (“retro computers”, “no room for change”) and the perception of a unilateral decision tied to Canonical’s needs.
- Others counter that:
- Debian must limit options to remain maintainable; many affected architectures (Alpha, m68k, hppa, sh4) are long‑unofficial and niche.
- The maintainer did announce intent 1–2 years in advance on the proper list.
- Some argue old ports still help expose subtle bugs and that dropping them, even if “unsupported”, weakens Debian’s “universal OS” ethos.
- A commonly suggested compromise: move Rust‑using tools (e.g., archive parsers, Launchpad‑specific utilities) out of core APT so main package management remains buildable without Rust on exotic ports.
Security, Parsers, and Solvers
- .deb/.ar/.tar parsing and signature handling are cited as risky areas; critics question the benefit of hardening .deb parsing if installing a malicious package is already “game over”.
- Others reply that:
- Metadata may be parsed before signature verification.
- Defense in depth matters (e.g., PPAs, forges, provisioning environments).
- The new Rust dependency solver is criticized for lacking a unit-test suite (though it has integration tests). Commenters note that solving dependencies is intrinsically hard and full of trade‑offs, regardless of language.
Rust Tooling, Dependencies, and Ecosystem Concerns
- One side praises Cargo versus C/C++ (CMake, Autotools, pkg‑config), saying it makes adding dependencies trivial and portable.
- Others see npm‑style, static‑linked dependency graphs as ill‑fitting for distros that rely on shared system libraries and easy mass rebuilds.
- Some suggest waiting for mature GCC Rust support before hard‑depending on Rust for core distro components, to ease porting to new or marginal architectures.
- A few express broader distrust of the Rust Foundation and fear Rust becoming a “Trojan horse” that later demands heavy corporate funding; others see this as speculative.
Evangelism, Tone, and Syntax
- Multiple comments complain about aggressive “rewrite it in Rust” evangelism and language tribalism, arguing it alienates users and maintainers and causes reputational damage.
- Others defend strong advocacy as a reaction to decades of C/C++ memory‑safety problems, but agree Rust rewrites should be judged by the same quality and stability standards.
- A long tangent debates Rust syntax: some find it dense and “symbol‑heavy” (lifetimes, trait bounds, macros), especially compared to Python/Kotlin; others say it’s fine once familiar and that the real complexity comes from the semantics Rust must express (ownership, lifetimes, rich types), not mere punctuation.