Rust 1.96.1 是一个小版本修复发布,但它触碰的是开发者每天都会遇到的两个实际问题:cargo 拉取依赖时的网络可靠性,以及内置 libssh2 带来的安全风险。对于 CI、容器构建、企业内网代理和供应链安全要求较高的团队,这类补丁版本不应该被当成“可有可无”。
这次修了什么
Rust 1.96.1 主要包含三类修复:
Cargo的 HTTP 客户端缺少重试和超时机制的问题。- MIR 优化阶段可能触发的编译错误。
- 影响编译进
Cargo的libssh2的三个 CVE:CVE-2025-15661、CVE-2026-55199、CVE-2026-55200。
这意味着升级价值并不只在语言层面。哪怕你的业务代码没有用到新语法,构建工具链本身的行为也发生了重要修正。
Cargo 的重试和超时为什么重要
很多团队对 cargo build 的印象是:本地快,CI 偶尔玄学失败。常见原因包括:
- 访问 crates registry 时网络抖动。
- 公司代理、缓存服务或镜像源偶尔超时。
- 容器构建环境没有稳定连接。
- CI 并发任务较多,外部 HTTP 请求容易排队或失败。
如果 HTTP 客户端缺少合理的重试和超时,失败模式会变得很难判断:有时卡住,有时报错,有时重新跑一次就好了。Rust 1.96.1 修复这一类问题后,cargo 在面对不稳定网络时应该更可预测。
这并不代表你可以完全忽略网络治理。更稳妥的做法是:升级工具链,同时为 CI 配置缓存和可观测的超时策略。
MIR 优化修复:小概率问题也值得尽快合入
MIR 是 Rust 编译器内部的中间表示。MIR 优化阶段出现编译错误,通常不会影响所有项目,但一旦踩中,开发者很容易误判成“代码写错了”或“某个依赖坏了”。
补丁版本修复这类问题的意义在于降低编译器行为的不确定性。尤其是以下项目,更应该尽快验证升级:
- 使用较复杂泛型、trait bound 或宏展开的库。
- CI 中启用了严格构建矩阵的项目。
- 对编译器版本固定较久、准备批量升级的 workspace。
- 发布 crate 或构建基础镜像的团队。
安全修复:Cargo 也在你的供应链边界内
这次还修复了影响 libssh2 的三个 CVE,而 libssh2 已经被编译到 Cargo 中。这里容易被忽视的一点是:供应链安全不只包括你的应用依赖,也包括构建工具本身。
如果你的构建流程涉及 Git、SSH、私有仓库、依赖拉取或构建缓存,那么 cargo 的安全补丁就属于构建基础设施的一部分。升级 Rust 工具链,本质上也是升级开发与交付链路的一个节点。
可以这样检查和升级
下面是一组可以直接复制的命令,用于确认当前版本、升级稳定版工具链,并在项目中做一次基础验证。
# 查看当前 Rust 与 Cargo 版本
rustc --version
cargo --version
# 升级 stable 工具链
rustup update stable
# 如果项目固定使用 stable,确认当前目录使用的工具链
rustup show active-toolchain
# 在项目根目录验证构建与测试
cargo fetch
cargo build --locked
cargo test --locked
如果你的项目使用 rust-toolchain.toml 固定版本,可以按团队节奏改成新的补丁版本。下面是一个可改造的示例:
[toolchain]
channel = "1.96.1"
components = ["rustfmt", "clippy"]
profile = "default"
改完后建议在 CI 里跑一次完整验证:
rustup show active-toolchain
cargo fmt --check
cargo clippy --locked --all-targets -- -D warnings
cargo test --locked
如果你维护的是 Docker 镜像,也可以把基础镜像固定到补丁版本,避免不同构建节点拿到不一致的工具链:
FROM rust:1.96.1
WORKDIR /app
COPY . .
RUN cargo build --locked --release
升级建议:优先处理构建链路
这次发布不需要你重写业务代码,但值得进入常规补丁升级流程。建议按下面的顺序处理:
- 本地或临时 CI 分支先升级
rustupstable 工具链。 - 对使用
rust-toolchain.toml的仓库显式更新到1.96.1。 - 运行
cargo fetch、cargo build --locked、cargo test --locked验证依赖解析和构建行为。 - 对发布镜像、构建镜像、CI runner 镜像同步升级。
- 如果团队有安全扫描或 SBOM 流程,把构建工具链版本也纳入记录。
补丁版本最适合快速、低风险地推进。Rust 1.96.1 的重点不是新功能,而是让 Cargo 更可靠、让编译器少踩坑,并补上构建工具链里的安全缺口。