Difference between revisions of "Summer of Code 2010 Project Ideas"

Jump to navigation Jump to search
(Inline ideas from Prosody GSoC page, and various other improvements to the page)
(No difference)

Revision as of 02:23, 28 March 2010

Here are some project ideas for the XSF's involvement in GSoC 2010. Visit our Summer of Code 2010 page for information about applying.

High-Level Priorities

The high-level priorities for the XMPP community are listed here with summaries (see also the XSF Roadmap). You may work to implement them in any of the clients, servers or libraries lacking support (see the project-specific lists below).

Choose which project you would like to work with, based on the language their codebase is written in, and how well you fit with their community. Discuss your proposal with them directly to see if it is a good idea.

Jingle File Transfer

We are working to migrate from the old file transfer method XEP-0096 to a more robust method based on Jingle. The new Jingle-based method has been implemented in Pidgin but not yet in other clients. We'd love to see more implementations and get more deployment experience with this method so that we can correct and advance the relevant specs, which are:

Pidgin already has Jingle File Transfer, but it still needs implementing in other clients and libraries, see below.

Reliability Improvements

The XSF has defined two specifications that make XMPP communication more reliable: Stream Management and Message Receipts. We won't know if these technologies solve the problem until we have more implementation and deployment experience, so we need to get busy coding.

Servers, clients and libraries need this support (see below).

I (MattJ) have some server-side code for XEP-0198 (Stream Management) in Prosody, and am willing (and very interested) to work with someone adding support to a(ny) client so we can get a pair of interoperable implementations going this summer.

Mobile Optimizations

As with reliable communication, the XSF is actively working on optimizations for mobile environments. The two most relevant specifications are Roster Versioning and SIFT. Here again we're looking for more implementation and deployment experience.

Stronger Security

Information security is a never-ending, multi-faceted challenge. Some relevant technologies in the XMPP community are:

In addition, we have several competing proposals for end-to-end encryption but they are fairly experimental.

General projects

XMPP for the social web

Proposer: Kevin Smith

Difficulty: Variable (scope can be agreed during applications)

Student requirements: Competent development skills, self-drive, ideas.

There are many many websites that involve a social component. This is typically some sort of list of friends, a way to exchange messages, a way to expose information about yourself, and general information feeds. These are all functions that XMPP natively supports very well (the XMPP Roster, Message stanzas, PEP, PubSub etc.). XMPP also has a feature that most of these sites do not - it federates, so you can talk to and friend people on any server. Wouldn't it be great if you could take your friends list with you between sites? So the friends you chat with in your chat client are the same friends you share photos with on a photo stream site, share your thoughts with on microblogging platforms, play games with etc. Wouldn't it be great if when you signed up to a new social-flavoured site, it could pull that in for you? This project is an open-ended attempt to set up a framework that allows social websites to get 'for free' all the flavour of a user's contact list, and the sharing available there, and a simple demo site that uses these features, where XMPP is the back-end and the data-store, and all sites can federate.

Specific Client Projects


Gajim is a full-featured and easy to use Jabber client. It is written in Python, uses GTK and integrates well with the GNOME desktop environment (but does not depend on it).


Specific Server Projects


Prosody is a lightweight XMPP server written in Lua. It is designed to be modular and easily extensible via Lua plugins. Members of the Prosody development team would consider mentoring students on any of the following projects:

Server Side Message Archiving

Difficulty: Medium Support for server-side message archiving, as described in XEP-0136. This would allow the server to be a central repository for all the user's conversation logs.

The Gajim client project has an implementation of this XEP, and you should work with them to ensure interoperability between Gajim and Prosody.

IPv6 support

Difficulty: Easy for someone with knowledge of C and networking IPv6 is support in protocols and networks is becoming increasingly important as the IPv4 address space diminishes. We need to encourage the use of IPv6 on the XMPP network, but Prosody and the Lua socket library it uses (LuaSocket) don't support IPv6. The project would involve both C (LuaSocket) and Lua coding (Prosody's DNS and connection-handling code) to allow for easy use of IPv6 connections for both c2s and s2s.

Web interface

Difficulty: Easy A dynamic web interface for managing the server. This would ideally use BOSH, Strophe.js and XEP-0133 to make it a server-independent project. The primary language would be Javascript, with a possibility of some Lua.

Pubsub support

Difficulty: Medium A mod_pubsub for Prosody, implementing XEP-0060. In the spirit of Prosody it should be simple, modular and extensible.

Spam/abuse prevention

Difficulty: Easy-Medium Although spam and abuse isn't prevalent on XMPP as it is on most other networks, it's on the rise. Implement a range of features to help stop this trend, and help service administrators keep on top of abuse on the network.


The ultimate server migration tool

Difficulty: Medium The Prosody team have developed many tools for converting the different server storage formats around. Unify them and produce a tool capable of reading the data from one server and exporting another supported format (e.g. XEP-0227), making server migration painless, no matter where you are moving from or to.


jabberd2.x project is the next generation of the jabberd project. It has been rewritten from the ground up to be scalable, architecturally sound and to support the latest protocol extensions coming out of the XSF. jabberd2 is written in C.



Openfire is the award-winning, open alternative to proprietary instant messaging based on the Java programming language. It is modular and extensible via its plugin architecture.


  • [1]: Multi-domain support
  • [2]: Portable Import/Export for XMPP servers
  • [3]: Reducing the database footprint of Rosters in Openfire (possibly replacing the relation persistence model with a new model based on nosql-techniques)
  • [4]: Constructive performance enhancements, which would include finding a structural solution to Openfires Achilles' heel
  • [5]: Constructive spec compliance enhancements
  • [6]: Network application framework porting effort from Apache MINA to Netty
  • [7]: Clustering solution development
  • [8]: Automated functional testing
  • [9]: Fastpath webchat support

Specific Library Projects