aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormarshall <stmr@umich.edu>2023-08-25 14:48:06 -0400
committermarshall <stmr@umich.edu>2023-08-25 14:48:06 -0400
commit2fcf427bf04bba19e491c9bf6676c9ee1ab2068b (patch)
tree06d3a8644075fe444976f4a3202d93f84c467778
parent00d474c5c90a3dd460f1f17ba41f9a78c557d6dd (diff)
downloadwww-2fcf427bf04bba19e491c9bf6676c9ee1ab2068b.tar.gz
www-2fcf427bf04bba19e491c9bf6676c9ee1ab2068b.zip
quic writeup: add more
-rw-r--r--template/news/2023-08-GSoC-QUIC.html.j234
1 files changed, 15 insertions, 19 deletions
diff --git a/template/news/2023-08-GSoC-QUIC.html.j2 b/template/news/2023-08-GSoC-QUIC.html.j2
index b1b659cc..a88e63a9 100644
--- a/template/news/2023-08-GSoC-QUIC.html.j2
+++ b/template/news/2023-08-GSoC-QUIC.html.j2
@@ -3,37 +3,33 @@
3<main id="maincontent"> 3<main id="maincontent">
4 <h1>GSoC Work Product: GNUnet over QUIC</h1> 4 <h1>GSoC Work Product: GNUnet over QUIC</h1>
5<p> 5<p>
6 FIXME add an introduction. Possibly simply move goals up here. 6 Hi, my name is Marshall and throughout the summer of 2023 I worked on developing a new communicator for the GNUnet transport service. I learned a lot about GNUnet through my development experience. Here are some details about the journey!
7</p> 7</p>
8<h2>A short description of the goals of the project.</h2> 8<h2>Goals of the Project.</h2>
9<p> 9<p>
10 The goal of this project was to develop a new transport, QUIC, for the Transport Next Generation (TNG) service. 10 The goal of this project was to develop a new transport, QUIC, for the Transport Next Generation (TNG) service. TNG is a successor to the previous transport plugins and will be running in the fall 2023 GNUnet release. At the time of writing, there currently only exists transports over TCP, UDP, and UNIX sockets. I chose to implement a QUIC transport communicator due to the rising popularity and speed of this protocol.
11</p> 11</p>
12<h2>What you did (also include quiche packaging).</h2> 12<h2>What I completed.</h2>
13<p> 13<p>
14First, I had to decide on a library that can process QUIC packets and would be available to users running different operating systems. 14One of the first steps was deciding on a library that can process QUIC packets and would be available to users running different operating systems.
15We chose to go with Cloudflare's Quiche library because the C API seemed simpler than other available libraries. Installing cloudflare-quiche via the Homebrew package manager (MacOS) did not actually install the libraries properly for linking with other C programs so I made a pull request in the Homebrew repository and fixed the formula. 15We chose to go with <a href="https://github.com/cloudflare/quiche">Cloudflare's Quiche library</a> because the C API seemed simpler than other available libraries. Installing cloudflare-quiche via the Homebrew package manager (MacOS) did not actually install the libraries properly for linking with other C programs so I made a pull request in the Homebrew repository and <a href="https://github.com/Homebrew/homebrew-core/commit/227fa616059fdb2157628535b85a801bbb5613f5">fixed the formula</a>.
16After this, I worked on handling the receiving functionality of the communicator. This involved reading from the socket then processing the QUIC packets using the Quiche library. Then I implemented the ability to send messages in a similar manner. One of the last steps involved connecting everything together with the transport service so that the communicator can receive information about peers and relay messages. 16After this, I worked on handling the receiving functionality of the communicator. This involved reading from the socket then processing the QUIC packets using the Quiche library. Then I implemented the ability to send messages in a similar manner. One of the last steps involved connecting everything together with the transport service so that the communicator can receive information about peers and relay messages.
17</p> 17Once I finished these tasks, the QUIC communicator got merged upstream and is currently an experimental feature. This is due to the packaging situation with Quiche as it is difficult for some users to install the library, and there still may be bugs lingering in the QUIC communicator. More testing and refinement is needed to offer a truly robust and reliable communicator.
18<p> 18
19 FIXME: Add link to code,packages, issues etc 19Link to source code: <a href="https://git.gnunet.org/gnunet.git/tree/src/transport/gnunet-communicator-quic.c">QUIC communicator</a>
20</p> 20</p>
21<h2>The current state.</h2> 21<h2>The current state.</h2>
22<p> 22<p>
23The QUIC communicator currently functions and passes basic communicator tests. That being said, there are some latency issues that need to be addressed. 23The QUIC communicator currently functions and passes basic communicator tests. That being said, there are some latency issues that need to be addressed. Mentioned below are some other things that have yet to be implemented, but will be fixed in the future.
24</p> 24</p>
25<h2>What&#39;s left to do.</h2> 25<h2>Future Work.</h2>
26<p> 26<p>
27We still need to develop a more robust solution to the certificate generation so that the Quiche API functions properly. Currently, we are using static, example certificates. Adding timers to each connection so that a timeout will trigger a connection to close also needs to be done. Finally, we should look into lowering the latency by finding where the code is too slow and optimizing it. 27We still need to develop a more robust solution to the certificate generation so that the Quiche API functions properly. Currently, we are using static, example certificates. Adding timers to each connection so that a timeout will trigger a connection to close also needs to be done. Finally, we should look into lowering the latency by finding where the code is too slow and optimizing it.
28</p> 28</p>
29<h2>What code got merged (or not) upstream.</h2> 29<h2>Challenges I Encountered</h2>
30<p>
31The QUIC communicator got merged upstream and is currently an experimental feature. This is because the packaging situation with Quiche makes it difficult for some users to install the library and there still may be bugs lingering in the QUIC communicator. More testing is needed.
32</p>
33<h2>Any challenges or important things you learned during the project.</h2>
34<p> 30<p>
35Something challenging about the project was reverse engineering the Quiche C API because it has such limited documentation. I learned how to make use of the API by looking at the very simple example client and server that is provided in the Quiche repository. There is documentation for the Rust API which seems to operate pretty similarly, so this was helpful too at times. I overcame this challenge with the help and guidance of my mentor Martin Schanzenbach. 31One of the challenges was reverse engineering the Quiche C API because it has such limited documentation. I learned how to make use of the API by looking at the very simple example client and server examples that are provided in the Quiche repository. There is documentation for the Rust API which seems to operate pretty similarly, so this was helpful too at times. I overcame this challenge with the help and guidance of my mentor Martin Schanzenbach.
36</p> 32</p>
37<h2>Final notes</h2> 33<h2>Final notes</h2>
38Overall, my experience with GNUnet was fantastic. My mentors were friendly and consistently available when I needed help. I had a lot of fun learning how GNUnet works while developing my project. I plan to continue contributing to GNUnet in the future. 34Overall, my experience with GNUnet was fantastic. My mentors were friendly and consistently available when I needed help, and I thank them for that. I'm thankful for the GNUnet community for being welcoming and understanding to new open source developers. I had a lot of fun learning how GNUnet works while developing my project. I am looking forward to contributing to GNUnet in the future!
39{% endblock body_content %} 35{% endblock body_content %}