Some assumptions I have about the RFC 3537 problem space:
- Some people are stuck on old versions of rustc. Unfortunately, telling them that does not unblock them to update. No matter how much we would like them to.
- People are stuck for different reasons and therefore on different versions. There is no "one version we should support" that everyone agrees on. Unfortunately, telling them that "the community has decided on only supporting back to 1.x" does not unblock them if they're stuck on 1.(x-n). No matter how much we would like them to.
- Just getting everyone to agree on what version to support has not happened despite many years of people trying. Even if someone was capable of "telling the community the right answer", it certainly isn't the cargo team's place to leave that discussion. Almost the entire problem would go away if the community agreed on how quickly to adopt new functionality. Unfortunately, that is unhelpful/irrelevant to this discussion.
- and the tooling (mostly cargo) makes it almost impossible to do without dedicated infrastructure. Specifically the infrastructure we need to set up for ______, and the iterative
cargo update -p --precise
required to get a set of versions that actually work.
- The only easy situation for someone stuck on an old version is to have all of your transitive dependencies consciously supporting versions at least as old as yours. Thus if you maintain an intermediate dependency that is intended to be used by people stuck on an old version (given the sorry state of the tooling) you must only depend on libraries that have an even stricter MSRV. Thus if you maintain a foundational crate you should go far beyond the "community norm" for supporting older Rust, just like all the other ways foundational crates are held to a higher standard.
- Almost everyone stuck on an old version of Rust ends up needing some transitive dependency that does not care about its MSRV (or cares about a newer MSRV then you). The current tooling (in cargo) is actively hostile to dealing with the situation.
- Most library maintainers (do not maintain foundational crates and) do not care about their MSRV. They do not currently put any thought into supporting older rust versions. Some, but it's not clear how many, actively do not want to think about outdated tooling. If we want to make lives easier for users who are stuck, we need to lower the barriers for maintainers not make more demands on them.
- We cannot build better tooling without access to accurate metadata. This means that we need to encourage metadata to be published and encourage anything that is published to be correct.
- All existing workflows, including ignoring metadata, need to continue to be possible. Although it can be reasonable for some of them to have to add a few configurations.
- Probably more, this is a living document and still a work in progress.
TODO: I need to think about the 1.(n-2)
users.