Summer of Code 2017

From XMPP WIKI
Jump to: navigation, search

Participation

The XSF is a confirmed mentoring organisation for Google Summer of Code 2017.

Dates

The various dates for the programme can be found on the Google Summer of Code 2017 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

[[#Conversations|Conversations]]

Conversations Conversations is a state of the art mobile instant messaging client for Android. It provides a modern user experience and is on top of the current developments in XMPP standards.

[[#Converse.js|Converse.js]]

Converse.js Converse.js is a web-based XMPP/Jabber chat client written in javascript, CSS and HTML.

[[#Metre|Metre]]

Metre Metre is an open source XMPP SBC (a perimeter S2S proxy).

[[#MiniDNS|MiniDNS]]

MiniDNS MiniDNS is a minimal DNS client client library for Android and Java SE. It can parse resource records (A, AAAA, NS, SRV, …) and is easy to use and extend. MiniDNS aims to be secure, modular, leightweight and as simple as possible. It also provides experimental support for DNSSEC and DANE, and is thus the ideal resolver if you want to bring DNSSEC close to your application.

[[#MongooseIM_and_Mongosta|Mongoose IM]]

MongooseIM and Mongosta MongooseIM is a robust and efficient XMPP platform aimed at large installations. Mongosta is a third generation mobile instant messaging.

[[#Openfire|Openfire]]

Openfire Openfire is a real time collaboration (RTC) server licensed under the Open Source Apache License. It uses the only widely adopted open protocol for instant messaging, XMPP (also called Jabber).

[[#Smack|Smack]]

Smack Smack is a highly modular and portable open source XMPP client library written in Java for JVMs and Android.

[[#Spark|Spark]]

Spark Spark is an Open Source, cross-platform, XMPP-based IM client optimized for businesses and organizations.

[[#Swift_and_Swiften|Swift]]

Swift and Swiften Swift is a cross-platform desktop XMPP client written in C++11 and Qt, with a focus on simplicity, usability and security.

Join the group chat!

Use a regular XMPP client and join the GSoC chat room:

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

Conversations

Port Conversations to Desktop using JavaFX and Babbler

  • Software Project: Conversations
  • Software URL: https://conversations.im
  • Software VCS URL: https://github.com/siacs/Conversations
  • Software Description: Conversations is a state of the art mobile instant messaging client for Android. It provides a modern user experience and is on top of the current developments in XMPP standards
  • Brief explanation: Currently Conversations is only available on Android 4.0+ operating systems. However users want a similiar experience on their Desktop. This project is about creating a desktop variant of Conversations which aims to provide the same user experience.
  • Expected results: It is impossible within the time frame of GSOC to copy the entire functionality of Conversations however the main features of Conversations can be boilt down to a few managable tasks. The focus should definitely by on UI coding though. If the actual XMPP side of things turn out to be too much work it is preferable to have a complete UI.
    • Create a single page / slack like UI with Java FX
    • Carbons support
    • HTTP upload and preview of Images
    • Infite history srcolling with local archive and MAM
    • OMEMO encryption
  • Knowledge Prerequisite:
    • Java 8
    • JavaFX (can be learned)
    • Familiarity with Conversations on Android
    • Git
    • basic knowledge of XMPP
  • Difficulty: Moderate
  • Implementation Language: Java 8
  • Mentor: Daniel Gultsch
  • Contact Details: MUC at conversations@conference.siacs.eu

Implement client-side MIX in Conversations

  • Software Project: Conversations
  • Software URL: https://conversations.im
  • Software VCS URL: https://github.com/siacs/Conversations
  • Software Description: Conversations is a state of the art mobile instant messaging client for Android. It provides a modern user experience and is on top of the current developments in XMPP standards
  • Brief explanation: MIX is the upcoming standard in group chats. This project would be one of the first implementations of this standard
  • Expected results:
    • Allow users to subscribe to MIX channels
    • Display users in a channel
    • Implement UI to create new channels
  • Difficulty: Moderate
  • Implementation Language: Java / Android
  • Mentor: Daniel Gultsch
  • Contact Details: MUC at conversations@conference.siacs.eu

Converse.js

OMEMO encryption in Converse.js

  • Software Project: Converse.js
  • Software URL: https://conversejs.org
  • Software VCS URL: https://github.com/jcbrand/converse.js/
  • Software Description: Converse.js is a web-based XMPP/Jabber chat client written in javascript, CSS and HTML
  • Brief explanation: The goal of this project would be to integrate XEP-0384 "OMEMO Encryption" into Converse.js.
  • Expected results:
    • Converse.js already supports OTR end-to-end encryption. We would like it to support OMEMO as well. The existing UI could be adjusted and reused.
    • Hopefully there is a library that can be used (perhaps the one from Cryptocat).
    • The work would be implemented in a separate plugin (as all features of Converse.js are).
  • Knowledge Prerequisite:
    • Solid working knowledge of Javascript, CSS and HTML. An understanding of how OMEMO works. The ability to work on a relatively large existing codebase.
  • Difficulty: medium
  • Implementation Language: Javascript
  • Mentor: JC Brand
  • Contact Details: XMPP-MUC: discuss@conference.conversejs.org or https://opkode.com/contact.html

MIX groupchat support in Converse.js

  • Software Project: Converse.js
  • Software URL: https://conversejs.org
  • Software VCS URL: https://github.com/jcbrand/converse.js/
  • Software Description: Converse.js is a web-based XMPP/Jabber chat client written in javascript, CSS and HTML
  • Brief explanation: The goal of this project would be to integrate XEP-0369 "Mediated Information Exchange (MIX)" into Converse.js.
  • Expected results:
    • MIX is the next generation groupchat protocol for XMPP. It addresses and fixes some of the deficiencies of MUC, which is the currently used groupchat protocol. For this project we would like to have the ability to create, join, chat and configure in MIX groupchats.
  • Knowledge Prerequisite:
    • Solid working knowledge of Javascript, CSS and HTML. An understanding of how MIX works. The ability to work on a relatively large existing codebase.
  • Difficulty: medium
  • Implementation Language: Javascript
  • Mentor: JC Brand
  • Contact Details: XMPP-MUC: discuss@conference.conversejs.org or https://opkode.com/contact.html

Metre

Test Infrastructure for Metre

  • Software Project: Metre
  • Software URL: https://github.com/dwd/Metre
  • Software VCS URL: https://github.com/dwd/Metre
  • Software Description: Metre is an open source XMPP SBC (a perimeter S2S proxy).
  • Brief explanation: Metre doesn't have any unit or wider-scale testing code right now - or at least none that works properly. It should be possible to mock the networking and drive that from scripting, such that it can be tested even in the complex networking conditions encourntered in the wild. Fixing existing unit testing and adding more would also be useful.
  • Expected results: 80% (or higher) code coverage on an unattended automated test run.
  • Knowledge Prerequisite:
    • A little XMPP would be useful.
    • Code coverage tools (I can help with this though).
    • Network programming.
  • Difficulty: Medium
  • Implementation Language: C++11
  • Mentor: Dave Cridland
  • Contact Details: dave.cridland@surevine.com (Email/XMPP)

File Transfer policing for Metre

  • Software Project: Metre
  • Software URL: https://github.com/dwd/Metre
  • Software VCS URL: https://github.com/dwd/Metre
  • Software Description: Metre is an open source XMPP SBC (a perimeter S2S proxy).
  • Brief explanation: Metre sits between domains, and could police file transfers. There's a number of interesting features in this area - it could, for instance, act as a file transfer proxy, reterminating peer-to-peer sessions. It could

also virus-check files. I'd appreciate a student able to flesh out some concrete features here, but there's a wide scope.

  • Expected results: 80% (or higher) code coverage on an unattended automated test run.
  • Knowledge Prerequisite:
    • Solid XMPP, particularly Jingle File Transfer and Session Initiation - or an ability to learn fast.
    • Network programming.
  • Difficulty: Hard
  • Implementation Language: C++11
  • Mentor: Dave Cridland
  • Contact Details: dave.cridland@surevine.com (Email/XMPP)

MiniDNS

Add support to MiniDNS for CNAME / DNAME (RFC 6672) redirection in queries and DNSSEC

  • Software Project: MiniDNS
  • Software URL: hhttps://github.com/rtreffer/minidns/
  • Software VCS URL: https://github.com/rtreffer/minidns/
  • Software Description: MiniDNS is a minimal DNS client client library for Android and Java SE. It can parse most relevant resource records (A, AAAA, NS, SRV, …) and is easy to use and extend. It also provides experimental support for DNSSEC and DANE.
  • Brief explanation: MiniDNS currently does not follow CNAME/DNAME redirections, and because of that, is also missing support for the verification of the redirection chain via DNSSEC. This is the only thing missing to achieve full DNSSEC support.
  • Expected results:

The involved MiniDNS components, which need to be extended by CNAME/DNAME redirection support are in order:

  • ** DNSClient
    • Iterative Resolver
    • DNSSEC verifier
  • Involved Technologies:
    • Java
    • DNS
    • DNSSEC
  • Difficulty: medium-hard
  • Implementation Language: Java
  • Mentor: Florian Schmaus
  • Contact Details: flo@geekplace.eu

MongooseIM and Mongosta

MIX in MongooseIM

  • Software Project: MongooseIM
  • Software URL: https://www.erlang-solutions.com/products/mongooseim.html
  • Software VCS URL:
  • Software Description: MIX channels/groupchats in the MongooseIM server
  • Brief explanation: offer a federated, clustered MIX service in MongooseIM
  • Expected results:
    • Implementation of the XEP(s)
    • Feedback to the XSF
    • Interop tests passed with clients and other server implems
  • Knowledge Prerequisite:
    • Erlang
    • PubSub
  • Difficulty: hard
  • Implementation Language: Erlang
  • Mentor: text
  • Contact Details: JID/email

Form-based chatapps/integrations/chatbots in MongooseIM or Mangosta Android/iOS

  • Software Project: MongooseIM
  • Software URL: https://www.erlang-solutions.com/products/mongooseim.html
  • Software VCS URL:
  • Software Description: XMPP platform that contain server, client libs, clients, and soon ICE + push notifs components
  • Brief explanation: forms are powerful in XMPP. Only they are out of chat. Also they are not archived. The goal is to make in-chat+archived forms, including the questions, multiple possible answers, and all participants answers. It would be by using XEP-0004: Data Forms, XEP-0346: Form Discovery and Publishing, XEP-0060: Publish-Subscribe, and XEP-0372: References
  • Expected results:
    • A draft open standard specification (ProtoXEP)
    • MongooseIM implementation (erlang)
    • Mangosta iOS and XMPPFramework implementation OR Mangosta Android and Smack implementation
  • Knowledge Prerequisite:
    • Forms
    • MAM
    • PubSub
    • References
  • Difficulty: hard
  • Implementation Language: Erlang, and Java or Swift+Objective-C
  • Mentor: Nicolas Vérité
  • Contact Details: both jid and email address are nicolas dot verite at erlang dash solutions dot com

MIX in Mangosta iOS and/or Android

OMEMO in Mangosta iOS and/or Android

Openfire

DNSSEC support for Openfire

  • Software Project: Openfire
  • Software URL: https://igniterealtime.org/projects/openfire
  • Software VCS URL: https://github.com/igniterealtime/Openfire
  • Software Description: Openfire is a real time collaboration (RTC) server licensed under the Open Source Apache License. It uses the only widely adopted open protocol for instant messaging, XMPP (also called Jabber).
  • Brief explanation: DNSSEC is used to prevent the forgery of DNS records. A DNSSEC-capable resolver can verify that the looked-up records are valid and complete.
  • Expected results:
    • A S2S implementation that validates DNSSEC-protected records of the remote domain when establishing XMPP server federation.
  • Difficulty: Moderate
  • Implementation Language: java
  • Mentor: Guus and/or Dave at IgniteRealtime.org
  • Contact Details: guus.der.kinderen@igniterealtime.org (<-- JID)

Smack

OMEMO secured Jingle file transfer in Smack

  • Software Project: Smack
  • Software URL: https://www.igniterealtime.org/projects/smack/
  • Software VCS URL: https://github.com/igniterealtime/Smack
  • Software Description: Smack is a highly modular and portable open source XMPP client library written in Java for JVMs and Android.
  • Brief explanation: Add support for Jingle based file transfer which can be secured via OMEMO to Smack.
  • Expected results: The first milestone would be standard Jingle-based file transfer in Smack. After that milestone is reached, support for OMEMO-secured Jingle-based file transfer has to be added. While Jingle-based file transfer is already specified, the existing Jingle/OMEMO file transfer ProtoXEP needs an overhaul, in order to become an experimental XEP.
  • Involved Technologies:
    • Java
    • Jingle
    • OMEMO
    • Android
  • Difficulty: medium-hard
  • Implementation Language: Java
  • Mentor: Florian Schmaus
  • Contact Details: flo@geekplace.eu

Adding XMPP-IoT to the openHAB smarthome project using Smack

  • Software Project: Smack and OpenHAB
  • Software URL: https://www.igniterealtime.org/projects/smack/ and http://www.openhab.org
  • Software VCS URL: https://github.com/igniterealtime/Smack and https://github.com/openhab/openhab1-addons
  • Software Description: Smack is a highly modular and portable open source XMPP client library written in Java for JVMs and Android.
  • Brief explanation: OpenHAB is a 'smarthome' project, integrating almost any existing legacy protocols and gadgets to manage and control your home. By connecting the openHAB to XMPP and the extensions for Internet of Things (IoT) you can eliminate opening ports in your firewall to your local openHAB server and be able to share sensors and actuators in a secure way between HABs (Home Automation Busses). There is already a chat implementation based on Smack incorporated in the openHAB today. The project will

extend that and implement OSGI bindings and actions to be able to handle sensor and actuator data.

  • Expected results: The goal is not to implement 100% of each XEP but to get the minimal use case to start getting the openHAB connected over the XMPP-IoT network.
    • Integration of the implemented XEP-0323.
    • Integration of the implemented XEP-0324.
    • Integration of the implemented XEP-0325.
    • Integration of the implemented XEP-0347.
    • A binding in OpenHAB for XMPP with smack.
    • Optional implementation Concentrator, XEP-0326
  • Involved Technologies:
    • Java
    • OSGi
  • Difficulty: medium
  • Implementation Language: Java
  • Mentor: Davide Conzon
  • Contact Details: davide.conzon@ismb.it

Spark

Certificate management support for Spark

  • Software Project: Spark
  • Software URL: https://igniterealtime.org/projects/spark
  • Software VCS URL: https://github.com/igniterealtime/Spark
  • Software Description: Spark is an Open Source, cross-platform, XMPP-based IM client optimized for businesses and organizations.
  • Brief explanation: XMPP makes use of digital certificates for security. Spark has very little support of the management of certificates that are used.
  • Expected results:
    • A UI that allows an end-user to manually approve or reject a certificate presented by an XMPP domain that is being authenticated against.
    • Management of previously accepted or denied certificates (and/or their issuers)
    • Interaction with online revocation lists
    • Support for mutual-authentication / client-sided certificates.
  • Knowledge Prerequisite:
    • UI implementation in Java
    • Public key infrastructure / TLS
  • Difficulty: High
  • Implementation Language: java
  • Mentor: Guus and/or Dave at IgniteRealtime.org
  • Contact Details: guus.der.kinderen@igniterealtime.org (<-- JID)

XEP-0280 Message Carbons support for Spark

  • Software Project: Spark
  • Software URL: https://igniterealtime.org/projects/spark
  • Software VCS URL: https://github.com/igniterealtime/Spark
  • Software Description: Spark is an Open Source, cross-platform, XMPP-based IM client optimized for businesses and organizations. It is developed in Java and is primarily based on the Smack library.
  • Brief explanation: The XEP-0280 extension of the XMPP protocol allows clients to forward send and received messages to other connected resources. Underlying Smack library (base of Spark) already supports this, as well as many XMPP servers. Spark should do that also.
  • Expected results: Spark is automatically forwarding sent/received messages to other connected resources of the same JID to insert them into history, when a server supports XEP-0280.
  • Difficulty: Easy
  • Implementation Language: java
  • Mentor: Oleg and/or Guus and/or Dave at IgniteRealtime.org
  • Contact Details: guus.der.kinderen@igniterealtime.org (<-- JID)

XEP-0313 Message Archive Management support for Spark

  • Software Project: Spark
  • Software URL: https://igniterealtime.org/projects/spark
  • Software VCS URL: https://github.com/igniterealtime/Spark
  • Software Description: Spark is an Open Source, cross-platform, XMPP-based IM client optimized for businesses and organizations. It is developed in Java and is primarily based on the Smack library.
  • Brief explanation: The MAM extension of the XMPP protocol allows clients to store and retrieve history from the server (if it supports it). Underlying Smack library (base of Spark) already supports this, as well some XMPP servers. Spark should be able to do that also.
  • Expected results: Spark can be set to store/retrieve history from the server, instead of storing it locally when a server supports XEP-0313. This also involves updating Spark to Smack 4.2 or later.
  • Knowledge Prerequisite:
    • UI implementation in Java (minimal)
  • Difficulty: Medium
  • Implementation Language: java
  • Mentor: Oleg and/or Guus and/or Dave at IgniteRealtime.org
  • Contact Details: guus.der.kinderen@igniterealtime.org (<-- JID)

Swift and Swiften

Add Voice/Video chat support to Swift

  • Software Project: Swift
  • Software URL: https://swift.im/
  • Software VCS URL: https://github.com/swift/swift
  • Software Description: Swift is a cross-platform desktop XMPP client written in C++11 and Qt, with a focus on simplicity, usability and security.
  • Brief explanation: Voice/Video chat is a feature people expect from messaging software nowadays. Luckily there already is a XMPP standard for this XEP-0167 and a native library that takes care of media input/output, encoding, muxing, synchronisation and more, see libwebrtc.
  • Expected results:
    • Required classes for Swiften that deal with parsing/serialising from C++ element representation of XEP-0167
    • Swiften code for managing Jingle RTP sessions, with small example programs that can send/receive RTP streams from command line
    • Integration of the new Jingle RTP session code into Swift Qt GUI
  • Knowledge Prerequisite:
    • Good C++ knowledge, ideally C++11
    • Some Qt5 knowledge
  • Difficulty: Medium
  • Implementation Language: C++
  • Mentor: Tobias and/or Edwin
  • Contact Details: Join the Swift room at swift@rooms.swift.im and feel free to ask.

Implement MIX in Swift and Swiften

  • Software Project: Swift
  • Software URL: https://swift.im/
  • Software VCS URL: https://github.com/swift/swift
  • Software Description: Swift is a cross-platform desktop XMPP client written in C++11 and Qt, with a focus on simplicity, usability and security.
  • Brief explanation: MIX is a new protocol for group conversations in XMPP, aiming to replace current MUC protocol. The project would include the client side protocol implementation in Swiften, the C++ XMPP library behind Swift, followed by implementing group chat logic in Swift/Controllers, and integrating the whole in the Swift Qt UI.
  • Expected results:
    • Implement the required serialising and parsing classes for Swiften, including tests
    • Implement a class managing a MIX channel in Swiften, including tests
    • Implement a MIXController for Swift/Controllers, including tests
    • Integrate the new MIXController in parallel to the existing MUCController in the Swift Qt UI
    • A mock MIX component for simple testing
  • Knowledge Prerequisite:
    • Good C++ knowledge, ideally C++11
    • Some Qt5 knowledge
  • Difficulty: medium
  • Implementation Language: C++
  • Mentor: Tobias and/or Edwin
  • Contact Details: Join the Swift room at swift@rooms.swift.im and feel free to ask.

Implement In-Band Real Time Text and improve general accessibility in Swift

  • Software Project: Swift
  • Software URL: https://swift.im/
  • Software VCS URL: https://github.com/swift/swift
  • Software Description: Swift is a cross-platform desktop XMPP client written in C++11 and Qt, with a focus on simplicity, usability and security.
  • Brief explanation: XEP-0301: In-Band Real Time Text is a protocol that greatly improves the chat user experiencE for people who experience disabilities. The project would consist of implementing the required components in Swiften, Swift/Controllers and the Swift Qt UI. If the project proceeds faster than planned, the remaining time could be used to improve general accessibility of the Qt UI, like making sure the whole application is keyboard navigable and UI elements expose useful information to screen readers.
  • Expected results:
    • Support for the required protocol parsers/serialisers for XEP-0301 in Swiften
    • Support in the Swift Qt UI to enable real-time text support, if a contact also supports the feature
    • The Swift Qt UI being completely keyboard navigable
    • The Swift Qt UI returning useful descriptions to screen-readers
  • Knowledge Prerequisite:
    • Good C++ knowledge, ideally C++11
    • Some Qt5 knowledge
  • Difficulty: Easy
  • Implementation Language: C++
  • Mentor: Tobias and/or Edwin
  • Contact Details: Join the Swift room at swift@rooms.swift.im and feel free to ask.

Design and Implement Multi-Account Support for Swift

  • Software Project: Swift
  • Software URL: https://swift.im/
  • Software VCS URL: https://github.com/swift/swift
  • Software Description: Swift is a cross-platform desktop XMPP client written in C++11 and Qt, with a focus on simplicity, usability and security.
  • Brief explanation: Currently Swift has very experimental and suboptimal support for multi account support. This project would be about replacing this with good multi-account support with great modern user experience. Initially there will be a short collective design and prototyping phase, followed by the implementation of the design.
  • Expected results:
    • A user will be able to setup multiple XMPP accounts in a single Swift instance which can be online at the same time
    • The user is able to easily identify the corresponding account for contacts shown in the UI
    • Redesign "Contacts" and "Chats" views accordingly to work with multiple accounts
  • Knowledge Prerequisite:
    • Good C++ knowledge, ideally C++11
    • Some Qt5 knowledge
  • Difficulty: Medium
  • Implementation Language: C++
  • Mentor: Tobias and/or Edwin
  • Contact Details: Join the Swift room at swift@rooms.swift.im and feel free to ask.

Design a Chat View Free of QtWebKit/QtWebEngine

  • Software Project: Swift
  • Software URL: https://swift.im/
  • Software VCS URL: https://github.com/swift/swift
  • Software Description: Swift is a cross-platform desktop XMPP client written in C++11 and Qt, with a focus on simplicity, usability and security.
  • Brief explanation: Currently the Swift Qt UI has two chat views, a default QtWebKit based one and a simple Qt one for screen readers. This is due to QtWebKit failing to expose accessibility information to screen readers. The goal of this project would be trying to implement a single design using Qt5 and/or QML, that looks visually like the current design, but also provides the required accessibility information to screen readers.
  • Expected results:
    • A single chat view class that works visually and for screen readers, and does not require a full HTML/JS/… rendering stack like QtWebKit/QtWebEngine
    • The new chat view should support all the features currently supported in the QtWebKit based chat view
    • The new chat view should be relatively easy to extend for potential future features like in-line media and real-time media like voice/video chat
  • Knowledge Prerequisite:
    • Good C++ knowledge, ideally C++11
    • Some Qt5 knowledge
  • Difficulty: Medium
  • Implementation Language: C++
  • Mentor: Tobias and/or Edwin
  • Contact Details: Join the Swift room at swift@rooms.swift.im and feel free to ask.