Who should read this !
If you are a Rust engineer who has just been handed a concurrent C++ codebase β a network service, an ingestion daemon, a gateway, a media pipeline β and told "we're moving this to Rust", this is the post I wish someone had handed me the first time it happened to me.
A caveat before anything else: this is not the story of one migration. It's a composite of a few I've done or consulted on over the last several years. The systems were different (an edge proxy, a log ingestion daemon, something broker-shaped), the teams were different, and the outcomes were different. The incidents I describe happened, but I've deliberately blurred which codebase each one came from, and I've rounded the numbers. Where I generalise, treat it as pattern-matching over a small sample, not a law.
The thesis I'll keep coming back to is this: in a concurrent C++ codebase, the concurrency is the migration. Types port mechanically. Serialization ports mechanically.β¦