@@ -0,0 +1,68 @@
1++++
2+title = "UF Apprenticeship Grant: Symmetric Routing"
3+date = "2022-05-04"
4+
5+[taxonomies]
6+grant_type = [ "Apprenticeship" ]
7+grant_category = [ "Core Dev" ]
8+
9+[extra]
10+image = ""
11+description = "Change Urbit's peer discovery, routing, and packet forwarding to use symmetric routing"
12+reward = "1 star"
13+mentor = "~rovnys-ricfer"
14+assignee = ""
15+completed = false
16+canceled = false
17+work_request_link = "https://airtable.com/shr4qt9t9kz7RaOIa?prefill_Grant+ID=B0162&prefill_Grant+Name=Symmetric%20Routing"
18++++
19+
20+### Project Description
21+
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.
23+
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.
25+
26+## Deliverables
27+
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
32+
33+## User Stories
34+
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
41+
42+### Prerequisites
43+
44+- Proficiency in C and Hoon
45+- Basic understanding of the Ames network protocol and packet format
46+
47+### Educational Outcomes for the Apprentice
48+
49+The apprentice will learn about:
50+
51+- Peer discovery
52+- NAT traversal
53+- Firewall pinholes
54+- Bit twiddling in Hoon and C
55+- The Arvo/Vere interface
56+- Vane internals
57+
58+### Responsibilities of the Mentor
59+
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
64+
65+### Duration and Compensation
66+
67+Expected duration is two months.
68+1 star paid at completion of apprenticeship