Table of Contents

GSoC 2016 Ideas

See also: Information about GSoC, for our student expectations, proposals guidelines and more.

Infrastructure

This project is collection of all Tox Project infrastructure.

Website improvements

Brief explanation: Improve the project website at https://tox.chat to include more information, to become more maintainable, and to keep an efficient and friendly design.

Expected results:

Knowledge Prerequisite: HTML, CSS, any server-side web framework

Difficulty: Easy

Mentor: zero-one

Tox Core

Toxcore, Repository, Protocol Docs

Language-independent Tox Core implementation tests

Brief explanation: Design and implement a testing interface for Tox Protocol implementations.

The testing interface will be specific to each component of Tox Core but independent of the language used. In the simplest case (recommended), this means that the language boundary is at the process level. The test runner will invoke interface functions in the process running the implementation. The implementation will process the test input and produce an output that is then validated against a model or a reference implementation.

All Tox Core implementations will need to implement the interface.

Expected results:

Knowledge Prerequisite: $language

Difficulty: Medium

Mentor: irungentoo for the libtoxcore side + see language/mentor table below.

Implement Tox protocol in another language

Brief explanation: Using only the Tox Protocol Specification, write a complete implementation in a memory-safe language.

Language choices are currently:

Safe-D is D where all public entry points are @safe and no internal functions are @trusted. Bold languages are ones that have a beginning of an implementation.

Expected results:

Knowledge Prerequisite: $language, Networking, Security

Difficulty: Medium

Mentor: See table above.

Implement multimedia group chats

Brief explanation: Based on Jfreegman's work on DHT-powered group chats, this project will implement group audio/video chats.

Expected results: Audio/video group chats implemented in one client implementation (e.g. qTox, uTox, Antox).

Knowledge Prerequisite: C, Networking

Difficulty: Medium

Mentor: mannol

Multi-Device Support

Brief explanation: This project will add multi-device support to toxcore. You can start with the project proposal here or propose your own implementation.

Expected results: By the end of the summer, Toxcore will need to be able to: 1) group devices together, 2) send messages to multiple devices, and 3) the groups must be able to keep histories and contact lists in sync. Additionally at least one of client will need to implement basic multi-device support. (uTox STRONGLY suggested, other clients may require the student to find a mentor better acquainted with that client.)

References: https://docs.google.com/document/d/1op6zGR0KYdF7tTWSSX79KQieJu30vLZ6XG327kIBhxQ/edit

Knowledge Prerequisite: C, some knowledge of networking, data syncing, security/crypto.

Difficulty: Medium to Hard

Mentor: grayhatter

Mobile-friendliness improvements

Brief explanation: Improve data and battery usage for mobile Tox clients.

Toxcore currently uses a large amount of network traffic to keep the DHT connections alive. For mobile applications, this is not acceptable, and for “Doze” on Android or vanilla iOS it's entirely infeasible, because background processing is very limited. This project involves using GCM or equivalents to wake up the mobile Tox client and build connections. To make it usable, some changes to libtoxcore are required to speed up building DHT connections. Endpoint hints can be encoded in GCM data packets. Further investigation could be done in making TCP relays or a similar concept use less traffic.

Expected results: Antox uses no traffic and battery while idle and uses traffic proportional to the message volume when active.

Knowledge Prerequisite: C, Scala

Difficulty: Medium

Mentor: irungentoo for libtoxcore, iphy for Antox

Tox4j

Project link.

Important: if you want to work on a Tox4j project, please register on the Tox4j mailing list and send your questions to the GSoC address.

Also, please read the following section before submitting a proposal.

General expectations for Tox4j projects

Since every mentor for different projects may have different expectations, this section describes some of the expectations the Tox4j team has regarding applications directed at it. These are mostly guidelines, and not following them is not a death sentence to your proposal. We are open to discussion. If you feel any of these guidelines are unreasonable, please let us know on the mailing list or in a private email to the mentor.

We want to give every proposal a fair amount of thought, so please try and make our life easier; it can only benefit you.

Important:

Furthermore:

Criteria:

What we are (ideally) looking for in students.

Come talk to us early. As part of the vetting procedure, we will require you to either improve our code in a specific place or write a small sample application using our APIs. This shows whether you are capable of quickly getting around new code, which is important in the type of work we expect.

Last but not least:

Stay tuned for changes to this wiki page. We regularly add new information here if we feel that it could benefit all students. We want to give everybody equal chances, so we do our best to share information widely.

Merging Antox and TokTok Android clients

Brief explanation: Merge the two Android clients Antox and TokTok. The TokTok was designed with separation of UI and logic in mind, while in Antox, it is still largely a mix of Android and pure JVM code. We would like to focus on a single Android client, so the goal here is to either change Antox to use design ideas from TokTok, or reuse Antox code in TokTok to reach feature parity, so we can drop support for one of the clients.

Expected results:

Required:

Optional:

Recommended reading:

Knowledge Prerequisite: Scala, Java (these are both easy to learn if you know other languages)

Difficulty: Medium

Mentor: iphy

JVM implementation of the Tox protocol

Brief explanation: Create a full implementation of the Tox core protocol running on the JVM.

Alternatively: use a different safe language not targetting the JVM, such as OCaml, Haskell, Rust, Coq, to implement the protocol. In this case, Scala and Java knowledge is not required.

There is a beginning of an implementation in progress, but so far only a small part of the DHT specification was implemented. This specification has also since changed.

This project is large and can be split among multiple students. Depending on the number of applicants and their skills, a sensible split could be:

No design document is required for this project, as all the information should be in the protocol specification. If any information is missing, it must be added to that specification after discussing with irungentoo.

Design/implementation guidelines (exceptions will be made for certain components that can't comply, but the majority of the code should follow them):

Expected results:

Knowledge Prerequisite: Scala, Java

Difficulty: Medium

Mentor: iphy

High level network protocol

Brief explanation: Create a formal specification and JVM implementation of a higher level protocol on top of Tox network packets.

The idea here is to build an abstraction on top of (limited size) Tox packet protocol for applications such as:

The protocol should be specified in a machine-readable format that can easily be used to generate parsers and generators for various languages, so that it can be implemented in every client. A reasonable backwards-compatibility policy is part of the design to be created by the student. Existing RPC technology can and should be leveraged if possible.

Design/implementation guidelines from the above project apply.

Expected results:

Knowledge Prerequisite: Any JVM language (preferably Scala), Networking

Difficulty: Medium

Mentor: iphy

Multi-device support

Brief explanation: Create a network protocol, possibly based on the above abstraction, for multi-device support.

One idea here could be to use distributed consensus with eventual consistency to synchronise information between Tox clients. The same mechanism can be used for messaging (sending a message equals synchronising logs) and profile information synchronisation.

This idea requires a formal protocol specification and a design document.

Design/implementation guidelines from the above project apply.

Expected results:

Knowledge Prerequisite: Any JVM language (preferably Scala), Distributed systems

Difficulty: Hard

Mentor: iphy

Antidote

Project link

Antidote for Mac

Brief explanation: Create a Tox client for OS X using objcTox wrapper.

Expected results:

Using existing Objective C wrapper for toxcore, create a fully functional client for OS X. Client should be written in Swift and should have following features:

Required:

Optional:

Knowledge Prerequisite: Swift, Objective C

Difficulty: Medium

Mentor: dvor, chuongv (backup mentor)