GNUnet's Google Summer of Code projects

As a GNU project, GNUnet has participated in the Google Summer of Code (GSoC) for a number of years. This page lists all current, past, and finished projects. If you want to participate and apply for any of the ideas for 2020 below or any past project which is not yet finished (or even your own idea), please contact us either in IRC or mailing list.

Ideas 2021

Transport Next Generation (TNG): Communicator plugins

The GNUnet team is currently working on a transport layer rewrite in order to fix core issues with connectivity. This new component is currently developed under the name "TNG". What is currently known as "transport plugins" will in the TNG be represented as "communicators". Communicators are processes with a well defined API that allow to connect peers over a specific protocol. The primary protocol which are already implemented are UNIX sockets, UDP sockets, and TCP sockets. For a truly resilient network, other connectivity options such as WiFi mesh, Bluetooth, HTTP(S), QUIC or even more obscure alternatives such as radio are required. In this project, the goal is to select, implement and test new communicators. While TNG is not yet ready, communicators can, by design, be developed and tested against the current API. We expect that this project can be worked on by multiple students as there are a lot of protocols to choose from. The tasks would consist of:

  1. Deciding which communicators to implement.
  2. Test the communicators.
  3. Documentation.
Advantageous skills/languages/frameworks:
  1. C
  2. Knowledge of HTTPS, QUIC, Bluetooth or WiFi.

Difficulty: Average, but depends on selected protocols.
Mentors: Martin Schanzenbach, t3sserakt

REST: Multi-user support

The REST API currently only supports a single user system. This is an issue as on multi-user systems, access control must be enfoced on a per-user basis. In this project, the REST service must be extended to support user authentication. This includes the correct handling of user context switches.

  1. Implement user authentication.
  2. Test the access control.
  3. Document the changes to the REST API.
Advantageous skills/languages/frameworks:
  1. C
  2. Knowledge of user authentication subsystems on Linux/Unix.
  3. REST/HTTP Authentication methods

Difficulty: Beginner
Mentors: Martin Schanzenbach

re:claimID/GNUnet Browser Plugin

reclaimID is a decentralized identity system build on top of the GNU Name System. Currently, there is a Webextension which uses the GNUnet REST API. In order to improve adoption and ease of use, this project aims to include a full GNUnet node within the Webextention as a fallback. GNUnet can be compiled to Web Assembly or JavaScript as demonstrated here. The idea is to improve upon this concept and support more of GNUnet's subsystems. The difficulty of this project largely depends on the students proficiency with build tools, emscripten and improvisation skills. There non-exhaustive task list would be:

  1. Improve existing GNUnet emscripten build to include more subsystems.
  2. Integrate the result into a Webextention.
  3. Integrate the result into the re:claimID Webextension
Advantageous skills/languages/frameworks:
  1. C
  2. emscripten
  3. Webextensions

Difficulty: Challenging
Mentors: Martin Schanzenbach

Canonical statistics identifier

Currently, the keys in our statistics database are too verbose. For example:

nse # flood messages received: 13
nse # peers connected: 4
nse # nodes in the network (estimate): 203
nse # flood messages started: 5
nse # estimated network diameter: 3
nse # flood messages transmitted: 10

With such verbose keys there's no easy way to form compact JSON document or entries for time-series database. And you can't query single stats without having to copypaste the line exactly and put in quotes. In short, the goals are to...

  1. Think of a way how statistics entries can be made canonical.
  2. Implement the change and migrate existing uses.
  3. Document the format(s) and define an appropriate registration mechanism for identifiers
Relevant bugs: #5650
Advantageous skills/languages/frameworks:
  1. C
  2. HTML

Difficulty: Beginner
Mentors: Martin Schanzenbach

Rust templates for GNUnet services

The goal is to either build upon the (outdated) GNUnet Rust bindings or to follow the path of which tries to reimplement most of the GNUnet stack. The end result should be an extension template for GNUnet in the form of the existing C template which allows to quickly start implementing services and libraries for GNUnet.

Mentors: Martin Schanzenbach

Required Skills: Solid knowledge of Rust and ideally asynchronuous IO.

Difficulty level: medium

Finished projects


Migrate gnunet-qr from Python 2.7 to C using libzbar

Python 2.7 is reaching its end-of-life, and we want to get rid of the dependency on Python. The existing gnunet-qr tool is a rather simple wrapper around python-zbar, which itself wraps libzbar. The goal of this project is to directly use libzbar to scan QR codes for GNUnet / the GNU Name System (see also #5562).

Mentors: Christian Grothoff

Required Skills:

Difficulty level:


Unfinished/Abandoned as gnunet-qr was moved to C outside of GSoC.


GNUnet Web-based User Interface

Implementation of a Web-based UI for GNUnet similar to GNUnet-Gtk with a yet to be determined framework such as Angular2. This includes the design and implementation of not yet existing REST APIs that expose the GNUnet API.

Mentors: Martin Schanzenbach

Required Skills: C, JavaScript, CSS

Difficulty level: medium

Report: GSoC 2018: GNUnet WebUI