One or more of the transitive dependencies needs Rust 1.88 or newer, so this becomes our minimum version. It may be possible to build with an older Rust by manually picking dependency versions but I'm not going to do that. Ideally, `-Zminimal-versions` would pick out those versions, but lots of crates don't correctly specify minimum depdendency versions. As a result, our transitive dependencies resolve to matching-but-non-functional versions.