Git 2.55-rc0 Flips Rust On By Default, Setting Up The 3.0 Mandate
#Dev

Git 2.55-rc0 Flips Rust On By Default, Setting Up The 3.0 Mandate

Chips Reporter
4 min read

The first release candidate for Git 2.55 makes Rust support a default build assumption rather than an opt-in flag, replacing WITH_RUST with NO_RUST and setting Meson's rust option to enabled. The change is a staging step toward Git 3.0, where Rust becomes mandatory with no way to disable it.

Git 2.55-rc0 arrived today as the first tagged test build of the next release of the distributed version control system, and the headline change is structural rather than feature-facing: Rust support now compiles by default. The shift inverts the build-time posture that has held since Rust code first entered the tree, moving the language from explicit opt-in to assumed-present. You can read the details in the Git 2.55-rc0 announcement and track the project at git-scm.com.

Twitter image

What actually changed in the build system

Up to this point, pulling Rust into a Git build required a deliberate switch. With the standard Makefile you set WITH_RUST, and with the Meson build you toggled the rust option on. Neither was the default, so a vanilla make produced a Rust-free binary.

Git 2.55 reverses both defaults. The Makefile no longer recognizes WITH_RUST as the relevant lever; instead it introduces NO_RUST, which a packager or distributor sets to keep the Rust code out of the build. On the Meson side, the rust option now ships set to enabled, and anyone wanting the old behavior flips it to disabled. The net effect is the same in both build paths: Rust is present unless you go out of your way to remove it.

That opt-out escape hatch is the part worth measuring. In 2.55 it still exists in both build systems, which gives distributions, embedded packagers, and platforms with thin or absent Rust toolchains a clean way to produce a C-only Git for at least one more release cycle.

The 3.0 deadline behind the change

The opt-out is temporary by design. The project has signaled that Git 3.0 is where Rust becomes unconditional: no NO_RUST, no disabled Meson option, no C-only build target. Read in that light, 2.55 is a transition release. It normalizes Rust-present as the baseline configuration for the bulk of users while still leaving an exit for the holdouts, so that by the time 3.0 lands the default has already been the norm for a full version.

That sequencing matters for anyone maintaining a packaging pipeline. The cost of a mandatory Rust toolchain does not hit at 3.0 by surprise; it hits now as a default that has to be actively declined, and the decline path disappears at the next major version. Distributions that build Git for architectures where Rust support is incomplete or where the toolchain is awkward to provision have this release window to plan migration, not the 3.0 window.

{{IMAGE:2}}

Groundwork: xdiff and the incremental rewrite

Alongside the default flip, 2.55 carries preparation work for moving the xdiff code to Rust. xdiff is the diffing engine underneath much of Git's day-to-day behavior, including the output of git diff and the merge machinery, so it is a meaningful target rather than a peripheral one.

The approach here is incremental rather than wholesale. Rather than rewriting Git in Rust in one motion, the project is laying the structural pieces that let individual subsystems migrate while the surrounding C code stays in place. Enabling Rust by default and prepping xdiff are two halves of the same strategy: guarantee the toolchain is present for nearly everyone, then start relocating performance-sensitive and memory-sensitive code paths into a language with stronger memory-safety guarantees.

This mirrors a pattern visible across foundational systems software, from the Linux kernel admitting Rust drivers to numerous userspace tools introducing Rust components behind feature flags before promoting them to defaults. The flag-then-default-then-mandatory progression is the conservative version of that migration, and Git is following it closely.

The rest of the release

Beyond the Rust posture, 2.55 has been accumulating the usual mix of optimizations, bug fixes, and smaller enhancements spread across various subcommands. Those changes are incremental and do not redefine workflows, but they are the substance of what most users will actually notice, since the Rust default is invisible at runtime: a Rust-enabled Git behaves identically to a C-only one from the command line. The difference is entirely in how the binary was built and what it will require to build in the future.

For end users on prebuilt packages, 2.55-rc0 changes nothing about how Git is used. For the people who compile and distribute it, this release candidate is the moment to confirm that Rust toolchains are in place across every target, because the window for shipping without one is now explicitly counted in releases. Testing feedback on the release candidate feeds into the final 2.55, so packagers hitting toolchain gaps have a direct channel to report them before the version ships.

Comments

Loading comments...