{% extends "common/base.j2" %} {% block body_content %}

{{ _("GNUnet's Google Summer of Code projects") }}

{% trans %} 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 below (or even your own ideas), please contact us either in IRC or mailing list. {% endtrans %}

{{ _("Ideas 2020") }}

re:claimID/GNUnet Browser Plugin

{% trans %} 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

Mentors: Martin Schanzenbach {% endtrans %}

Canonical statistics identifier

{% trans %} 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. Thing 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
Mentors: Martin Schanzenbach {% endtrans %}

{{ _("Past projects") }}

Past projects: Previously proposed, but left unfinished. Inspiration for students.

Android Port

{% trans %} It is time for GNUnet to run properly on Android. Note that GNUnet is written in C, and this is not about rewriting GNUnet in Java, but about getting the C code to run on Android. {% endtrans %}

{% trans %} Mentors: Hartmut Goebel {% endtrans %}

Help with Continuous Integration setup

{% trans %} There is a push for migrating our CI to Gitlab. The CI should eventually not just run "make check" on various platforms, but also perform tests with multiple peers running in different VMs with specific network topologies (i.e. NAT) between them being simulated. The CI should also be integrated with Gauger for performance regression analysis. Running jobs only when dependencies have changed and scripting more granular triggers or ideally automatic dependency discovery (as done by the autotools) is also important. {% endtrans %}

{% trans %} Mentors: TBD {% endtrans %}

Enable all networking applications to run over GNUnet out of the box

{% trans %} One great problem of the current Internet is the lack of disintermediation. When people want to talk they need a chat service. When they want to share files they need a file transfer service. Although GNUnet already possesses quite advanced integration into Linux networking, a little extra work is needed for existing applications like irc, www, ftp, rsh, nntpd to run over it in a peer-to-peer way, simply by using a GNS hostname like friend.gnu. Once people have added a person to their GNS they can immediately message, exchange files and suchlike directly, with nothing but the GNUnet in the middle, using applications that have been distributed with unix systems ever since the 1980's. We can produce an OS distribution where these things work out of the box with the nicknames of people instead of cloud services. For more information and context, read {% endtrans %} bug id 4625.

{% trans %} Mentors: lynX & dvn {% endtrans %}

Rust APIs for GNUnet services

{% trans %} There are a variety of GNUNet APIs that should be exposed in the Rust wrappers. Implementing these will require extending the port of GNUNet utils written by Andrew Cann and Kelong Cong. {% endtrans %}

{% trans %} As an introduction to the code base, we suggest that the student and Jeff Burdges together update the asynchronous IO system from gjio to futures-rs or another layer built upon it. Jeff Burdges is expected to concurrently be implementing a GNUNet API for his own mix network work. {% endtrans %}

{% trans %} Mentors: Jeff Burdges {% endtrans %}

{% trans %} Required Skills: Rust {% endtrans %}

{% trans %} Difficulty level: low {% endtrans %}

Tor compatibility for GNUnet

{% trans %} Implement the AnycastExit spec to enable GNUnet clients to connect over Tor. {% endtrans %}

{% trans %} Mentors: Jeff Burdges {% endtrans %}

{% trans %} Note: There was a Special TLDs spec to allow Tor to resolve domain names using GNS over Tor too, but currently that's on hold until folks think more about how names should be moved around the local system. We're calling this more collaborative approach NSS2 for now. {% endtrans %}

{% trans %} Required Skills: C {% endtrans %}

{% trans %} Difficulty level: medium {% endtrans %}

Rust implementation of GNUnet utils

{% trans %} Improve the Rust implementation of GNUnet utils, possibly including adding support for asynchronous IO using mio, or perhaps a higher level asynchronous IO library built upon it, such as rotor, mioco, eventual_io, or gj. {% endtrans %}

{% trans %} Mentors: Jeff Burdges {% endtrans %}

Android compatibility for GNUnet

{% trans %} Implement rudimentary Android compatibility for GNUnet, in part by porting the GNUnet utils scheduler to act as a thin wrapper over libuv. {% endtrans %}

{% trans %} Mentors: Jeff Burdges and Christian Grothoff {% endtrans %}

Implementation of a replacement for PANDA

{% trans %} Implementation of a replacement for PANDA (see Pond) with better security, and maybe integration with the GNU Name System for key exchange. {% endtrans %}

{% trans %} Mentors: Jeff Burdges {% endtrans %}

{% trans %} Required Skills: Rust or C, crypto {% endtrans %}

{% trans %} Difficulty level: high {% endtrans %}

secushare: Implement social networking features on top of pubsub channels

{% trans %} Implement different place types and file sharing by creating a new place for the shared content. {% endtrans %}

{% trans %} Place types to be implemented: {% endtrans %}

{% trans %}
  • File: generic file with comments
  • Image: display an image with comments referencing a region of the image
  • Sound: play a sound file with comments referencing a timestamp
  • Directory/Album: pointers to File / Image / Sound places
  • Event: with RSVP
  • Survey: ask your social neighborhood questions in a structured form
{% endtrans %}

{% trans %} Also provide the following UI functionality: {% endtrans %}

{% trans %}
  • Fork existing channels, reorganize people into new chatrooms or channels.
  • Share a post (edit and repost something elsewhere, on a fan page for example).
  • Edit a previously published post + offer edit history to readers.
  • Control expiry of channel history.
{% endtrans %}

{% trans %} See also http://secushare.org/features {% endtrans %}

{% trans %} Mentors: lynX {% endtrans %}

{% trans %} Required Skills: C/C++ {% endtrans %}

{% trans %} Difficulty level: high {% endtrans %}

secushare: Implement a Social Graph API for contact adoption and more

{% trans %} Implement aggregation of distributed state from various channels in order to provide for a powerful social graph API capable of producing social network profiles, dashboards, a calendar out of upcoming event invitations (if available), social search functionality and most of all to make it easy for users to adopt cryptographic identities of their contacts/friends simply by finding them in the social graph of their existing contacts ("This is Linda. You have 11 contacts in common with her. [ADD]"). {% endtrans %}

{% trans %} Related to secushare.org/rendezvous {% endtrans %}

{% trans %} Mentors: t3sserakt, lynX {% endtrans %}

{% trans %} Required Skills: C {% endtrans %}

{% trans %} Difficulty level: high {% endtrans %}

secushare: Implement integration with tradition e-mail

{% trans %}
  • Emulate IMAP/SMTP protocols as necessary to transform traditional mail clients into secushare user interfaces.
  • Think of ways to map e-mail addresses to secushare identities.
  • Encode or translate various e-mail features into secushare equivalents.
  • Parts of secushare are currently written in Rust, therefore Rust is preferred for this task but it is not an requirement.
{% endtrans %}

{% trans %} Mentors: t3sserakt, lynX {% endtrans %}

{% trans %} Required Skills: C {% endtrans %}

{% trans %} Difficulty level: high {% endtrans %}

GNUnet auction

{% trans %} Implementation of the GNUnet auction system described in Chapter 3 of this thesis. Specific tasks are adding smart contract creation and round time enforcement to libbrandt as well as creating the GNUnet auction service, library and the three user interface programs create, info and join. {% endtrans %}

{% trans %} Mentors: mate, cg {% endtrans %}

{% trans %} Required Skills: C {% endtrans %}

{% trans %} Difficulty level: medium {% endtrans %}

Implementation of additional transports

{% trans %} Implementation of additional transports to make GNUnet communication more robust in the presence of problematic networks: GNUnet-over-SMTP, GNUnet-over-DNS {% endtrans %}

{% trans %} Mentors: Matthias Wachs {% endtrans %}

Implementation of ALG-based NAT traversal methods

{% trans %} Implementation of ALG-based NAT traversal methods (FTP/SIP-based hole punching, better STUN support) {% endtrans %}

{% trans %} Mentors: Matthias Wachs {% endtrans %}

Integration of the GNU Name System with GnuPG

{% trans %} Mentors: Matthias Wachs, Christian Grothoff, Jeff Burdges {% endtrans %}

libaboss improvements

{% trans %} Improving libaboss to make computation on shared secrets (including repeated multiplication) based on Ben-Or et al. if possible. This in particular means moving libaboss to bignums (gcry_mpi). {% endtrans %}

Mentors: Krista Grothoff, Jeff Burdges

Implementation of a replacement for PANDA

{% trans %} Implementation of a replacement for PANDA (see Pond) with better security, and maybe integration with the GNU Name System for key exchange. {% endtrans %}

{% trans %} Mentors: Jeff Burdges {% endtrans %}

Supporting GNU Guix's package distribution

{% trans %} Please refer to the description for this project listed under GNU Guix project ideas. {% endtrans %}

{{ _("Finished projects") }}

2019

Migrate gnunet-qr from Python 2.7 to C using libzbar

{% trans %} 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). {% endtrans %}

{% trans %} Mentors: Christian Grothoff {% endtrans %}

{% trans %} Required Skills: {% endtrans %}

{% trans %} Difficulty level: {% endtrans %}

{% trans %} Report: {% endtrans %}

{% trans %} Unfinished/Abandoned as gnunet-qr was moved to C outside of GSoC. {% endtrans %}

2018

GNUnet Web-based User Interface

{% trans %} 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. {% endtrans %}

{% trans %} Mentors: Martin Schanzenbach {% endtrans %}

{% trans %} Required Skills: C, JavaScript, CSS {% endtrans %}

{% trans %} Difficulty level: medium {% endtrans %}

{% trans %} Report: GSoC 2018: GNUnet WebUI {% endtrans %}

{% endblock body_content %}