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.

ACToR: translator vs. discriminator agents

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.

Reboot: feature reduction and translation phases

Reboot: feature reduction and translation diffs