-
Notifications
You must be signed in to change notification settings - Fork 274
Update Rust version to 1.75 #1611
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
35fabe9
to
1ddd380
Compare
rust-toolchain.toml
Outdated
@@ -1,4 +1,4 @@ | |||
[toolchain] | |||
channel = "1.63" | |||
channel = "1.74" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The one open question on this: should we use "stable"
here instead, and only choose to pin a specific version if Rust releases a change that would affect our relationship to supported versions (#1619)?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think keeping it set to a specific version is useful for reproducibility later on. That said, we can likely be more liberal with updating when we don't have issues with compatibility.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM! It would be good to know (and probably document somewhere) the specific glibc
versions that we now require, which is the ultimate compatibility question that will determine which versions of Linux we support. I don't have an easy way to test that at the moment, but with access to a linux machine I remember there being a command that would list out the specific dynamic library dependencies of the built Binary, so it should be doable using the artifacts from CI.
docker run -it --platform linux/amd64 --volume ~/Downloads:/downloads ubuntu:latest
apt-get update
apt-get install binutils -y
cd /downloads
tar xf volta-linux.tar
objdump -T ./volta | grep GLIBC | sed 's/.*GLIBC_\([.0-9]*\).*/\1/g' | sort -Vu Output:
Or with ldd -v ./volta
So I suppose 2.15 is the min version? But this doesn't match what Rust docs say |
I suppose you might remain compatible with older glibc as long as you only use a subset of the standard library? But really not sure. If that's the case, you'd have to check the min glibc version on CI, or just say that you support [whatever glibc your version of Rust supports] and make no promises about compatibility with earlier glibc versions. |
Regarding semver — I don't feel like bumping the minimum supported version is a semver violation, because eg. a distro maintainer might build your binary with musl, or even with an alternative Rust compiler, and it will work fine on older machines. This said, there's a long long argument about it at semver/semver#716, so evidently there are people who think any breaking change counts as breaking the API. |
Unrelatedly, feel free to ping me on discord ( |
We originally pinned to 1.63 because that was the last version before Rust dropped support for older versions of `glibc` [in Rust 1.64][blog]. However, the relevant operating systems we were maintaining support for at that time (CentOS/RHEL 6) have now been end-of-life for three full years, so it seems reasonable to update to a more current version. Since no other changes to the `glibc` support have happened in the interval, we can safely update to the most current version of Rust. As part of this, update the RHEL 7 Dockerfile setup for building on Rust 1.75, including using updated versions of gcc and binutils. [blog]: https://blog.rust-lang.org/2022/08/01/Increasing-glibc-kernel-requirements.html Co-authored-by: Rob Jackson <[email protected]>
1ddd380
to
b87c82e
Compare
Thanks so much for that info and input, @neongreen! We have some discussion over on #1619 for why we're inclined to treat the change as breaking. The TL;DR is that in practice, the change in MSRV will break any Fedora/RHEL users who rely on the pre-Rust 1.64 glibc version (or other distros), and who are committed to staying on those unsupported distro versions for whatever reason. Given SemVer is primarily a matter of keeping whatever contract we establish, we can ultimately do what we want here, but it seems best to just do the clearest thing in this case: flag it as a small breaking change. Especially since this is a binary, not a library, major versions are mostly free. |
We originally pinned to 1.63 because that was the last version before Rust dropped support for older versions of
glibc
in Rust 1.64. However, the relevant operating systems we were maintaining support for at that time (CentOS/RHEL 6) have now been end-of-life for three full years, so it seems reasonable to update to a more current version. Since no other changes to theglibc
support have happened in the interval, we can safely update to the most current version of Rust.As part of this, update the RHEL 7 Dockerfile setup for building on Rust 1.74, including using updated versions of gcc and binutils.
For discussion: is this breaking? I do not think we have written down our SemVer contract for things like this anywhere. It will break anyone who tries to update to what will presumably be Volta 1.2.0, so it may be appropriate (and is certainly simplest) to make it a 2.0.0 release, while noting that the only breakage is support for older versions.