Nonchalant Guidance

About Me·RSS·My Projects·LinkedIn


Added on: Friday, 25 August, 2023 | Updated on: Monday, 21 October, 2024

GSoC 2023: Final Post

Hello there! This is the last in series of blogposts detailing the all the work I have been doing for the Tor Project as part of Google Summer of Code 2023.

This will serve as a complete summary of the work I did, the things I learned along the way, and the work that remains.

Brief Intro on My Project

The project I was selected for is titled “Arti API exploration to build example tools”.

Confused? Let’s break it down.

So, it exports some crates that other developers can use in their Rust projects, and has some documentation on them, including some basic demonstration code snippets that you can follow along with at home.

My goal is to build my sample programs and document any difficulties that come up.

In this way, the project can get valuable feedback from an outsider who doesn’t have much knowledge of the codebase and the way the Arti proxy does things.

The Sample Projects

The sample projects I ended up creating were:

This could also theoretically be distributed to people living in countries where the normal distribution methods for the Tor Browser may be banned or blocked by authorities.

This project required exposing some APIs or attributes from Arti in order to create channels (which are direct, encrypted connections that only carry Tor protocol messages) to each bridge we need to test.

This project necessitated adding basic APIs to set up an obfs4 subprocess in server mode. I had to look at pt-spec.txt, which defines the spec for how Tor/Arti and pluggable transports interact with each other, and then modify the tor-ptmgr crate to perform the required operations. (more on this later)

Note that these projects have been reviewed multiple times by gabi and nickm (aka Nick, who was my mentor this year). Many capabilities, docs, code restructurings etc are a result of their suggestions. Thank you very much!

Bugs Found

Now, part of the reason why these sample projects were being created is to see what an external developer, like me, who has no prior experience or knowledge of Arti or its internals, would be able to accomplish using these APIs and what hurdles would they run into during the course of creating the sample projects.

Some of those hurdles are documented below in the form of bug reports I filed:

There are some open issues I filed as well:

Merge Requests Created

I also ended up creating and getting many Merge Requests merged into Arti. These gradually transitioned from trivial to non-trivial. Some of these were code or doc fixes for bugs I filed myself, while others were feature requests for exposing a capability that a sample project would require.

These include:

The MR, after being discussed and reviewed thoroughly by Diziet, would end up being merged, adding the fix as well as test cases which will help catch this bug if there is a regression in the future. (Thank you Diziet for all the suggestions!)

This work enables the pt-proxy sample project to work. It is the largest MR I’ve made to Arti to date, and involved the most work to write.

The following two MRs were merged but their work was later undone as it was deemed unnecessary:

Work Left

All that is currently left is to get final reviews from the Arti developers and open an MR to merge my work, which currently lives in a dedicated repo, into the main Arti repo.

After some discussion with the developers, it was decided that these example projects will exist in a top-level examples/ directory.

My Experience

I had an overwhelmingly positive experience in GSoC this year. Here’s a brief, non-exhaustive list why:

Since I only picked up Rust in the near past, I’ve ended up learning a lot of advanced Rust-isms from working on this project as well.

This didn’t mean I only popped up when things went wrong, though; I always made sure to update Nick about my plans for the week every Monday, which gave him the chance to suggest changes if my approach was flawed and to keep track of my progress.

Conclusion

I am extremely thankful for this opportunity, and I hope that my work has been helpful to Arti and the Tor Project. I’ve ended up learning a lot, and it is in no small part due to the help I’ve gotten from all the developers I ended up interacting with (special mentions to nickm, Diziet, gabi, trinity, arma, shelikhoo, eta, ahf, and meskio)

I’ve gained a ton of confidence in developing and contributing to open source projects of varying scales, and I hope to continue the good work started and outlined here in the future as well.


This website was made using Markdown, Pandoc, and a custom program to automatically add headers and footers (including this one) to any document that’s published here.

Copyright © 2024 Saksham Mittal. All rights reserved. Unless otherwise stated, all content on this website is licensed under the CC BY-SA 4.0 International License