Thunderbird Project as 3rd-year Engineering Group Project

Patrick Cloke patrick at
Fri Feb 12 14:28:15 UTC 2016

On 2/12/16 7:21 AM, James Quilty wrote:
> Closely followed by: 4. Chat project(s). I'd like to hear everyone's
> views on my ranking.
>  Patrick, I'd like more details about the chat project(s) you had in
> mind if you're keen for a project to be offered. I think chat clients
> are something the students generally find attractive.


Sorry I was vague since I was referencing some of the projects on our
Google Summer of Code page. I think the ones which might best work for a
small team of students are:


File transfer support, this involves a lot of interacting pieces so
would require some good planning up front. There has been a few failed
projects about 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)

Requires understanding of: XPCOM, JavaScript, XUL/HTML, networking protocols


Currently Thunderbird can have additional protocols added to them via
libpurple. This is distributed separately because of licensing
compatibilities. There is a shim later (called purplexpcom) which
translates from Thunderbird's chat interfaces to libpurple's interfaces.
Unfortunately this is:

  * Time consuming to maintain
  * Difficult to compile
  * Requires re-compilation for each Thunderbird version
  * Is not binary compatible with system libpurples

It is desirable to experiment with different ways to interact with
libpurple to redesign this interface. Potential experiments include:

  * Using js-ctypes to interact with the libpurple binary component
    (instead of C++ XPCOM code)
  * Spawn a separate sub-process and use IPC to communicate with libpurple
  * Compile libpurple to JavaScript with emscripten

Requires understanding of: C, C++, XPCOM, JavaScript


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 creating a new Google
Hangouts protocol to Thunderbird by implementing the appropriate
interfaces. This would involve:

  * Creating a new Google Hangouts protocol
  * Improving and expanding shared code and APIs used by all JavaScript
    protocol plugins
  * Improving documentation of the process for adding a protocol to
  * Reversing engineering of a network protocol
  * Using the protocol on a day-to-day basis to dog-food the code

Note that some implementations exist for other clients

Requires understanding of: JavaScript, XPCOM, networking protocols


Please let me know if you have additional questions,


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the tb-planning mailing list