Rust 5 min read

Everyone's Moving to Rust. These Teams Went to Zig Instead.

For the past few years, systems programming had one commandment: if you’re on C or C++, migrate to Rust. Memory safety, a powerful type system, a thriving community — Rust looked less like a choice and more like the inevitable next standard. So it’s worth paying attention when a handful of teams start driving the other way, moving from Rust to Zig. When everyone sprints in one direction, the people going the opposite way usually have a reason.

One honest note before we dig in. This isn’t breaking news. There wasn’t a fresh, viral debate about this in the last month. What follows is a read on discussions and real-world cases that have been quietly accumulating in developer communities over the past year or two. If you came for a hot scoop, this is more of a considered take.

Why Rust Became “The Answer”

To understand the pushback, you have to understand the appeal. Rust’s signature weapon is its ownership system. At compile time, the compiler tracks who owns which piece of memory and blocks invalid access before your code ever runs.

Here’s the simplest way to put it. C hands you a gun and says good luck. Rust hands you the same gun with the safety on, and if you break the rules, the trigger won’t even pull. That design eliminates entire classes of memory bugs — the kind that are hardest to catch in production and that account for a huge share of security vulnerabilities. Microsoft has said roughly 70% of its historical CVEs trace back to memory safety issues, which is exactly the problem Rust attacks at the root.

That’s why Microsoft, Google, and Amazon raced to adopt it. Rust code even started landing in the Linux kernel. At that point it looks like case closed, Rust wins. And that’s precisely where some teams raised their hands.

Why They Left

The complaints from teams that switched to Zig boil down to three things.

First, compile times. To guarantee safety, Rust’s compiler does an enormous amount of verification work. The catch is that as your project grows, builds slow down. Changing one line and waiting tens of seconds — sometimes minutes — to see the result quietly erodes your focus and your flow. Zig, by most accounts, is meaningfully faster here.

Second, complexity. Ownership and lifetimes are powerful, but the learning curve is steep. “Fighting the borrow checker” is a community meme for a reason. There’s a moment where the time you spend reshuffling code to satisfy the compiler exceeds the time you spend building the feature you actually wanted. For some teams, that tax was simply too high.

Third, C interop. Zig was designed to pull in C code almost directly, no separate bindings required. For a project sitting on a large pile of existing C, that’s decisive. Some teams even use Zig purely as a drop-in C compiler.

What Makes Zig Different

So what kind of language is Zig? The shortest description is a modern rewrite of C. It doesn’t enforce safety through ownership the way Rust does. Instead, it hands control back to the developer while forcing the dangerous parts out into the open.

The clearest example is memory allocation. In Zig, any function that allocates memory must take an allocator as an argument. Where memory gets used is spelled out right there in the code. “No hidden control flow” is a core Zig philosophy — read the code, and you see what actually happens.

There’s a price, of course. Zig hands the memory errors Rust caught for you automatically back to the developer. You give up some of the guardrails in exchange for simplicity, speed, and transparency. And the key word here is exchange. This isn’t a better choice. It’s a different one.

The Real Lesson: There’s No One Right Language

The takeaway isn’t “Zig beats Rust.” If anything, it’s the opposite.

Look closely at the teams that left Rust, and nearly all of them decided based on their own situation. Small team, fast iteration matters, a big existing C codebase, members already fluent in systems programming. Under those conditions, Zig’s simplicity can outweigh Rust’s guardrails.

Flip the conditions and the math flips too. Large teams, a steady stream of new hires, a domain where security is existential — there, Rust’s strictness is a gift. Having the compiler block mistakes is far cheaper than catching them in code review. That’s the exact reason big companies picked Rust in the first place.

And never underestimate the cost of migration itself. Rewriting working code in another language is a serious risk. You introduce new bugs, your team spends time learning the new tools, and feature development stalls while it happens. Plenty of teams have jumped into a rewrite for reasons no deeper than “it’s slow” or “it’s complex” and regretted it.

The Takeaway

Tech communities love to fight over what’s “correct.” But the teams that went from Rust to Zig are sending a clearer message: pick tools by context, not by trend. Following the crowd is no reason on its own. Neither is deliberately going against it.

So how is your team choosing its languages and tools right now? Be honest — is “everyone’s using it lately” doing more of the work than you’d like? The question worth asking isn’t “is this the best language.” It’s “is this the right language for our problem.”

Rust Zig Programming Languages Systems Programming Language Migration

Comments

    Loading comments...