Rust in Tor
== What & why ==
We are currently investigating integrating Rust as a first-class language in
Tor. We decided upon Rust due to the benefits of memory safety and the ability
to directly integrate Rust and C.
To read more about how and why this started, see our meeting notes from the
2017 meeting in Amsterdam.
In Tor 0.3.3.x, we include a Rust implementation of our "protover" module. It is not enabled by default, but we encourage people to try it.
Starting with Tor 0.3.4.x, we will accept Rust-only features, if they can be safely merged to the network with only some Tor instances supporting them.
We will continue to build out our modularity efforts, and our Rust infrastructure, to make it easier to write modules in rust and replace parts of Tor.
We encourage ALL downstream packagers to try building Tor with Rust enabled, to help identify any compatibility or usability issues as soon as possible.
== Future steps ==
At some point in the future, when we judge that our Rust support is sufficiently mature, we will announce a release and release date after which Rust will be required. We have not picked such a release or date yet.
=== What we are currently working on ===
- Understand alignment between Rust and Tor supported platforms. This is a list of which platforms we aim to support, it would be helpful to understand the intersection with Rust. (#22771 (moved)
- Adding automated tooling for code quality tools. (#22156 (moved))
- Build Tor with Rust for Windows. (#22839 (moved))
- Investigate the reproducibility of Rust binaries. (#22769 (moved))
- Implementing existing submodules in Rust as a proof of concept. Two that are currently in progress are consdiff (#24609 (moved)) and protover (#22840 (moved)).
- Add Rust-enabled build to the Tor CI. (#22636 (moved) and #22768 (moved))
== Interested in helping out? ==
== Coding Standards ==