Summer of Code 2012
The XMPP Standards Foundation is applying to be a mentoring organisation for Google Summer of Code 2012. Project ideas are towards the bottom of this page.
Org acceptances haven't been announced yet, the following text is dependent on us getting in.
We're hoping to be participating in the Google Summer of Code for 2012. Other useful resources include:
- Our GSoC Org Page: 
- The JDev Discussion List: JDEV discussion list
- The JDev MUC room: jdev chatroom
Feel free to talk or chat with developers at any of the above resources about potential Summer of Code ideas. Also have a look at the ideas list below, and get in touch with potential mentors for any projects that take your fancy.
XMPP is the Extensible Messaging and Presence Protocol, an XML wire protocol for real-time communication that emerged from the Jabber open-source community. Our community is not a single open-source project because it is not focused on a single codebase. Instead, our community is centered around open standards and open protocols. However, even though there are closed-source implementations of XMPP, we still have a strong commitment to open code and there are many free and open-source projects in our community participating in GSoC under the XSF's umbrella.
We have participated in the Summer of Code since its inception and have learned many lessons, among them:
- We try to choose few excellent projects and really focus on them.
- It is difficult to choose excellent projects, so the more helpful information you can provide, the better.
- We also try to choose excellent mentors and match students with mentors.
- We expect regular reporting (via blog) and weekly or near-weekly meetings.
- We take the Summer of Code very seriously and we expect our students to treat it like a full-time job.
This page lists some potential project ideas that students can work on. This is similar to a "Request for Proposal" process for your summer job. The mentors and other project members have defined these RFPs as a way to help structure the summer work. Many of these projects are are relevant to our overall community. A select team of longtime XMPP developers and former mentors will review all the student proposals and "interview" many of the students so that we can make the best possible choices.
If you have any questions about the XSF's involvement with the Google Summer of Code, please contact Mike Taylor via email or (preferably) IM.
Thanks for your interest, and good luck!
Read this page, understand the available projects and find one you'd like to do. With the idea below there'll be contact details for possible mentors - contact them, get to know them a bit and let them help you in your application. Several of our projects have associated 'teaser tasks' designed to get you set up with a build environment (where appropriate) and running and testing the application, then writing a small change and getting it reviewed - this gets you used to the way the summer would go for you (and the mentors used to you), and is a great way to get to know if you and the project are a good fit for each other.
How to Apply
Application instructions are available at the main GSoC site on the XSF's page.
There is an application form available at that page, and you should complete all the parts. Here's some of what you need to include:
- Some details about you (what code languages you like, what programming courses you've taken, etc.)
- Results of your preliminary research into the protocols and codebases you might work on
- Your ideas about how to approach the project, including an outline of what work you think is required, a rough timeline of the work, etc.
- Possible problems you think you may face
In general, we consider your GSoC project to be a summer job, so try to provide detailed information that will enable us to decide if you deserve to earn the money Google will be paying. Our project ideas are like "RFPs" -- your application is your proposal to get the job. Please treat it seriously. Thanks!
There are many possible software applications available to work on under the XSF's umbrella for GSoC - here are some ideas for different projects.
Swift's goal is to provide an IM client that does things 'right' with a good user interface, solid quality, and standards-compliance. This year there are again several opportunities for working on new functionality in Swift. This page lists some of the high priority tasks the Swift development team has. If you're interested in any of these (or other) Swift ideas, please jump into the firstname.lastname@example.org room and chat it over with Remko and Kev. Swift is a C++ project, so C++ proficiency is required, with either knowledge of or willingness to learn about unit testing (and ideally test-driven development).
- Summary: Implement all aspects of keeping conversation history, both local and remote.
- Difficulty: Easy-Medium
- Details: Swift doesn't currently store any transcripts. A student would likely start by producing a prototype user interface for accessing chat history, then write the library code to access a remote archive, and plug these together and finally work on a local archive. This is likely to be a very satisfying project, with enough challenge to be interesting, but not so much that it's frustrating - plus it's a very popular feature request.
- Summary: Implement support for voice (and optionally video) communication.
- Difficulty: Medium/Hard. This project requires XMPP and VoIP protocol work.
- Implement signaling using the Jingle XMPP protocol, extending the File Transfer support from last year.
- Implement firewall traversal (using standard traversal protocols: ICE, TURN, ...)
- Implement real-time-protocol (using standard RTP)
- Investigate frameworks for hardware interaction & media encoding/decoding.
- Summary: Implement support for XMPP protocols that are targeted towards (resource-)constrained environments
- Difficulty: Medium
- Details: XMPP provides protocols for dealing with 'constrained' environments: session resumption and incremental roster retrieval for bandwidth-constrained situations, BOSH for places where keeping a long-lived connection is hard, SIFT for limiting the amount of incoming traffic, Link-local for serverless locations, ... Support for these protocols is not only interesting when XMPP software is used in these particular situations, it also makes the client faster and more reliable in general. In this project, you will study the protocols that can improve Swift in these situations (Session Management, BOSH, SIFT, Link-local, ...), and extend Swift (and the underlying Swiften XMPP library) to support these use cases.
- Summary: Implement support for multiple accounts
- Difficulty: Medium
- Details: Swift currently only supports one account at a time. Supporting multiple accounts is one of the most requested features for Swift. Although this is technically not hard to implement, it involves quite some design decisions on providing a clear and easy-to-understand user interface. This project is about designing a good user interface for multiple account support.
- Summary: Implement and standardize techniques & protocols for supporting being connected with multiple clients simultaneously.
- Difficulty: Medium
- Details: Although XMPP has supported multiple simultaneously connected clients from the start, the user experience is in practice seldom what a user would expect. This has not been a big problem up until recently, since most people tend to connect with only one client at the same time. These days, however, people are constantly going back and forth between their always-on mobile IM client and their desktop. Enabling a good user experience for this requires new protocols and techniques for transferring conversations between devices, ... This project is about implementing these protocols to streamline the use case of multiple resources
- Summary: Implement social aspects in user profiles
- Difficulty: Easy
- Details: XMPP (Through the PEP offerings) supports many social-ish data structures, including a user's location, their mood and their current activity. A student working on this project would add support for these protocols to Swiften, and build a 'user profile' UI around these data to give a view on a contact's state that goes beyond the usual 'Name, address, telephone number' profile. A nice touch would be adding map overlays to the location data, so you could see where all your friends were on a map together, and the suchlike.
Spectrum is an XMPP transport/gateway. It allows XMPP users to communicate with their friends who are using one of the supported networks. If you're interested in any of these ideas or even has some own idea, you can contact us in email@example.com room and chat with HanzZ. Core of Spectrum 2 is C++ project, but the ideas here can be written in any language. However, C++ knowledge would be useful, since student could need to change the Spectrum 2 core as part of the project.
- Summary: Implement the web interface for managing Spectrum 2 instances
- Difficulty: Easy/Medium
- Details: Admins are usually running more Spectrum 2 instances and there is a need for easy interface to manage them and gather the statistics. A student would create web-interface in any language (but Python/Ruby/PHP is preferred) allowing the admin to manage Spectrum 2 instances. The web-interface would communicate with Spectrum 2 instance using the XMPP by sending/receiving messages (Spectrum 2 part of this communication is already implemented and is not part of this project). C++ knowledge is not strictly needed for this project, but would be useful. This is often requested feature and there is a place for student's creativity.
- Summary: Add Ad-Hoc commands (XEP-0050) support
- Difficulty: Medium/Hard
- Details: The goal of this project is to design an interface for creating Ad-Hoc commands either by Spectrum 2 and also by its backends and create simple Ad-Hoc commands for Spectrum 2 instance maintenance (like "Send message to online users" and so on). A student would use Swiften XMPP library (already used in Spectrum 2) to add Ad-Hoc commands support. Then the student has to map Ad-Hoc commands and data forms into the Google Protobuf to let backends to use it.
- Summary: Implement better Twitter backend
- Difficulty: Medium
- Details: Spectrum 2 supports Twitter network using the Pidgin's microblog-purple plugin. This plugin is not designed to be easily used in the way Spectrum 2 uses it. The goal of this project is to implement standalone Twitter backend. Backend is a console application which connects the main Spectrum 2 instance and then handles XMPP user's requests and map them to the Twitter network. Backend can be written in any language with Google Protobuf support, but C++ or Python is preferred.
Prosody is a lightweight XMPP server written in Lua. It aims to be easy to set up and configure, and light on resources. For developers it aims to be easy to extend and give a flexible system on which to rapidly develop added functionality, or prototype new protocols.
- Summary: Develop spam and abuse reporting modules/tools for Prosody.
- Difficulty: Medium
- Details: 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.
- More info: http://prosody.im/gsoc#spamabuse_prevention
- Summary: Develop a real-time XMPP web interface for server administration.
- Difficulty: Medium
- Details: An XMPP-based web interface to monitor and control Prosody instances (and at some level, other servers). We have an initial version as mod_admin_web, but it has some way to go to become nice and usable.
- More info: http://prosody.im/gsoc#web_interface
- Summary: Add support for XMPP over websockets to Prosody
- Difficulty: Hard
- Details: Now that the specification has settled down somewhat, update Prosody's mod_websocket to support it.
- More info: http://prosody.im/gsoc#websocket_support
XMPP network monitoring
- Summary: Implement modules for Prosody that help map public services on the network.
- Difficulty: Medium
- Details: XMPP is a decentralized public federation of servers, but sometimes a centralized directory of what public services are available is desired. Some work has been done recently on specifying a way opt into inclusion in such directories. This project would have multiple parts:
- Finish implementation of Service Directories in Prosody to allow servers to opt-in to directories of XMPP services.
- Develop a Prosody module to publish the service directory to the web.
- Implement realtime monitoring of the services in the directory.