Summer of Code 2007
The XMPP Standards Foundation (formerly the Jabber Software Foundation) will once again participate in Google's Summer of Code project for 2007.
XMPP is the Extensible Messaging and Presence Protocol, an XML wire protocol for real-time communication that emerged from the Jabber open-source community. Although our community is centered around open standards instead of a single open-source codebase, we still have a strong commitment to open code and there are many free and open-source projects in our community.
This year we will do things a little differently. In particular, we have recruited mentors ahead of time and potential mentors have defined project ideas that students can work on. This is similar to a "Request for Proposal" process, with the mentors being the people who defined the RFPs and who will "interview" the student whose proposals are of interest.
In general, we are most interested in projects that are relevant to our roadmap. See below for details.
Mentors
The following people are potential mentors for Jabber/XMPP related projects. The final mentors will depend on which projects are accepted.
- Ralph Meijer - Python / Twisted, libraries
- Jacek Konieczny - Python / C++
- Gaston Dombiak - Java
- Chris Mullins - .NET
- Kevin Smith - C++, clients
- Remko Tronçon - C++, clients
- Justin Karneges - C++, clients, libraries
- Alexander Gnauck - .NET, C#, clients, libraries
- Maciej Niedzielski - C++, clients
- Johannes Wagener - Web Services, Java, C++, server components, clients, libraries
- Mats Bengtsson - Tcl / C
- Massimiliano Mirra - JavaScript / Mozilla
Project Ideas
This section lists some project ideas that were suggested for the Summer of Code 2007.
Read This First!
In general, we are most interested in projects that are relevant to our roadmap. These include:
- VoIP or other media sessions with Jingle
- Compliance with the XMPP Basic and XMPP Intermediate protocol suites (to help prepare projects for certification in 2008)
- Personal eventing support in servers and, along with fun payloads like user mood and user tune, in clients
- Message archiving support in clients (especially web clients) and servers
- End-to-end encryption (though we have a separate project for that)
Most of those priority projects can be done in clients, servers, or libraries, so there is plenty of opportunity for fun SoC work. We prefer that you contribute to existing open-source codebases instead of starting a new codebase, since it will be easier to find a mentor, so look at the existing projects to find a good fit. If you have questions about an existing codebase, ask the maintainers of that codebase or post to the main developer list.
Client
Jabber/XMPP technologies are based on a client-server architecture similar to email. Usually these clients are instant messaging clients, but Jabber/XMPP is not limited to IM (it's just XML routing, use your imagination). Some popular open-source clients include:
- Adium -- they have their own GSoC projects
- Coccinella (C/C++/Tcl)
- Gaim -- they have their own GSoC projects
- Gajim (Python)
- Gossip (GNOME)
- Kopete (KDE)
- Psi (C++/Qt)
- Spark (Java)
Most of the roadmap project ideas described above can be done in any of these clients, so combine a project idea with a codebase and send in a proposal.
Coccinella: Jingle file transfer
- Mentor: Mats Bengtsson
- Programming language: C/C++ and/or Tcl
Project motivation
Transporting files from one user to another is plagued by NATs and firewalls. In ancient times a standard Tcp connection was all that was needed. Instead various application level protocols have been implemented on top of Udp which handles NATs much better. This "reinventing the wheel" by having to reimplement a kind of pseudo Tcp stack on top of Udp is a very unfortunate situation which lacks standardization.
Implementation
This projects aims to use Google gTalks Jingle implementation as a starting point. Ufortunately it is written in C++ and deeply tied into the application notifier system and therefore not reusable as is. Instead the task will be to use the Tcl Udp C code implementation, and essentially use gTalks PseudoTcp class as a wrapper. There are two possible options here: either do a pur Tcl script implementation of the tricks used in PseudoTcp, which I'm not sure is possible, or just translate the C++ class into C code and wrap up the tcludp package to a pseudo tcp (ptcp) command. This should work just like the standard Tcl socket command and should be able to use it transparently.
Jingle contains several parts but the actual jingle xmpp protocol stack is already running and used for voip. A limited STUN client has also been implemented in pure Tcl, but some support for the ICE protocol will likely be necessary.
Relevant XEPs
There seems to be a XEP in the works that actually describes the topmost file transfer protocol.
Coccinella: an aquarium for kids
- Mentor: Mats Bengtsson
- Programming language: Tcl/Tk
- Coolness factor: high
Project description
This project involves the creation of an interface for kids to Coccinella. You need to create a new roster style, the fishy roster style, with an aquarium containing fishes that represents the contacts (like ralphm's Jabber Aquarium). The fishes need to be be animated with User Mood. For example, when a contact is happy, the fish will swim quickly in the aquarium with a smile on his face. The graphics will be done in 2D, but when time allows, they can be made in 3D.
The programming tools will be Tcl/Tk and the tkpath graphics extension package [1] which provides high quality graphics on all platforms. There exists an albeit primitive SVG importer so the actual graphics elements can be obtained from a SVG drawing tool.
This project will involve mostly new code, and less boring code rewriting.
Relevant XEPs
Gajim: Jingle VOIP
- Mentor: Yann Le Boulanger
Project description
The goal of this project would be to add to Gajim the ability to do VOIP. The famous Jingle XEP is needed. So first step is to analize all possibilities for using it, and then implement one. Gajim is written in python, with PyGTK interface. It uses a modified version of xmpppy as lowlevel library.
Relevant XEPs
- Mentor: Massimiliano Mirra
- Programming language: Javascript, XML (XHTML, XUL or SVG)
Project motivation
On the web, people interact with web applications; in instant messaging, they interact with other people. By bringing XMPP to the browser we can mix the two scenarios and allow people to interact with other people on web applications. The result is richer forms of interaction (e.g. shared editors, games, whiteboards, ...) that can be deployed to everyone with the ease of web applications, i.e. by just uploading pages to a server and giving away a URL.
Implementation
This area is little explored, so you'll need creativity just as much as (if not more than) technical skills, and (of course) should have no fear of pushing the perceived limits of today's web.
The project involves creating a shared web application of your choice (a collaborative editor, a game, etc.), preferably in a way that allows later extraction of generic, reusable code (maybe along the lines of XSI), as well as of good practices for future development in the area.
Relevant documentation
Server
As noted, Jabber/XMPP technologies use a client-server architecture. There are five main open-source server codebases:
Most of the roadmap project ideas described above can be done in any of these clients, so combine a project idea with a codebase and send in a proposal.
General
Tunneling (asynchronous) Web Services for Bioinformatics application over XMPP by supporting Ad-Hoc Commands (XEP-0050) and IO-Object Forms
The student's challenge is to write server components and/or client implementations that export/import Web Services for Bioinformatics by making use of XEP-0050 - Ad-Hoc Commands and the yet to be council-voted IO-Object Forms. Client implmementations could be developed as Plug-In for the Bioclipse Bioinformatics IDE that was recently introduced in BMC Bioinformatics. Web Services for Bioinformatics may base on existing databases or algorithms, for example by routing GenBank entries through XMPP.
Mentor: Johannes Wagener
XEP-0033 support
XEP-0033 is a XMPP extension which can save a lot S2S (Server to Server) traffic and let you easily send messages to more than one contact, even with cc and bcc recipients you used to know from electronic mail. The XEP hasn't changed since 2004 but there are only some implementations at the moment. So your project could be to add support for XEP-0033 to your open source server of choice. If that isn't enough some servers, e.g. eJabberd, have own components for PubSub and MUC so if adding XEP-0033 support to those servers it should be easy for you to add support to the included components too.
X-Data framework
build a X-Data framework consisting of:
- Visual X-Data forms editor
- application to send forms to entities, analyze and store the submitted results
- replace memberbot with this application.
End-to-end Encryption
Add e2e encryption based on
- XEP-0200: Stanza Encryption
- XEP-0201: Best Practices for Message Threads
- XEP-0155: Chat Session Negotiation
- XEP-0116: Encrypted Session Negotiation
to a existing open source library and/or existing OS client.
Publish-Subscribe Based Package Management System for an Open-Source Operating System
This is how it should work on the client side:
- During installation of the distribution, a Jabber account is registered (or SASL Anonymous is used) and the user will be subscribed to the Publish-Subscribe nodes representing the repositories he is interested in.
- When the distribution is started, a daemon is started which is a Jabber client.
- When the daemon receives a notification, it will inform the user or update the package, depending on the user's preferences.
This is how it should work on the server side:
- Publish-Subscribe nodes for each package (or each repository?).
- Initially, the system can use an existing repository, and get updates each minute e.g. In a later stage, the system should be notified when a new package is uploaded to the server.
- All users subscribed to a node will get instantly a notification regarding the new version of the package.
Motivation:
- Increase end-user satisfaction
Advantages over current pull based systems:
- safer as you will be notified about updates in real-time
- faster and less server load/traffic (you don't have to download 5MB or something like that)
- a sexy showcase project for XMPP
- improved security when using secured XMPP connections
- xml:lang to allow multi-lingual information about updates
- Improved security: using this system, the package maintainer can notify all users of the package regarding a security issue in an application for which there is not yet a fix. In this way the user can avoid using the application until there is a fix, or depending on the user's preferences, the system can automatically disable the application.
- better feedback possible (see also next project idea)
Requirements:
- scalability
- easy/transparent
- client & server
- secure: PGP, SASL, TLS,...
Feedback System for Open Source Packagers
Note: This can be a follow-up project of the previous project, eventually two students can work on those projects.
Motivation:
- Increase end-user satisfaction regarding their open source system and better feedback for packagers and software projects.
If a user finds a bug in an application, or if he just has a nice idea about a cool feature, he should be able to easily contact the package maintainer and/or other people involved in the software project. The user should be able to chat with those people and give them feedback. The package maintainer also can notify this specific user when he fixed the bug or implemented the feature request. It would be also nice to send translations, patches,... using this system.
Requirements:
- way to point to the project's Multi-User Chat room (in the package or via the XMPP server?)
- way to point to the Jabber ID of the maintainer (in the package or via the XMPP server?)
- way to point to other people involved in the project (in the package or via the XMPP server?)
- way to see the presenc of all these people
- server-side logging?
- security
- nice and easy to use user interface, preferably extending an existing interface
- ...