Разработчики анонимной сети Tor представили выпуск проекта Arti 0.0.3, развивающего Tor-клиент, написанный на языке Rust. Проект имеет статус экспериментальной разработки, отстаёт от функциональности от основного клиента Tor на языке Си и пока не готов полноценно заменить его. В марте ожидается выпуск 0.1.0, который позиционируется как первый бета-выпуск проекта, а осенью выпуск 1.0 со стабилизацией API, CLI и настроек, который будет пригоден для начального использования обычными пользователями. В более отдалённом будущем, когда код на Rust достигнет уровня, способного полностью заменить вариант на Си, разработчики намерены придать Arti статус основной реализации Tor и прекратить сопровождение реализации на Си.
В отличие от реализации на Си, которая вначале была спроектирована как SOCKS-прокси, а уже потом подогнана под другие потребности, Arti изначально развивается в форме модульной встраиваемой библиотеки, которую смогут использовать различные приложения. Кроме того, при разработке нового проекта учитывается весь прошлый опыт разработки Tor, что позволит избежать известных архитектурных проблем, сделать проект более модульным и эффективным. Код распространяется под лицензиями Apache 2.0 и MIT.
В качестве причин переписывания Tor на Rust называется желание добиться более высокого уровня защищённости кода за счёт использования языка, обеспечивающего безопасную работу с памятью. По оценке разработчиков Tor, как минимум половина всех отслеживаемых проектом уязвимостей будет исключена в реализации на Rust, если в коде не используются блоки “unsafe”. Rust также даст возможность добиться более высокой скорости разработки, чем при использовании Си, за счёт выразительности языка и строгих гарантий, позволяющих не тратить время на двойные проверки и написание лишнего кода.
Из изменений в выпуске 0.0.3 отмечается полный пересмотр системы конфигурации и связанного с ней API. Изменение позволило менять настройки из Rust на лету во время работы клиента Tor. Также добавлена новая система для упреждающего построения цепочек (preemptive circuit construction), учитывающая используемые ранее порты для упреждающего создания цепочек, которые вероятно понадобятся в будущем.