You are here

Google Summer of Code 2013 Ideas

GNUnet is participating in this years Google Summer of Code under the GNU umbrella. Here an overview over GNUnet's project ideas.

Please feel free to contact us about them or to suggest new ideas/features you would like to see implemented in GNUnet, even if you personally can't do them.

General Guidelines

Here some information about GNUnet and our development process:

  • GNUnet is written in C, so extensions to GNUnet have to be written in C as well
  • GNUnet is designed to run on various platforms, but we mainly develop under GNU/Linux ...
  • We use Subversion for version control, you will get write access to or a separate repository to commit your changes
  • In addition we use a buildsystem based on autotools, but additional dependencies have to be discussed with the team members and mentors
  • The common GNUnet hangout is in IRC on freenode in #gnunet, you are invited to join!
  • As a develop you should join the gnunet mailing lists
  • Have look at the developer tools we use to track bugs and do regression testing:

Integrating GNUnet and PSYC

Complexity: High
Requirements: C
Good to have: Knowledge of PSYC
Mentor: Bart Polot ([first name]

Implement multicast, file transfers and fixes for the PSYC component.


PSYC is a Protocol for SYnchronous Conferencing, a text-based messaging protocol. Currently, the PSYC team is working on an implementation of it as a GNUnet service, called psycd, along with client implementations for it.

Psycd currently uses gnunet-core to send and receive messages, this needs to be changed to use the new multicast service instead, so that psycd can use the multicast capabilities of GNUnet.

Next task is the implementation of file transfers for psycd. This involves identifying components that could be reused from the GNUnet framework for this purpose and also requires defining PSYC protocol syntax for this purpose.

In addition to the points above, stability improvements and fixes should also be implemented in the course of the project.

Improvement of the GNUnet Installer/updater

Complexity: Medium
Requirements: Python, C
Mentor: Matthias Wachs ([last name]

Extend GNUnet's distributed software installer

gnunet-update [] is a project being developed to provide updates to deployed GNUnet installation. The idea is that the updates are propagated through GNUnet's P2P network. This way, a peer can still update in scenarios of heavy censhorship -- where access to update servers is not available -- by just being able to communicate with other GNUnet peers.

The present idea is to have updates provided as packages by packagers who sign each update with their GPG key. These packages contain binaries along with their dependencies(the dynamic libraries which are required for the binaries to execute) and meta-data (architecture for which the binaries are built, the packager sign, revision number, etc). To propage an update, the packager publishes it in the GNUnet P2P File-Sharing (FS) application. Peer following a packager would query FS if there is an update from a certain packager. If there one, they then download the update's meta-data, verify its itegrity, and download the relevant binary components and dependencies to updates its own code base. More details here.

A recent idea is to use GNU Guix [] for building, packaging, installing and updating while still using GNUnet's P2P network to propagate updates.

Improving GNUnet's adhoc connectivity with a bluetooth transport

Complexity: Medium
Requirements: C
Good to have: experience in C, software development, Linux, Bluetooth
Mentor: Bart Polot ([first name]

GNUnet supports multiple transport protocols. To improve GNUnet's adhoc communication, we want create a bluetooth transport plugin.

GNUnet supports more than one transport mechanism. At the moment GNUnet supports TCP, UDP, HTTP(S) and WLAN for ad hoc communication.
We want to improve GNUnet's ad hoc capabilities by creating a bluetooth transport.

GNUnet provides an extensible plugin mechanism to extend the low level transport service with additional plugins. Your task will be to develop such
an transport plugin.

Creation of a GUI for the GNUnet PlanetLab/Parallel Deployment tool

Complexity: Medium
Requirements: Python
Good to have: experience in GUI development, parallel programming
Mentor: Matthias Wachs ([last name]

Implement a GUI for GNUnet's parallel deployment to to control large scale experiments on hundreds of nodes.

We use the Planetlab testbed to test GNUnet under real world conditions on a large number of nodes. Deploying GNUnet to hundreds of nodes and maintain the nodes is a time consuming task. We created a powerful tool called GPLMT helping us to administer and control experiments on a large number of test hosts. With GPLMT we can define so called "task lists" to specify the tasks to perform on the host and the expected result of the command. These tasks are performed sequentially and with a dependency on the results of the predecessor. GPLMT is written in Python and designed to be easily extendable and adaptable.

We think GPLMT is a powerful and very useful tool and we want to other users and researchers to benefit from it. With this years Google Summer of Code We want to equip our tool with a graphical user interface to improve the interaction with the user.

With the GUI the user should have the possibility to control task execution and get feedback on the result of finished executions including an report on success or failure. The gui shall also provide a graphical way to configure the tool and to create the tasklists in a user friendly way.

A student interested in the project should have knowledge in python and basic knowledge in developing graphical user interfaces and parallel programming. More information can be found here: