Sponsor 31
Project Title - Modularization work
Project Period: December 1, 2018 - November 30, 2019
Project !Goals/Activities
The key deliverables of the modularization project are:
- Refactored architecture for how Tor modules should communicate, designed to reduce module complexity and maintenance burden.
- Architectural documentation for how Tor modules work with one another, covering both the actuality and the refactored architecture.
- New architecture for several key Tor modules.
- Improved testing for those modules.
- Improved documentation for those modules.
Milestones
- Determine how to best refactor modules to make them more resilient,segregated, and automatically testable. (288 hours) -- March 2019
1.1. Identify pieces that we have to refactor. (96 hours)
1.2. Draft initial design for each piece. (192 hours)
- Identify which parts of the codebase are most important to refactor first. (256 hours) -- April and August 2019
2.1. Discuss which parts to refactor first. (16 hours)
2.2. Research and discuss automated tooling. (48 hours)
2.3. Design tooling as needed. (48 hours)
2.4. Repeat the same tasks 2.1, 2.2 and 2.3 after milestone 4 is completed. (144 hours)
- Revise the system of interactions between modules to improve usability and maintainability. (88 hours) -- May 2019
3.1. Review publisher/subscriber design that Tor uses. (16 hours)
3.2. Implement refactoring. (72 hours)
- Create and deploy plan to incorporate refactored modules. (184 hours) -- August 2019
4.1. For each module and each architectural change, form a plan to apply that change to that module. This plan should include increased testing, if the module's test coverage is not already high. (160 hours)
4.2. For each plan formed in 4.1, deploy that plan. (24 hours)
- Create documentation for how Tor modules work with one another with both old and new architecture. (432 hours) -- December 2018
5.1. Update module documentation and incorporate into Tor. (96 hours)
5.2. Document existing refactoring. (144 hours)
5.3. Document new elements. (144 hours)
5.4. For modules we are not refactoring, document important interactions. (48 hours)
Teams Involved: Network
Project Tracking
Refactoring cross-module communications
#28226 (moved) Backend for an async publish-subcribe messaging system for cross-module communications (Tor 0.4.1)
Coding best practices
#29221 (moved) Tooling to track code-style/best-practices violations #29219 (moved) Write guidelines for Tor coding best practices #29220 (moved) Update review guidelines for practices #29223 (moved) List canonical abbreviations to use in Tor functions and identifiers
Refactoring modules
#29201 (moved) Tor bootstrap hangs when offline - Split up control.c #29209 (moved) Reduce visibility of more data type internals #29218 (moved) Revise "handles" to be opaque, safe. Document standard usage #29224 (moved) Abstractions and best practices for disabled modules #29217 (moved) Script to add new tor files and modules in rust and/or C #29227 (moved) Audit Tor roles (relay, bridge, etc) and remove needless dependencies where possible
Documentation
#29216 (moved) Document how to make new files/modules in Tor
Progress
TicketQuery(sponsor=Sponsor31-must,format=progress)
- In the network team: [https://dip.torproject.org/torproject/core/tor/boards?scope=all&utf8=%E2%9C%93&state=opened&label_name[]=Sponsor%2031 Kanban Board] filtered by sponsor 31.
[[TicketQuery(status=!closed,sponsor=~Sponsor31-must,status=!closed,order=id,status=!closed,format=table,col=id|summary|status|owner|keywords|priority,group=sponsor)]]
[[TicketQuery(status=!closed,sponsor=~Sponsor31-can,status=!closed,order=id,status=!closed,format=table,col=id|summary|status|owner|keywords|priority,group=sponsor)]]
Project Completion
https://blog.torproject.org/modularizing-key-aspects-tor-network-moss