@@ -0,0 +1,68 @@
2+title = "UF Apprenticeship Grant: Symmetric Routing"
6+grant_type = [ "Apprenticeship" ]
7+grant_category = [ "Core Dev" ]
11+description = "Change Urbit's peer discovery, routing, and packet forwarding to use symmetric routing"
13+mentor = "~rovnys-ricfer"
17+work_request_link = "https://airtable.com/shr4qt9t9kz7RaOIa?prefill_Grant+ID=B0162&prefill_Grant+Name=Symmetric%20Routing"
20+### Project Description
22+This project will change Urbit's peer discovery, routing, and packet forwarding to use "symmetric routing". A rough spec can be found [here](https://gist.github.com/belisarius222/7ec6f40b3a498c38e696139d8dbd8b10). "Symmetric" means that every response packet will retrace the same steps through the network as the request packet that triggered it. This will simplify routing in a few different ways.
24+Ideally this project would be done by two engineers, but one experienced C programmer could also do it. The apprentices will write this code themselves, not as part of a larger team. It affects both Vere and the Arvo kernel. ~rovnys-ricfer, who wrote the symmetric routing spec and Urbit's previous routing system, will mentor the engineers.
28+- New Ames I/O driver in Vere that implements symmetric routing
29+- Modified code in Arvo's Ames vane to use symmetric routing
30+- Aqua testing harness and peer discovery tests
31+ -Code in Arvo and Vere to handle upgrading from the old protocol to this one
35+- A new ship of any rank can join the network
36+- Any ship can make a request to any other ship, and the response will be routed back
37+- A route tightens (has fewer hops) with each new request and response
38+- A route loosens when a tighter route times out
39+- A ship still has connectivity behind both symmetric and asymmetric NAT
40+- Stars properly handle packet forwarding
44+- Proficiency in C and Hoon
45+- Basic understanding of the Ames network protocol and packet format
47+### Educational Outcomes for the Apprentice
49+The apprentice will learn about:
54+- Bit twiddling in Hoon and C
55+- The Arvo/Vere interface
58+### Responsibilities of the Mentor
60+- Clarify spec and implementation plan
61+- Answer questions about existing code
62+- Code review: style, correctness, performance, patterns and anti-patterns
63+- Help with upgrade and deployment strategy
65+### Duration and Compensation
67+Expected duration is two months.
68+1 star paid at completion of apprenticeship