From MozillaWiki
Jump to: navigation, search

This page lists all the Google Summer of Code 2016 projects with confirmed mentors, and which have been approved by the SoC administrator. New suggestions can be made on the Brainstorming page. Do not edit this page yourself; contact Florian for edits.

Potential students: you may choose from the list below, but you do not have to. Feel free to submit a proposal for your own idea. However, before you do so, see the guidelines for good ideas. You can also discuss your ideas or application in the #introduction channel on IRC: irc:// . Your idea will have a significantly greater chance of being chosen if you can find an existing member of the Mozilla community who is willing to evaluate or mentor it. (You should name that person in your application.)

In addition to the specifically-named projects below, we have also tagged a number of bugs in Bugzilla with the keyword student-project. However, as the idea of a "student project" is wider than just the Summer of Code, students looking through the list will need to decide whether any particular bug listed there is actually the right size and scope for Summer of Code.

Application Advice

You should do the following:

  • Talk to the mentor. Contact details are on this page; if all you have is a nickname, get on IRC and try and contact them.
  • Read the GSoC Student Guide and follow its advice.
  • Read How Not To Apply For Summer Of Code and avoid doing the things listed there.
  • Read our examples of good applications: 1, 2, 3.
  • Apply on the GSoC site (note that we have an application template).
  • It is entirely acceptable to apply for 2 or 3 projects, if more than one catches your eye; if the applications are high quality, that can improve your chances. However, more than 3 seems like spam.

Note that if a project suggests it would be helpful to know XUL (Mozilla's user interface description language), you may be able to get away with learning on the job. Don't be put off from applying if the project otherwise looks right for you.

Questions about individual projects are best addressed to the potential mentor of that project. These should be listed in the table below. If you want to contact a mentor and contact details are not here, ask people in the #introduction channel on IRC: irc:// If you have questions of any other sort, send mail to Florian and Patrick. We will try and respond as soon as possible and get your questions directed to the right person. Please allow at least 48 hours for a reply.

Firefox for Android

Title Details Skills Needed Reporter Mentor(s) Comments
Download app assets at runtime More detailed description of the project

With Firefox for Android we just made the first steps to stop shipping everything in the APK and to instead download assets the application needs at runtime. We started with fonts but we want to do much more (hyphenation dictionaries, translations, ..) in order to reduce the APK size.

Java / Android

JavaScript or C++ helpful but not a requirement

Basic knowledge of the HTTP protocol

Sebastian Kaspari (:sebastian) Sebastian Kaspari (:sebastian)


Title Details Skills Needed Reporter Mentor(s) Comments
Implement mbox -> maildir converter Currently Thunderbird uses mbox as primary storage format for mails (locally). The maildir format is also supported, but we have no converter for it yet. See bug 856087 JavaScript, maybe some C++ mkmelin mkmelin


Title Details Skills Needed Reporter Mentor(s) Comments
Improve & expand the JavaScript XMPP implementation The JavaScript XMPP implementation included in Instantbird/Thunderbird works well, but is lacking some features. This project should include a variety of small and larger improvements to the XMPP protocol. Feature-parity with libpurple's XMPP implementation is one of the prerequisites for replacing it with the JavaScript implementation and is an end-goal of this project. Examples of new/missing features include:
  • Support for DNS SRV
  • Room discovery (i.e. hook XMPP into the "awesometab")
  • Misc. bugs
  • Test coverage

Students are expected to research a list of bugs and unimplemented features in the JavaScript XMPP code they intend to address.

JavaScript, XPCOM, an understanding of XMPP is desired Florian Quèze aleth, clokep
JavaScript Protocol Plug-in Google Talk/Hangouts is one of the most popular networks to chat on now and is available over XMPP. Unfortunately, Google has slowly been breaking the interaction with their XMPP bridge such that features stop working. It is desirable to connect directly to Google Hangouts using their proprietary protocol. This would involve:
  • Adding a new Google Hangouts protocol
  • Improving and expanding shared code and APIs used by all JavaScript protocol plugins (IRC, XMPP, Yahoo and Twitter)
  • Improving documentation of the process for adding a protocol to Instantbird/Thunderbird
  • Reversing engineering of the network protocol
  • Add tests for the new protocol
  • Using the protocol on a day-to-day basis to dog-food the code

Note that some implementations exist for other clients (hangups in Python and purple-hangouts in C).

JavaScript, XPCOM, understanding of network protocols Patrick Cloke [:clokep] clokep, nhnt11 Don't use Google Hangouts? Protocols we're interested in: Google Hangouts, Facebook, Bonjour, TextSecure/Signal, Telegram, or come talk to us!
File transfer support This involves a lot of interacting pieces so would require good planning up front. There has been a few failed efforts to do this in the past, but some partial implementations might exist. Generally this involves:
  1. API design (designing interfaces that could be implemented by different protocols such that the UI can interact in a protocol agnostic way)
  2. UI design (how will users interact with this feature?)
  3. Backend implementation (most likely implementing one or two of the XMPP methods, maybe IRC as well)
  4. Frontend implementation
  5. Fallback implementation (for protocols that don't support file transfer OR if the file transfer fails, we'd like to use Thunderbird's current FileLink component; we've also discussed whether WebRTC could be useful here)
XPCOM, JavaScript, XUL/HTML, WebRTC, networking protocols nhnt11 clokep, nhnt11


Title Details Skills Needed Reporter Mentor(s) Comments
Introducing Calendar Accounts Traditionally our calendar extension is organized into a list of calendars, each calendar being implemented by a “provider”, for example local storage or using the CalDAV protocol. The service to manage these calendars maintains a simple list, the entries have no connection to each other.

Some calendar providers would greatly benefit from being able to group calendars into accounts, for example free-busy lookups are usually per-server operations and not per-calendar. It would also open the door for some great new features that have been postponed because they can be implemented cleaner with the notion of accounts.

XUL, CSS, JavaScript Fallen Fallen Click here for a detailed project description
Resource Booking Improvements The Lightning extension has a dialog for inviting attendees to an event, which also shows availability information. Albeit not very obvious, it also allows booking resources and rooms. To improve this experience we would like users to be able to pick rooms and resources in a way that they don't need to remember the room address and quickly see which rooms and resources exist and are available around the proposed time of the event. XUL, CSS, JavaScript Fallen Fallen Click here for a detailed project description
Event in a Tab Currently, events and tasks a created and displayed in a dialog. In a first place, this project is intended to transform this to happen in a tab, likewise emails in Thunderbird. A supplemental goal is to explore the capabilities and restrictions to implement the event in a tab feature without XUL but just using HTML/CSS/JavaScript. A HTML solution could entail a responsive design, allowing to fully replace the current event dialog. The design could change depending on if the event editor is shown in the width of a tab, or the current standard event dialog size.

This project is a good balance of UI work and JavaScript coding. Web developer experience is helpful, but you must not be a design expert to work on this project.

XUL, HTML, CSS, JavaScript MakeMyDay Fallen / MakeMyDay
Advanced Preferences System Today, Lightning preferences can mostly only be set on global level. A different, but smaller set of preferences is available on calendar level, whereas several preferences are currently only available from within the config editor. The goal of this project is to create a preference system like Thunderbird uses it - making most of the preferences available on calendar level with an option to fall back to corresponding globally configured preferences.

This is mainly a JavaScript project, but to a smaller extent some UI extensions are required. The emphasis is on the functional part here.

XUL, HTML, CSS, JavaScript MakeMyDay Fallen / MakeMyDay

Automation & Tools

Title Details Skills Needed Reporter Mentor(s) Comments
Web-based GDB Frontend Write a graphical frontend for gdb/rr in react.js communicating with backend (gdb/rr) over a websocket.

The idea is to pipe stdin/stdout/stderr from gdb over a websocket, and implement a complete graphical debugger in the browser. Architecture and discussions are talking place in a collection of etherpad notes (feel free to add notes). Initial code sketches are taking place on

Javascript, react.js, CSS/HTML (gdb/c++ is nice to have) jonasfj jonasfj I'll happily add the backend to TaskCluster workers, so we can debug processes in CI tasks from a browser.
Make WebDriver/marionette match the featureset of Selenium FirefoxDriver. WebDriver is a protocol for remote control of browsers that is in the process of being standardised at W3C. At this time, the most common WebDriver implementation used with Firefox is Selenium FirefoxDriver. However this has a number of problems e.g. incompatibility with e10s. For internal testing we have developed "marionette", a remote control API with the featureset to replace FirefoxDriver, but using a simple JSON-based protocol rather than HTTP used by WebDriver. To bridge these two worlds we have developed "wires", a proxy written in Rust that translates between W3C-standard WebDriver and the marionette protocol. This allows Firefox to be controlled by any WebDriver-compatible client.

Although "wires" currently implements most of the features of the W3C spec, there are a number of improvements required before it can match the functionality of FirefoxDriver. In particular it currently doesn't support the "actions" API which allows simulating low-level events (key presses, mouse clicks, touches, etc.), although this is well supported in marionette itself. There are also some non-standard features that are much requested by early adopters, including the ability to explicitly provide a Firefox profile to run. The purpose of this project would be to add those features to wires.

Rust (basic level only) and other programming experience. jgraham jgraham This project has been reprioritized and is no longer suitable for GSoC.
Redesign SETA and give it TaskCluster support We currently have multiple continuous integration systems running Firefox tests. On the original CI (Buildbot), we use SETA (Search for Extraneous Test Automation) to help reduce the number of jobs that get scheduled on every push by doing analysis of previous test results. Unfortunately needs to be redesigned to be more reliable and to support our new CI (TaskCluster). This will help us migrate faster to the new CI which gives us much more flexibility. Python armenzg jmaher armenzg [1]
Give Treeherder the ability to schedule TaskCluster jobs On Treeherder you can schedule Buildbot jobs which had not been scheduled before (see Scheduling jobs with Treeherder). You can read more about the project in here. Python armenzg armenzg jmaher

Release Engineering

Title Details Skills Needed Reporter Mentor(s) Comments
Reduce the frequency of update races in Balrog One of the key features of our update server's (Balrog) API is that it guards against update races - where multiple clients overwrite each others' changes to the same piece of data. In many cases clients are updating small, independent parts of the same larger piece of data, and the server should be able to safely merge the changes together rather than forcing clients to try again. This project will involve the design and implementation of an improved algorithm for safely accepting changes to Balrog's Release objects through the API. Python bhearsum bhearsum


Title Details Skills Needed Reporter Mentor(s) Comments
File Support Adding File and Blob support to Servo Familiarity with Javascript; desire to write Rust code (Rust or C++ experience helpful) Manish Goregaokar Manish Goregaokar In-depth project details

Security Assurance

Title Details Skills Needed Reporter Mentor(s) Comments
Mozilla Investigator: Auditd integration Implement support for syscall monitoring on Linux system via the Audit daemon. This should include integration with the audit-go library, as well as reporting and escalation. A key component of the project is to correlate anomalies across nodes, to identify unusual systems registered by isolated systems but not by the rest of the infrastructure. Strong Go and C programming skills. Good knowledge of Operating Systems architecture and the Linux kernel. Julien Vehent Julien Vehent :ulfr & Guillaume Destuynder :kang MIG ( is a distributed digital forensics framework deployed across thousands of systems at Mozilla. It is used by various groups to maintain good security levels across the environments, and investigate incidents and vulnerabilities.

NSS (Network Security Services)

Title Details Skills Needed Reporter Mentor(s) Comments
Implement RFC7512 PKCS#11 URI support and system integration RFC7512 defines a URI standard for identifying PKCs#11 tokens and the objects therein. We need to implement a PK11_FindCertByURI() or similar function, and also make it possible to obtain/generate the URI for a given CERT and other objects which have been found/selected by other means. See bug 1162897 for details. Also, NSS does not obey the system configuration for which PKCS#11 tokens to load, as described in bug 248722. We should fix this too.

See dev-tech-crypto email at

C coding, familiarity with PKCS#11 preferable dwmw2 Bob Relyea, David Woodhouse (dwmw2)

Mozilla Science Lab

Title Details Skills Needed Reporter Mentor(s) Comments
Contributorship Badges for Science. Issuing badges to credit authors for their work on academic papers. As the research environment becomes more digital, we want to test how we can use this medium to help bring transparency and credit for individuals in the publication process.

Using Mozilla's Badgekit-api to implement our badges, we can issue and fetch badges from badgekit via the badgkit-api-client. By authenticating against ORCID, a user can reliably issue badges to a valid ORCID, the standard unique researcher identifier.

Since launching our MVP last fall, we've realized that badgekit-api isn't optimized for our use case. In this project, you will migrate our badge system away from badgekit-api and update the system to make it easier for publishers to integrate Paper Badger in their submission system.

More details:

Strong JavaScript programming skills. Familiar with node. Abigail Cabunoc Mayes Abigail Cabunoc Mayes :abbycabs The Mozilla Science Lab, an initiative of the Mozilla Foundation, works to make research collaborative, accessible and usable.


Title Details Reporter Mentor(s) Comments - Building Blocks for the VR Web

To bring the library to the next level we need new demos that focus on the strengths of the VR medium. We need someone to help us create new exciting and visually stimulating a-frame examples that show new interaction techniques to handle locomotion (how do you move quickly in the VR space without inducing motion sickness?), object manipulation (how do we integrate novel input controls that track your arms and hands?), and multi user experiences (How will social activities express in VR?). Those explorations will result in examples and components that we will make available to the a-frame users. This is a great opportunity for someone to explore the next big medium, play with cool gadgets and interact with an emerging open source community.

JavaScript and Computer Graphics (OpenGL / WebGL) Diego Marcos : dmarcos Diego Marcos : dmarcos