C to Rust
Automatically translate C programs to Rust
We have ran a user study against 30+ participants on translating C programs to Rust (around 500 LoC). Our findings are published in NDSS 2025, as a paper titled Translating C To Rust: Lessons from a User Study.
Building on these lessons, we sidestep limitations of the c2rust-based approach and explore agent-based ways of automatically producing safe Rust. This has led to two recent works.
ACToR: Adversarial Agent Collaboration
ACToR closes the correctness gap on unseen inputs by pitting a translator agent against a discriminator agent. Inspired by GANs, the discriminator builds a differential fuzzer over the C and Rust binaries to find inputs where the translation diverges, and these failing tests drive the translator’s next refinement. Across 63 real-world command-line C utilities, ACToR reaches over 90% test pass rate with zero human intervention.

Reboot: Translating Interpreters via Feature Reduction
Reboot is a mostly-automatic technique that translates real-world language interpreters from C to safe Rust. Its key idea, feature reduction, decomposes the translation into a sequence of milestones — each a complete, testable program — starting from the simplest version and incrementally restoring features. A multi-agent architecture keeps these long-running workflows on track. Reboot translated six interpreters (6k–23k LoC) with only 1–11 brief user interventions, and a case study on mujs shows memory vulnerabilities in C are eliminated in the safe Rust output.

