Summer of Code 2021

= Participation =

The XSF is considering applying to be a mentoring organisation for Google Summer of Code 2021.

Dates
The various dates for the program can be found on the Google Summer of Code 2021 Timeline.

Otherwise, all other info is on GSoC page

Overview
XMPP is an Internet protocol used in many fields, such as the Internet of Things, chat applications, voice and video calls, etc. It's what Google Talk uses, Whatsapp uses an XMPP-derivative protocol, Google Hangouts uses some aspects of XMPP internally, and as well as end-users it's used extensively by enterprises and governments.

The XSF is (for GSoC) an umbrella organisation for various XMPP-related projects. As such, there's two tiers involved - the XSF itself, which is responsible for catherding mentors to submit ideas, choosing students etc., and the software projects themselves that then mentor students. Anyone interested in participating in GSoC as an XSF student can join the gsoc@muc.xmpp.org MUC room, where various mentors will be available to answer questions and generally help. Although each idea below lists a possible mentor, this MUC is the best place to start.

As there are several disparate projects here, there's variety across several codebases in different languages and with significantly different aims, so take a look through all the ideas - there should be something for everyone here :)

Teaser Tasks
To assess students applying to GSoC for XSF projects we want them to have submitted some small patches to one of the XMPP projects in advance, as this gives us an idea of their general ability to interact with the projects and submit patches. These should only be an afternoon or two's work, and shouldn't be onerous!

A list of teaser tasks is given in the Project Ideas overview, but please join the chat rooms for the respective projects and discuss them there, where mentors will be able to help you and know what you're up to. There are different teasers for different codebases, and more teasers will be appearing here over the next few days.

= Project Ideas =

Mellium
Website: https://melluim.im/ Source Code: https://mellium.im/code Description: Mellium is a collection of Go modules related to XMPP. Project Contact: Sam Whited Relevant readings: Effective Go, Mellium docs, Mellium API docs Teaser Tasks: Good first issues Chat: [xmpp:users@mellium.chat?join users@mellium.chat]

Audio/Video Chat
Brief explanation: Add support for Audio/Video Communication via Jingle. Involved Technologies: Go, WebRTC, Jingle Relevant readings: XEP-0167, XEP-0353

Deliverables / Expected Results:
 * Audio and video encoding and transfer using standard-compliant Jingle sessions that are compatible with Conversations
 * File transfer using Jingle sessions (also compatible with Conversations)
 * A demo app to start a conversation

Group Chat Support
Brief explanation: Add support for group chats using either Multi-User Chat or Mediated Information Exchange (MIX). Involved Technologies: Go Relevant readings: XEP-0369: Mediated Information eXchange (MIX), XEP-0045: Multi-User Chat

Deliverables / Expected Results:
 * A well tested library for joining or serving MUC or MIX and a set of integration tests that work against Prosody or Ejabberd
 * A simple component for hosting MUC or MIX chats

End-to-End Encryption
Brief explanation: Add support for end-to-end (E2E) encryption using OMEMO Involved Technologies: Go, Go Subrepos, OMEMO Relevant readings: XEP-0384: OMEMO Encryption

Deliverables / Expected Results:
 * A well-designed API and well-tested library for encrypting messages with OMEMO
 * Changes to the Go standard library and subrepos to add any missing cryptographic primitives or expose operations that are currently internal only.

= Join the group chat! =

Use a regular XMPP client and join the GSoC chat room [xmpp:gsoc@muc.xmpp.org?join gsoc@muc.xmpp.org].

How to join:


 * Download and install a client, or use a web client
 * Create an account, or use an existing one
 * Find, join, and bookmark: [xmpp:gsoc@muc.xmpp.org?join gsoc@muc.xmpp.org].