Thunderbird + Ubuntu One Integration: Prior Art and RDF

Mike Conley mconley at
Thu Mar 17 18:21:23 UTC 2011


I posted this on my blog earlier today, and Andrew Sutherland
suggested I copy-paste it here on tb-planning.  So here goes!

(originally posted here:

# Thunderbird and Ubuntu One: First Thoughts, First Roadblock (or
Prior Art and RDF’d)

Remember my quest to integrate Ubuntu One contacts into Thunderbird?

So I spent a chunk of time over the last day or so looking at prior
art – the efforts of others to solve the same problem.  (I’m using
“prior art” pretty loosely.  I’m not by and means filing patent

## Prior Art Round-up

### The Hedera Project
Hedera is a Thunderbird extension, and probably the most direct
solution to the Thunderbird and Ubuntu One integration problem.  With
Hedera, all contacts in all address books are sent off to Ubuntu One,
with metadata to keep the contacts in the right address books.
Metadata is also included to keep contacts distinct from one
Thunderbird profile to the next (if you’re one of the rare users of

As of late, the extension has gotten a bit dusty – the author, James
Tait, is currently working at Canonical, and hasn’t had much time to
maintain it.

Despite that, it still does the job pretty well.  I was successfully
able to synchronize my contacts to Ubuntu One, which made me
fist-pump.  Great work, James!

However, after examining the code, I have a few concerns:

*  The first one that jumps out at me is the reliance upon a shell
script to determine the DesktopCouch server port, as well as obtain
access credentials.  While effective, I think a more direct approach
would be more appropriate.  Perhaps I could develop a DesktopCouch
XPCOM service that returns these values?
* Contacts that are not branded with “Thunderbird” metadata are
ignored.  This means that contacts created from the Ubuntu One web
interface are not brought into Thunderbird, unless the metadata can
somehow be added there.  I didn’t immediately see a way to do this.
This also means that contacts from other applications (I’m looking at
you, Evolution) don’t get brought into Thunderbird.
* Since the contacts are also given profile metadata, it means that I
only get those contacts if I share the same profile.  This is
problematic if I drop my computer in the river, get a new one, and
fire up a copy of Thunderbird:  my profile will be different, so my
contacts won’t come in.  They’ll still exist in Ubuntu One’s storage,
but won’t come into my Thunderbird profile, unless I modify my profile
string to match my old one.

### Funambol Mozilla Sync Client
Funambol develops open-source mobile communications sync software, and
it looks like Canonical is using Funambol to power their mobile sync

Users install the Funambol Mozilla Sync Client, which then syncs
contacts with Ubuntu One over the mobile sync service.

It’s not a bad solution, and is the one advocated by the Ubuntu Support pages.

Here are my concerns:

* According to the support pages, only Thunderbird 2.x is currently
supported.  Thunderbird 3.1.9 is the current version in the Ubuntu
packages, and the Mozilla Messaging team is working like crazy people
on 3.3 (where did 3.2 go?  long story).  Supporting Thunderbird 3 is a
* This approach assumes that you’ve got the $3.99 US per month mobile
Ubuntu One service.

Now, with respect to that last point, I’m not against paying for
stuff.  Money lets companies like Canonical, Funambol (and Mozilla
Messaging, for that matter) survive.  But I do think it’s a little
silly that Thunderbird needs to pretend to be a mobile phone, and
communicate through the mobile sync service.  That’s why I said Hedera
was the more direct solution.

If I got any of that wrong, I’m sure someone from Funambol will
comment and correct me.  :)

### Bindwood
Bindwood is an extension that allows Mozilla Firefox to synchronize
bookmarks via Ubuntu One.  The reason I’m putting this up, is because
a lot of good code has been written here to communicate with the
DesktopCouch service.  If I resolve a few licensing issues, it might
be possible for me to leverage some of that code to make the
Thunderbird + Ubuntu One project move faster.

### Evolution
Evolution currently has Ubuntu One support built in, thanks to the
Evolution-CouchDB project.

Evolution-CouchDB creates a new address book called “Ubuntu One” for
every user.  Any contacts that go into that address book are sync’d
with Ubuntu One, and any contacts that get added to Ubuntu One get
loaded into that address book.

It’s an elegant solution, and addresses the issues I brought up with Hedera.

If I were to implement a similar solution for Thunderbird, it would
mean that contacts between Evolution would be seamlessly imported into
Thunderbird.  The behaviour would be exactly the same.  Consistency is
good.  Consistency means happy users.

Unless I hear compelling argument for something else, I think this the
behaviour I’m going to implement.

### Mac OSX’s Address Book
Mac OSX has it’s own internal address book, and many Mac-based
Thunderbird users were crying out for integration.  A developer named
Peter Van der Beken karate-kicked the bug (and may have collected a
bug bounty on it…unsure), and now we have OSX address book

The OSX address book integration is very similar to Evolution’s
behaviour:  it creates a new address book within Thunderbird, and all
contacts from the OSX native address book appear there.

As it stands, this integration is read-only.

Since we’re dealing with OSX, it means Objective-C is the name of the
game.  Here’s the code.

Ugh.  Wouldn’t it be awesome to leverage some of the work from
Bindwood, Hedera (and maybe Funambol…I haven’t examined their code
yet), and implement the Ubuntu One integration all in Javascript?
Yes!  That’d be lovely!

Except for one thing.

## RDF
I spent most of yesterday examining this one, and I think I’ve got my
head wrapped around it.

So, RDF stands for Resource Description Framework, and it’s a way of
representing information in a way so that machines can make useful
inferences and queries about that information.  That’s a
super-simplified definition.  Here’s something a little more robust.

What does this have to do with Thunderbird and Ubuntu One?

Well, it turns out that the Thunderbird address book interface uses
RDF to query / know about the address books that are available.  So,
when you pop open the address book manager in Thunderbird, and it
populates the list of address books, it’s using RDF to get that

So what’s wrong with that?  Well, it means that if I want to add a
special “Ubuntu One” address book, it has to register itself with the
RDF service as an RDFResource.

There’s two issues there:

* Part of RDFResource is not scriptable, which means it’d need to be
implemented in C++.  So much for leveraging Bindwood / Hedera /
* The Thunderbird team knows about the limitations of RDF and are
trying to remove it’s usage from Thunderbird. I’d hate to implement
all that RDFResource stuff just so it can get tossed out in a few

So I might have to really start pushing on RDF removal from the
address book.  If I go that route, it means that Ubuntu One
synchronization would not be available for anything earlier than
Thunderbird 3.3.  Ugh.

Sounds like it’s time for me to discuss this with my superiors.  I’ll
let you know what I find out.

More information about the tb-planning mailing list