** DRAFT DRAFT DRAFT **
** THIS IS NOT A FINAL POLICY OR PLAN **
It is an exploratory write-up, examining how we could migrate from C to Rust, and what we'd do at each phase
Phase 1: Exploratory work (DONE)
In this phase the goal was to see whether we could write a worthwhile Tor client in Rust, and whether we'd be interested in continuing with it afterwards.
We are past this stage: Our longterm goal is to move away from C development into Rust. Eventually, we want to stop developing the C tor codebase entirely, and just work on Rust. This is the plan for how we get there.
Phase 2: Arti client is developed (IN PROGRESS)
We focus as much effort as possible on improving Arti as a Tor client. Once it is secure (around 0.1.0 or 1.0.0), we encourage people to use it.
Once it is secure and has most of the critical features people want (at least onion services and anticensorship support, so some time between 1.2.0 and 2.0.0), we deprecate C tor and move to phase 3.
During this phase, we will try not to do too much "new client work" in C tor, since we expect that such work will become deprecated in Phase 3. We will also try to defer work that would require us to develop new features in both Rust and C tor clients.
Starts: Now. Ends: Between Arti 1.2.0 and Arti 2.0.0. So 2-3 years maybe? Arti work: Client development C Tor work: All development. Supported: C Tor (client, relay). Eventually Arti (client) Recommended: C Tor (client, relay). Eventually Arti (client). Avoid if possible: New client features that have to be implemented in C tor.
Phase 3: Arti is the official Client; C tor is recommended for relays only.
This phase begins once Arti is a secure feature-complete Tor client-- somewhere between Arti 1.2.0 and 2.0.0 most likely.
During this phase, the C tor implementation will be deprecated for client use, but not for relay use. We'll continue to fix serious bugs affecting clients who use C tor, according to our long-term support policy, but all new client-only features will be developed in Rust.
During this phase we will also try to make the Arti codebase able to run as a Tor relay and/or authority. The development goal will be to reach the point where a pure-Rust Tor relay is as secure, performant, and full-featured as its C counterpart. (We do not yet ave a roadmap or milestones for this work.) While that is happening, we try to avoid adding any new relay-side features to Tor that we would have to implement both in Rust and C.
Starts: Between Arti 1.2.0 and Arti 2.0.0. Ends: "Arti relay support is better than C tor." No idea how long that takes. Arti work: Client development, Relay development. C Tor work: Relay development; critical client bugfixes. Supported: C Tor (client, relay). Arti Client. Eventually, Arti Relay. Recommended: C Tor (Relay). Arti Client. Eventually, Arti Relay. Avoid completely: New client features in C tor. Avoid if possible: New relay features that have to be implemented in C tor.
Variations: If this phase takes a long time, we might remove the C client support part way through.
Phase 4: C tor deprecated entirely
We will entire this phase once we believe that our Rust relay code is a better choice for relay operators than our C relay code. When this occurs, we will declare an official end-of-life plan for our C code. We will continue to support it with critical bugfixes for a suitable period, but no longer.
Early in this phase, all directory authorities move to Rust.
This period ends once we are no longer supporting C tor relay or client code at all.
Starts: When Arti is a better relay. Ends: After 1-2 years of LTS OR when it is no longer feasible to support C tor on the network, whichever comes first. Arti work: All development C Tor work: Critical bugfixes only. Supported: C Tor (client, relay). Arti Client and Relay. Recommended: Arti Avoid completely: New features in C tor.
Phase 5: No more C
Once the final LTS C tor release is out of its support window, we declare the C tor project done, and Arti is our supported implementation.
Starts: When all C implementations reach EOL. Ends: --- Arti work: All C Tor work: None Supported: Arti only. Recommended: Arti only. Avoid completely: C.