Google "Summer of Code" Projekte von GNUnet

Als GNU-Projekt nimmt GNUnet seit einigen Jahren am Google Summer of Code (GSoC) teil. Diese Seite enthält alle laufenden, vorherigen und abgeschlossenen Projekte. Falls du mitmachen und dich für eine der Ideen für 2020 oder eins der noch nicht abgeschlossenen vorherigen Projekte bewerben willst (oder sogar eine eigene Idee hast), dann setze dich bitte mit uns in IRC oder über die Mailingliste in Verbindung.

Ideen 2021

Transport Next Generation (TNG): Communicator plugins

Das GNUnet-Team arbeitet derzeit an einem Umschreiben der Transportschicht, um Kernprobleme bei der Konnektivität zu beheben. Diese neue Komponente wird gerade unter dem Namen "TNG" entwickelt. Das, was heute als "transport plugin" bekannt ist, wird im TNG als "Communicator" dargestellt. Communicators sind Prozesse mit einem gut definierten API, mittels dem Peers über ein spezifisches Protokoll verbunden werden können. Die primären Protokolle, die bereits implementiert sind, sind UNIX Steckkontakte, UDP Kontakte und TCP Kontakte. Für ein wirklich widerstandsfähiges Netzwerk sind andere Verbindungsoptionen wie WiFi Mesh, Bluetooth, HTTP(S), QUIC oder sogar noch obskurere Alternativen wie Radio erforderlich. Das Ziel dieses Projekts ist es, neue Communicator auszuwählen, zu implementieren und zu testen. Solange TNG noch nicht fertig ist, können Communicator designbedingt gegen den aktuellen API entwickelt und getestet werden. Wir gehen davon aus, daß dieses Projekt von mehreren Studenten bearbeitet werden kann, da man unter einer großen Menge von Protokollen auswählen kann. Die Aufgaben wären:

    Auswahl an zu implementierenden Communicator.
  1. Testen der Communicator.
  2. Dokumentation.
  3. Vorteilhafte Fähigkeiten/Sprachen/Systeme:
  4. C
  5. Kenntnis von HTTPS, QUIC, Bluetooth oder WiFi.

  6. Schwierigkeit:Durchschnitt, aber von ausgewählten Protokollen abhängig.
    Mentoren: Martin Schanzenbach, t3sserakt

REST: Multi-user support

Die REST-API unterstützt derzeit nur ein Einzelbenutzersystem. Das ist ein Thema, da auf Multibenutzersystemen die Zugangskontrolle Nutzer für Nutzer durchgeführt werden muß. In diesem Projekt muß die REST-Leistung zur Unterstützung der Nutzerauthentifizierung erweitert werden. Dieses schließt die korrekte Handhabung von Nutzerkontextschaltern ein.

  1. Implementiere Nutzerauthentifizierung.
  2. Teste die Zugangskontrolle.
  3. Dokumentiere die Veränderungen an der REST-API.
Vorteilhafte Fähigkeiten/Sprachen/Systeme:
  1. C
  2. Kenntnis von Nutzerauthentifizierungs-Subsystemen auf Linux/Unix.
  3. REST/HTTP Authentifizierungsmethoden

Niveau: Anfänger
Mentoren: Martin Schanzenbach

re:claimID/GNUnet Browser Plugin

reclaimID ist ein dezentrales Identitätssystem, das auf dem GNU-Namenssystem aufbaut. Zur Zeit gibt es eine Webextension, welche das GNUnet verwendet REST API. Damit diese besser angenommen und leichter angewandt werden kann, zielt dieses Projekt darauf ab, einen vollwertigen GNUnet-Knoten innerhalb der Webextension als Absicherung anzubieten. GNUnet kann zu Web Assembly oder JavaScript zusammengetragen werden, wie hier heregezeigt. Die Idee ist, dieses Konzept zu verbessern und mehr von GNUnets Subsystemen zu unterstützen. Die Schwierigkeit des Projekts hängt zum größten Teil von den Fähigkeiten der Studenten bzgl. Toolbau, Emscripten und Improvisation ab. Die unvollständige Aufgabenliste wäre:

  1. Verbessere den gegenwärtigen GNUnet Emscripten-Aufbau, um mehr Subsysteme unterzubringen.
  2. Integriere das Ergebnis in eine Webextension.
  3. Integriere das Ergebnis in die re:claim ID Webextension
Vorteilhafte Kenntnisse/Sprachen/Systeme:
  1. C
  2. emscripten
  3. Webextensions

Schwierigkeit: Herausfordernd
Mentoren: Martin Schanzenbach

Canonical statistics identifier

Derzeit sind die Schlüssel in unserer Statistikdatenbank zu umfangreich. Zum Beispiel:

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

Mit derart umfangreichen Schlüsseln gibt es keinen einfachen Weg, ein kompaktes JSON Dokument oder Einträge für eine Zeitreihendatenbank zu bilden. Und es lassen sich keine einzelnen Statistiken anfragen, ohne die Zeile exakt zu copypasten und in Anführungsstriche zu setzen. Kurz zusammengefaßt sind die Ziele...

  1. Entwickele eine Methode, wie statistische Einträge kanonisch gemacht werden können.
  2. Setze die Veränderung um und migriere die bestehenden Verwendungen.
  3. Dokumentiere das bzw. die Format(e) und definiere einen geeigneten Registrierungmechanismus für Bezeichner
Relevante Fehler: #5650
Vorteilhafte Kenntnisse/Sprachen/Systeme:
  1. C
  2. HTML

Schwierigkeit: Anfänger
Mentoren: Martin Schanzenbach

Rust templates for GNUnet services

Ziel ist es, entweder auf den (veralteten) GNUnet Rust-Bindungen aufzubauen oder dem Pfad von https://github.com/bfix/gnunet-go zu folgen, der versucht, den größten Teil des GNUnet-Stacks neu zu implementieren. Das Endergebnis sollte ein Erweiterungstemplate für GNUnet in der Form des bestehenden C templatesein, welches es ermöglicht, schnell Dienstleistungen und Bibliotheken für GNUnet zu implementieren.

Mentoren: Martin Schanzenbach

Notwendige Fähigkeiten: Solide Kenntnisse in Rust und idealerweise asynchrone E / A.

Schwierigkeitsgrad: mittel

Abgeschlossene Projekte

2019

Migrate gnunet-qr from Python 2.7 to C using libzbar

Python 2.7 nähert sich dem Ende seiner Lebensdauer, und wir möchten die Abhängigkeit von Python beseitigen. Das bestehende GNUnet-qr-Tool ist eine relativ einfache Hülle um Python-zbar, welches selber libzbar umhüllt. Das Ziel dieses Projekt ist es, libzbar direkt für des Scannen von QR-Codes für GNUnet / das GNU-Namen-System zu verwenden (siehe auch #5562).

Mentoren: Christian Grothoff

Erforderliche Kenntnisse:

Schwierigkeitsgrad:

Bericht:

Unvollendet/Abgebrochen, da gnunet-qr nach C außerhalb von GSoc verschoben wurde.

2018

GNUnet Web-based User Interface

Implementierung einer webbasierten Benutzeroberfläche für GNUnet ähnlich wie GNUnet-Gtk mit einem noch zu bestimmenden Framework wie etwa Angular2. Das schließt die Entwicklung und Implementierung von noch nicht existierenden REST APIs, die das GNUnet APIexponieren, mit ein.

Mentoren: Martin Schanzenbach

Erforderliche Fähigkeiten: C, JavaScript, CSS

Schwierigkeitsgrad: mittel

Bericht: GSoC 2018: GNUnet WebUI