Difference between revisions of "Google Summer of Code 2022"

From XMPP WIKI
Jump to navigation Jump to search
(Remove Monal)
(→‎Project Ideas: Remove wrong entry)
Tags: Manual revert Mobile web edit Mobile edit
 
(33 intermediate revisions by 6 users not shown)
Line 48: Line 48:


* [https://wiki.xmpp.org/web/GSoC#Overview Archive of previous GSoC participation]
* [https://wiki.xmpp.org/web/GSoC#Overview Archive of previous GSoC participation]
* [[Application details from Feb 2022]]
= How to get started? =
* Read the [https://summerofcode.withgoogle.com/help Google Summer of Code 2022 guidelines]!
* Review the projects below and inform yourself if that could be of interested for you [https://wiki.xmpp.org/web/Google_Summer_of_Code_2022#Project_Ideas Link]
* Reach out the projects contact, tell about yourself and why you are interested (see project section)
* Join our GSoC group chat channel via XMPP (you can reach out via mail of course as well, but we really recommend to also use the technology) [https://wiki.xmpp.org/web/Google_Summer_of_Code_2022#Join_the_group_chat! Link]
* Continue to discuss teaser tasks with the project contact [https://wiki.xmpp.org/web/Google_Summer_of_Code_2022#Teaser_Tasks Link]
* If everything is fine, start preparing a proposal and if reviewed submit the application [https://wiki.xmpp.org/web/Google_Summer_of_Code_2022#Student_Proposal Link]
== 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 [https://xmpp.org/getting-started/ install a client], or [https://xmpp.org/chat#converse/room?jid=gsoc@muc.xmpp.org 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].


== Teaser Tasks ==
== Teaser Tasks ==
Line 55: Line 75:
A list of teaser tasks is given in the [[#Project_Ideas|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.
A list of teaser tasks is given in the [[#Project_Ideas|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.


= Join the group chat! =
== Student Proposal ==


Use a regular XMPP client and join the GSoC chat room '''[xmpp:gsoc@muc.xmpp.org?join gsoc@muc.xmpp.org]'''.
In addition to writing a proposal, engagement with the actual projects before the application is very important. Showing motivation by taking interest in the project and communicating with the mentors is very advantageous. Solving a typical small problem can show that a student is serious with their plans.


How to join:
Of course, a good proposal is fine, too. We would be interested in the motivation behind the application. Additionally, the student's background, the possible experiences and preferred technologies, the outcome of a preliminary research on the protocol and codesbases the student might work on. Furthermore, their own perspective on how the collaboration and organization through the Google Summer of Code with the mentors should look like and a review of which possible problems may be faced are also helpful.


* Download and [https://xmpp.org/getting-started/ install a client], or [https://xmpp.org/chat?gsoc use a web client]
Furthermore we recommend a bit of research on online guides to write a proposal or motivational letter. The official guidelines of the [https://developers.google.com/open-source/gsoc/help/student-advice Google Summer of Code 2022] are highly recommended to read first.
* Create an account, or use an existing one
* Find, join, and bookmark: [xmpp:gsoc@muc.xmpp.org?join gsoc@muc.xmpp.org].


= Project Ideas =
= Project Ideas =


= Dino =
== Dino ==


''Website:'' https://dino.im/<br/>
''Website:'' https://dino.im/<br/>
Line 75: Line 93:
''Relevant readings:'' [https://wiki.gnome.org/Projects/Vala/Tutorial Vala Tutorial]<br/>
''Relevant readings:'' [https://wiki.gnome.org/Projects/Vala/Tutorial Vala Tutorial]<br/>
''Teaser Tasks:'' [https://github.com/dino/dino/labels/good%20first%20issue Good first issues]<br/>
''Teaser Tasks:'' [https://github.com/dino/dino/labels/good%20first%20issue Good first issues]<br/>
''Chat:'' [xmpp:chat@dino.im?join chat@dino.im]
''Chat:'' [xmpp:chat@dino.im?join chat@dino.im] or [https://xmpp.org/chat#converse/room?jid=chat@dino.im Webchat]
 
'''Note:''' Feel invited to combine small projects into a large project, if you want to do a large project. Combinations of the 3 projects related to file transfers are a particular fit for a large project.


=== Inline link preview ===
=== Inline link preview ===
Line 82: Line 102:
''Involved Technologies:'' Vala, XMPP, HTML, OpenGraph<br/>
''Involved Technologies:'' Vala, XMPP, HTML, OpenGraph<br/>
''Relevant readings:'' [http://ogp.me/ OpenGraph protocol]<br/>
''Relevant readings:'' [http://ogp.me/ OpenGraph protocol]<br/>
''Project size:'' Small (175h)<br/>
''Difficulty:'' Easy<br/>
''Deliverables / Expected Results:''<br/>
''Deliverables / Expected Results:''<br/>
* User interface widget to display metadata, suitable for preview image, title, abstract and the original url/domain.
* User interface widget to display metadata, suitable for preview image, title, abstract and the original url/domain.
Line 87: Line 109:
* Design or reuse a specification for sending metadata with XMPP messages
* Design or reuse a specification for sending metadata with XMPP messages


=== Improve file transfers ===
=== Stateless file sharing ===
This topic consists of 3 projects. The second project "On-demand p2p file sharing" can only be achieved by first implementing the first project "Stateless file sharing". "WebRTC file transfer" can be implemented independent of the other two.
 
==== Stateless file sharing ====


''Brief explanation:'' Attach metadata to HTTP file transfers and display it.<br/>
''Brief explanation:'' Attach metadata to HTTP file transfers and display it.<br/>
''Involved Technologies:'' Vala, XMPP, HTTP<br/>
''Involved Technologies:'' Vala, XMPP, HTTP<br/>
''Relevant readings:'' [https://xmpp.org/extensions/xep-0446.html XEP-0446], [https://xmpp.org/extensions/xep-0447.html XEP-0447], [https://xmpp.org/extensions/xep-0363.html XEP-0363]<br/>
''Relevant readings:'' [https://xmpp.org/extensions/xep-0446.html XEP-0446], [https://xmpp.org/extensions/xep-0447.html XEP-0447], [https://xmpp.org/extensions/xep-0363.html XEP-0363]<br/>
''Project size:'' Small (175h)<br/>
''Difficulty:'' Medium<br/>
''Deliverables / Expected Results:''<br/>
''Deliverables / Expected Results:''<br/>
* Use [https://xmpp.org/extensions/xep-0447.html Stateless file sharing (SFS)] for outgoing HTTP file transfers.
* Use [https://xmpp.org/extensions/xep-0447.html Stateless file sharing (SFS)] for outgoing HTTP file transfers.
Line 100: Line 121:
* Display minimal thumbnails blurred on incoming file transfers (before file is fetched).
* Display minimal thumbnails blurred on incoming file transfers (before file is fetched).


==== On-demand p2p file sharing ====
=== On-demand p2p file sharing ===
''Brief explanation:'' Allow for on-demand multi-party peer-to-peer file transfers.<br/>
''Brief explanation:'' Allow for on-demand multi-party peer-to-peer file transfers.<br/>
''Involved Technologies:'' Vala, XMPP, Jingle<br/>
''Involved Technologies:'' Vala, XMPP, Jingle<br/>
''Relevant readings:'' [https://xmpp.org/extensions/xep-0447.html XEP-0447], [https://xmpp.org/extensions/xep-0234.html XEP-0234]<br/>
''Relevant readings:'' [https://xmpp.org/extensions/xep-0447.html XEP-0447], [https://xmpp.org/extensions/xep-0234.html XEP-0234]<br/>
''Project size:'' Small (175h)<br/>
''Difficulty:'' Medium<br/>
''Important Note:'' This project can only be achieved by first implementing the "Stateless file sharing" project.<br/>
''Deliverables / Expected Results:''<br/>
''Deliverables / Expected Results:''<br/>
* Implement [https://xmpp.org/extensions/xep-0234.html#requesting Jingle File Transfer requests] to request and deliver files.
* Implement [https://xmpp.org/extensions/xep-0234.html#requesting Jingle File Transfer requests] to request and deliver files.
* Announce availability of Jingle file transfer using [https://xmpp.org/extensions/xep-0447.html Stateless file sharing (SFS)] for outgoing file transfers and after retrieval.
* Announce availability of Jingle file transfer using [https://xmpp.org/extensions/xep-0447.html Stateless file sharing (SFS)] for outgoing file transfers and after retrieval.


==== WebRTC file transfer ====
=== WebRTC file transfer ===


''Brief explanation:'' Add support for WebRTC-based file transfers using WebRTC data channels for web compatibility and improved NAT traversal.<br/>
''Brief explanation:'' Add support for WebRTC-based file transfers using WebRTC data channels for web compatibility and improved NAT traversal.<br/>
''Involved Technologies:'' Vala, XMPP, Jingle, WebRTC<br/>
''Involved Technologies:'' Vala, XMPP, Jingle, WebRTC<br/>
''Relevant readings:'' [https://xmpp.org/extensions/xep-0343.html XEP-0343], [https://xmpp.org/extensions/xep-0234.html XEP-0234]<br/>
''Relevant readings:'' [https://xmpp.org/extensions/xep-0343.html XEP-0343], [https://xmpp.org/extensions/xep-0234.html XEP-0234]<br/>
''Project size:'' Small (175h)<br/>
''Difficulty:'' Hard<br/>
''Deliverables / Expected Results:''<br/>
''Deliverables / Expected Results:''<br/>
* Implement SCTP protocol
* Implement SCTP protocol
Line 123: Line 149:
''Involved Technologies:'' Vala, XMPP, GTK+, Pango<br/>
''Involved Technologies:'' Vala, XMPP, GTK+, Pango<br/>
''Relevant readings:'' [https://xmpp.org/extensions/xep-0393.html XEP-0393], [https://xmpp.org/extensions/xep-0394.html XEP-0394], [https://xmpp.org/extensions/xep-0372.html XEP-0372]<br/>
''Relevant readings:'' [https://xmpp.org/extensions/xep-0393.html XEP-0393], [https://xmpp.org/extensions/xep-0394.html XEP-0394], [https://xmpp.org/extensions/xep-0372.html XEP-0372]<br/>
''Project size:'' Small (175h)<br/>
''Difficulty:'' Easy<br/>
''Deliverables / Expected Results:''<br/>
''Deliverables / Expected Results:''<br/>
* Add rich text features to Dino's chat input box using buttons and well-known keyboard shortcuts for bold, italic, strikethrough, monospace, lists, blockquotes, code blocks, links and mentions.
* Add rich text features to Dino's chat input box using buttons and well-known keyboard shortcuts for bold, italic, strikethrough, monospace, lists, blockquotes, code blocks, links and mentions.
Line 129: Line 157:
* Apply markup to messages in conversation history via Pango Attributes
* Apply markup to messages in conversation history via Pango Attributes


= Mellium =
== Psi ==
 
''Website:'' https://melluim.im/<br/>
''Source Code:'' https://mellium.im/code<br/>
''Description:'' Mellium is a collection of Go modules related to XMPP.<br/>
''Project Contact:'' [[User:SamWhited|Sam Whited]]<br/>
''Relevant readings:'' [https://golang.org/doc/effective_go Effective Go], [https://mellium.im/docs/ Mellium docs], [https://pkg.go.dev/mellium.im/xmpp Mellium API docs]<br/>
''Teaser Tasks:'' [https://github.com/mellium/xmpp/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 Good first issues]<br/>
''Chat:'' [xmpp:users@mellium.chat?join users@mellium.chat]
 
=== Audio/Video Chat ===
 
''Size:'' Large<br/>
''Brief explanation:'' Add support for Audio/Video Communication via Jingle.<br/>
''Involved Technologies:'' Go, WebRTC, Jingle<br/>
''Relevant readings:'' [https://xmpp.org/extensions/xep-0167.html XEP-0167], [https://xmpp.org/extensions/xep-0353.html XEP-0353]<br />
''Deliverables / Expected Results:''<br/>
* A separate Go library for Jingle that is not XMPP specific (probably, we can discuss design later)
* Audio and video chat in mellium.im/xmpp that is compatible with [https://conversations.im Conversations]
* File transfer in in mellium.im/xmpp using Jingle sessions (also compatible with Conversations)
* A demo app to start a conversation (or support in [https://github.com/mellium/communique-tui Communiqué])
 
=== Group Chat ===
 
''Size:'' Small<br/>
''Brief explanation:'' Add support for group chats using Mediated Information Exchange (MIX).<br/>
''Involved Technologies:'' Go<br/>
''Relevant readings:'' [https://xmpp.org/extensions/xep-0369.html XEP-0369: Mediated Information eXchange (MIX)]<br />
''Deliverables / Expected Results:''<br/>
* A well tested library for joining and serving MIX channels and a set of integration tests that work against Prosody and Ejabberd
* A simple component for hosting MIX channels
 
=== End-to-End Encryption ===
 
''Size:'' Large<br/>
''Brief explanation:'' Add support for end-to-end (E2E) encryption using OMEMO, or MLS<br/>
''Involved Technologies:'' Go, Go Subrepos, OMEMO or MLS<br/>
''Relevant readings:'' [https://xmpp.org/extensions/xep-0384.html XEP-0384: OMEMO Encryption], [https://datatracker.ietf.org/doc/draft-ietf-mls-protocol/ The Messaging Layer Security (MLS) Protocol (draft-ietf-mls-protocol)]<br />
''Deliverables / Expected Results:''<br/>
* If using MLS, an XEP describing behavior and how MLS should be integrated with XMPP
* A well-designed API and well-tested library for encrypting messages with OMEMO or MLS
* Changes to the Go standard library and sub-repositories to add any missing cryptographic primitives or expose operations that are currently internal only.
 
= Psi =


''Website:'' https://psi-im.org/<br/>
''Website:'' https://psi-im.org/<br/>
''Source Code:'' https://github.com/psi-im/psi<br/>
''Source Code:'' https://github.com/psi-im/psi<br/>
''Description:'' An XMPP client for advanced users.</br>
''Description:'' An XMPP client for advanced users.</br>
''Project Contact:'' [[User:Rion|rion]], Tehnick, VitoZz<br/>
''Project Contact:'' [[User:Rion|Sergei Ilinykh]], Tehnick (Boris Pek), VitoZz (Vitaly Tonkacheyevb)<br/>
''Relevant readings:'' [https://psi-plus.com/wiki/en:main]<br/>
''Relevant readings:'' [https://psi-plus.com/wiki/en:main]<br/>
''Teaser Tasks:'' [https://github.com/psi-im/psi/milestone/4]<br/>
''Teaser Tasks:'' [https://github.com/psi-im/psi/milestone/4]<br/>
''Chat:'' [xmpp:psi-dev@conference.jabber.ru?join psi-dev@conference.jabber.ru]
''Chat:'' [xmpp:psi-dev@conference.jabber.ru?join psi-dev@conference.jabber.ru] or [https://xmpp.org/chat#converse/room?jid=psi-dev@conference.jabber.ru Webchat]


=== Mediated Information Exchange (MIX) ===
=== Mediated Information Exchange (MIX) ===
Line 187: Line 172:
''Involved Technologies:'' Qt, C++<br/>
''Involved Technologies:'' Qt, C++<br/>
''Relevant readings:'' [https://xmpp.org/extensions/xep-0369.html XEP-0369: Mediated Information eXchange (MIX)]<br />
''Relevant readings:'' [https://xmpp.org/extensions/xep-0369.html XEP-0369: Mediated Information eXchange (MIX)]<br />
''Size:'' large<br/>
''Difficulty:'' Hard<br/>
''Deliverables / Expected Results:''<br/>
''Deliverables / Expected Results:''<br/>
* A set of classes in [https://github.com/psi-im/iris iris] library to support MIX extensions.
* A set of classes in [https://github.com/psi-im/iris iris] library to support MIX extensions.
Line 198: Line 185:
''Involved Technologies:'' Qt, QML, JavaScript, C++<br/>
''Involved Technologies:'' Qt, QML, JavaScript, C++<br/>
''Relevant readings:'' https://en.wikipedia.org/wiki/QML<br/>
''Relevant readings:'' https://en.wikipedia.org/wiki/QML<br/>
''Size:'' large<br/>
''Difficulty:'' Medium<br/>
''Deliverables / Expected Results:''<br/>
''Deliverables / Expected Results:''<br/>
* It's a huge task, so expected an implementation of standalone QML/*cross-platform* UI with clear and well-documented API interfaces.
* It's a huge task, so expected an implementation of standalone QML/*cross-platform* UI with clear and well-documented API interfaces.
* The UI may be backed by some mocked C++ code where Psi code should be taken as a guidance. This is perfectly fine to borrow design/API ideas from other clients too.
* The UI may be backed by some mocked C++ code where Psi code should be taken as a guidance. This is perfectly fine to borrow design/API ideas from other clients too. This mocked code is mostly needed to initiate some UI actions unrelated to self user (e.g. some contact changes their status) and catch/log UI events.
* It's assumed the UI will be used not just with Psi. So the branded parts preferably should be kept aside and instead set via API.
* It's assumed the UI will be used not just with Psi. So the branded parts preferably should be kept aside and instead set via API.
* The UI should provide next functions: model/view-based chat/group-chat, roster, avatars, statuses, recent (group-)chats, contact list (with groups/tags), contacts management, own status management.
* The UI should provide next functions: model/view-based chat/group-chat, roster, avatars, statuses, recent (group-)chats, fetching unlimited message log, contact list (with groups/tags), contacts management, own status management.
* The UI should be adaptable to screen size (read: there plans to use it for mobile platforms too).
* The UI should be compilable at least on Linux, MacOS and Windows.


= PGPainless =
=== Message Archive Management ===
 
''Brief explanation:'' Support for server-based message archive
''Involved Technologies:'' Qt, C++<br/>
''Relevant readings:'' https://xmpp.org/extensions/xep-0313.html<br/>
''Size:'' small<br/>
''Difficulty:'' Medium<br/>
''Deliverables / Expected Results:''<br/>
* Implement MAM in iris (https://github.com/psi-im/iris) library.
* Integrate the new message storage with current local history management in Psi (which is based on iris).
* Keep the ability to use local history (for cases when server MAM is unavailable or undesired) and combine both sources seamlessly
* If it's necessary update Psi UI to make it work with the new mechanism.
* Keep in mind related to MAM XEPs to not make something completely incompatible.
 
== PGPainless ==


[https://pgpainless.org/ PGPainless] is a Java OpenPGP library. While it is not strictly an XMPP related project, it has it has its origins in GSoC and the XMPP community, since it was created as a [https://blog.jabberhead.tk/summer-of-code-2018/ Summer of Code project in 2018].
[https://pgpainless.org/ PGPainless] is a Java OpenPGP library. While it is not strictly an XMPP related project, it has it has its origins in GSoC and the XMPP community, since it was created as a [https://blog.jabberhead.tk/summer-of-code-2018/ Summer of Code project in 2018].
Interested students are encouraged to join '''[xmpp:gsoc@muc.xmpp.org?join gsoc@muc.xmpp.org]'''


=== OpenPGP Message Parsing using Parser Generator ===
=== OpenPGP Message Parsing using Parser Generator ===


''Size:'' Small<br/>
''Brief explanation:'' Enforce OpenPGP message syntax during parsing by using a Parser Generator such as JavaCC<br/>
''Brief explanation:'' Enforce OpenPGP message syntax during parsing by using a Parser Generator such as JavaCC<br/>
''Involved Technologies:'' Java, Bouncy Castle, EBNF<br/>
''Involved Technologies:'' Java, Bouncy Castle, EBNF<br/>
Line 217: Line 225:
* The project has the goal to improve PGPainless' score in this category by rewriting/improving the libraries' rather naive [https://github.com/pgpainless/pgpainless/blob/master/pgpainless-core/src/main/java/org/pgpainless/decryption_verification/DecryptionStreamFactory.java message parser logic].
* The project has the goal to improve PGPainless' score in this category by rewriting/improving the libraries' rather naive [https://github.com/pgpainless/pgpainless/blob/master/pgpainless-core/src/main/java/org/pgpainless/decryption_verification/DecryptionStreamFactory.java message parser logic].
* An ideal implementation would enforce the OpenPGP message structure syntax defined as EBNF. This could be done by using a parser generator such as [https://javacc.github.io/javacc/ JavaCC].
* An ideal implementation would enforce the OpenPGP message structure syntax defined as EBNF. This could be done by using a parser generator such as [https://javacc.github.io/javacc/ JavaCC].
== Converse.js ==
[https://conversejs.org/ Converse] is a web-based XMPP client. It has different modes, allowing it to be integrated into existing websites, used as a webchat for a specific chatroom, or used as a full-fledged XMPP client on its own. There is also an [https://www.electronjs.org/ electron]-based version available.
* [https://xmpp.org/chat#converse/room?jid=discuss@conference.conversejs.org Webchat]
=== Support Audio/Video calls in Converse ===
''Size:'' small (175hrs)<br/>
''Brief explanation:'' Add support for Audio/Video Communication via Jingle.<br/>
''Involved Technologies:'' JavaScript, WebRTC, Jingle<br/>
''Relevant readings:'' [https://xmpp.org/extensions/xep-0166.html XEP-0166], [https://xmpp.org/extensions/xep-0167.html XEP-0167], [https://xmpp.org/extensions/xep-0353.html XEP-0353]<br />
''Deliverables / Expected Results:''<br/>
* The goal is to create a Converse plugin that adds the ability to make one-on-one audio/video calls from Converse
* The audio/video calls must be compatible with other XMPP clients such as [https://conversations.im Conversations]

Latest revision as of 17:25, 6 January 2023

Participation

The XSF has plans to be a mentoring organisation for Google Summer of Code 2022. This is an early attempt to ensure good planning and enough time for the application process.

XMPP oriented projects should still add project ideas to the below list.

Organisation: Edward offered to help the organisation. Please reach out to the GSoC chat if you want to support as well of plan to participate in any way: GSoC chat room gsoc@muc.xmpp.org

Dates

The various dates for the program will be expected by the beginning of next year 2022, more information on the GSoC Website

Otherwise, all other info is on GSoC page

Find their FAQ.

Overview

Date Meeting Participants
2021-12-21 Kick-off Meeting flow, vanitasviate, emus
2021-01 Organisation Application preparation emus & XSF members
2021-02 Organisation Application emus
2021-02 Projects Application Project maintainers

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 commerical client alike Google Talk, Whatsapp or Google Hangouts uses as an XMPP-derivative of the protocol uses or in some aspects of XMPP internally, and as well as end-users it's used extensively by enterprises and governments but of course also the open variant propagated and standardised by the XSF.

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 :)

How to get started?

  • Read the Google Summer of Code 2022 guidelines!
  • Review the projects below and inform yourself if that could be of interested for you Link
  • Reach out the projects contact, tell about yourself and why you are interested (see project section)
  • Join our GSoC group chat channel via XMPP (you can reach out via mail of course as well, but we really recommend to also use the technology) Link
  • Continue to discuss teaser tasks with the project contact Link
  • If everything is fine, start preparing a proposal and if reviewed submit the application Link

Join the group chat!

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

How to join:

Teaser Tasks

  • Submit small patches: 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 should not 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.

Student Proposal

In addition to writing a proposal, engagement with the actual projects before the application is very important. Showing motivation by taking interest in the project and communicating with the mentors is very advantageous. Solving a typical small problem can show that a student is serious with their plans.

Of course, a good proposal is fine, too. We would be interested in the motivation behind the application. Additionally, the student's background, the possible experiences and preferred technologies, the outcome of a preliminary research on the protocol and codesbases the student might work on. Furthermore, their own perspective on how the collaboration and organization through the Google Summer of Code with the mentors should look like and a review of which possible problems may be faced are also helpful.

Furthermore we recommend a bit of research on online guides to write a proposal or motivational letter. The official guidelines of the Google Summer of Code 2022 are highly recommended to read first.

Project Ideas

Dino

Website: https://dino.im/
Source Code: https://github.com/dino/dino
Description: Dino is a modern open-source chat client for the desktop. It focuses on providing a clean and reliable Jabber/XMPP experience while having your privacy in mind.
Project Contact: larma, fiaxh
Relevant readings: Vala Tutorial
Teaser Tasks: Good first issues
Chat: chat@dino.im or Webchat

Note: Feel invited to combine small projects into a large project, if you want to do a large project. Combinations of the 3 projects related to file transfers are a particular fit for a large project.

Inline link preview

Brief explanation: Add support for attaching and displaying link metadata.
Involved Technologies: Vala, XMPP, HTML, OpenGraph
Relevant readings: OpenGraph protocol
Project size: Small (175h)
Difficulty: Easy
Deliverables / Expected Results:

  • User interface widget to display metadata, suitable for preview image, title, abstract and the original url/domain.
  • Automatic generation of metadata, working with major websites. This should be done in a generic fashion, not targeting a specific website
  • Design or reuse a specification for sending metadata with XMPP messages

Stateless file sharing

Brief explanation: Attach metadata to HTTP file transfers and display it.
Involved Technologies: Vala, XMPP, HTTP
Relevant readings: XEP-0446, XEP-0447, XEP-0363
Project size: Small (175h)
Difficulty: Medium
Deliverables / Expected Results:

  • Use Stateless file sharing (SFS) for outgoing HTTP file transfers.
  • Send minimal thumbnails (less than 16 pixels) for image file transfers
  • Display minimal thumbnails blurred on incoming file transfers (before file is fetched).

On-demand p2p file sharing

Brief explanation: Allow for on-demand multi-party peer-to-peer file transfers.
Involved Technologies: Vala, XMPP, Jingle
Relevant readings: XEP-0447, XEP-0234
Project size: Small (175h)
Difficulty: Medium
Important Note: This project can only be achieved by first implementing the "Stateless file sharing" project.
Deliverables / Expected Results:

WebRTC file transfer

Brief explanation: Add support for WebRTC-based file transfers using WebRTC data channels for web compatibility and improved NAT traversal.
Involved Technologies: Vala, XMPP, Jingle, WebRTC
Relevant readings: XEP-0343, XEP-0234
Project size: Small (175h)
Difficulty: Hard
Deliverables / Expected Results:

Rich message support

Brief explanation: Add support for creating and displaying rich test messages.
Involved Technologies: Vala, XMPP, GTK+, Pango
Relevant readings: XEP-0393, XEP-0394, XEP-0372
Project size: Small (175h)
Difficulty: Easy
Deliverables / Expected Results:

  • Add rich text features to Dino's chat input box using buttons and well-known keyboard shortcuts for bold, italic, strikethrough, monospace, lists, blockquotes, code blocks, links and mentions.
  • Allow users to activate Markdown input, which is instantly converted to rich text during input.
  • Send rich text messages using Message Markup and References as well as a fallback using Message Styling
  • Apply markup to messages in conversation history via Pango Attributes

Psi

Website: https://psi-im.org/
Source Code: https://github.com/psi-im/psi
Description: An XMPP client for advanced users.
Project Contact: Sergei Ilinykh, Tehnick (Boris Pek), VitoZz (Vitaly Tonkacheyevb)
Relevant readings: [1]
Teaser Tasks: [2]
Chat: psi-dev@conference.jabber.ru or Webchat

Mediated Information Exchange (MIX)

Brief explanation: Add support for Mediated Information Exchange (MIX).
Involved Technologies: Qt, C++
Relevant readings: XEP-0369: Mediated Information eXchange (MIX)
Size: large
Difficulty: Hard
Deliverables / Expected Results:

  • A set of classes in iris library to support MIX extensions.
  • A MIX management component in Psi itself similar to one implemented for MUC.
  • A Working UI (probably some rework of the current MUC UI to make it compatible with MIX)
  • The solution has to be tested with popular XMPP servers

QML UI

Brief explanation: A modern looking UI for both (group-)chat and roster Involved Technologies: Qt, QML, JavaScript, C++
Relevant readings: https://en.wikipedia.org/wiki/QML
Size: large
Difficulty: Medium
Deliverables / Expected Results:

  • It's a huge task, so expected an implementation of standalone QML/*cross-platform* UI with clear and well-documented API interfaces.
  • The UI may be backed by some mocked C++ code where Psi code should be taken as a guidance. This is perfectly fine to borrow design/API ideas from other clients too. This mocked code is mostly needed to initiate some UI actions unrelated to self user (e.g. some contact changes their status) and catch/log UI events.
  • It's assumed the UI will be used not just with Psi. So the branded parts preferably should be kept aside and instead set via API.
  • The UI should provide next functions: model/view-based chat/group-chat, roster, avatars, statuses, recent (group-)chats, fetching unlimited message log, contact list (with groups/tags), contacts management, own status management.
  • The UI should be adaptable to screen size (read: there plans to use it for mobile platforms too).
  • The UI should be compilable at least on Linux, MacOS and Windows.

Message Archive Management

Brief explanation: Support for server-based message archive Involved Technologies: Qt, C++
Relevant readings: https://xmpp.org/extensions/xep-0313.html
Size: small
Difficulty: Medium
Deliverables / Expected Results:

  • Implement MAM in iris (https://github.com/psi-im/iris) library.
  • Integrate the new message storage with current local history management in Psi (which is based on iris).
  • Keep the ability to use local history (for cases when server MAM is unavailable or undesired) and combine both sources seamlessly
  • If it's necessary update Psi UI to make it work with the new mechanism.
  • Keep in mind related to MAM XEPs to not make something completely incompatible.

PGPainless

PGPainless is a Java OpenPGP library. While it is not strictly an XMPP related project, it has it has its origins in GSoC and the XMPP community, since it was created as a Summer of Code project in 2018.

Interested students are encouraged to join gsoc@muc.xmpp.org

OpenPGP Message Parsing using Parser Generator

Size: Small
Brief explanation: Enforce OpenPGP message syntax during parsing by using a Parser Generator such as JavaCC
Involved Technologies: Java, Bouncy Castle, EBNF
Relevant readings: RFC4880: OpenPGP Message Format
Deliverables / Expected Results:

  • In the OpenPGP Interoperability Test Suite PGPainless currently fails some tests related to unusual message structures.
  • The project has the goal to improve PGPainless' score in this category by rewriting/improving the libraries' rather naive message parser logic.
  • An ideal implementation would enforce the OpenPGP message structure syntax defined as EBNF. This could be done by using a parser generator such as JavaCC.

Converse.js

Converse is a web-based XMPP client. It has different modes, allowing it to be integrated into existing websites, used as a webchat for a specific chatroom, or used as a full-fledged XMPP client on its own. There is also an electron-based version available.

Support Audio/Video calls in Converse

Size: small (175hrs)
Brief explanation: Add support for Audio/Video Communication via Jingle.
Involved Technologies: JavaScript, WebRTC, Jingle
Relevant readings: XEP-0166, XEP-0167, XEP-0353
Deliverables / Expected Results:

  • The goal is to create a Converse plugin that adds the ability to make one-on-one audio/video calls from Converse
  • The audio/video calls must be compatible with other XMPP clients such as Conversations