Wednesday, January 02, 2008

Funambol Community Showcase #1: SyncEvolution

The first days of the year, most people commit to doing something. I am not a smoker, so I can't stop doing that. Therefore, I am focusing on something else: showcasing the great projects in our community. There are so many and so diverse, that they risk to get lost. I have decided to pick some for a few weeks (or months) and have the developer(s) talk about it.

The showcase consists of Funambol developers and community members writing about Funambol mobile open source projects, components, apps, services and content. Showcase entries will be published periodically in my blog, to generate awareness of interesting projects in the community and to provide recognition for outstanding achievements by our dedicated developers and community members.

The debut entry in the showcase is SyncEvolution, written by long time Funambol community member Patrick Ohly. As his showcase entry mentions, Patrick has made multiple significant contributions to the Funambol code base. He is a star and I want sincerely to thank him for all of his efforts. I think you will find this entry to be quite interesting. If you would like to learn more about SyncEvolution, check out the links in the entry or contact Patrick for more information.

I plan to publish several more Showcase entries over the coming weeks, covering all aspects of Funambol such as the Java ME client, the Outlook plug-in, the Windows Mobile plug-in, the Device Management framework and much more. If you are interested in generating awareness for your Funambol project, just drop me a note. Thank you and enjoy the first showcase.


By Patrick Ohly


SyncEvolution synchronizes personal information management (PIM) data like contacts, calenders, tasks and memos via the SyncML synchronization standard. The version of SyncEvolution compiled for GNOME's Evolution supports all of these data items. The version compiled for Nokia 770/800/810 Internet Tablets, Mac OS X and the iPhone supports synchronizing the system address book. The command line tool 'syncevolution' (that is compiled separately for each of these platforms) performs the synchronization.


In 2006, I became interested in SyncML because I had to replace my mobile phone. I wanted to choose a phone that I could synchronize with my address book, which was in the Evolution email client on Linux. As an open standard, SyncML looked promising and
Funambol already had open sourced a lot of SyncML-related code.

The sync4jevolution project had already been registered atSourceForge, but was empty and unused. So I started from scratch under the name "SyncEvolution", with the initial goal of writing a command line client primarily for contacts, because that was what I personally needed.

Adding more features and helping others to use SyncEvolution was another goal from the start, so in 2006, I also added support for calendar, memo and task sync.

Since the initial releases for Evolution on Linux, I also ported SyncEvolution to the Nokia Internet Tablets. This used the same libraries as Evolution, but with a different underlying technology, requiring quite a few workarounds.

In 2007, SyncEvolution finally left its Evolution roots behind with a port to the iPhone. SyncEvolution is the technology behind Funambol's iPhone plug-in. Since then, "SyncEvolution - the Evolution SyncML client" is dead, long live "SyncEvolution - The Missing Link".

Collateral Damage/Results

The work on SyncEvolution has brought results beyond the tool itself. When I started, the Funambol C++ client library only worked on Windows and Windows-based Smartphones. I ported it to Linux and POSIX-based systems, which provided the basis for several
other projects.

There was also no unit testing or test cases that could be used by developers of SyncML clients. Based on the CPPUnit framework, I implemented automated testing. SyncEvolution has been tested with this system from the initial release. Later, this system was decoupled from SyncEvolution and moved into the Funambol CVS so that now all clients based on the Funambol C++ library can use it.

Using SyncEvolution

SyncEvolution is provided in binary form for different platforms and of course also as source code. After installing a suitable version, the first step is creating the required text configuration files, usually by copying the provided examples and updating a few private fields. After that, the 'syncevolution' command line tool needs to be invoked to perform a synchronization. All of this is documented in detail on the home page.

Future Plans

The 0.7 release is done, with all features originally planned for it completed.

iPhone users are desperately waiting for calendar and memo support. There are no plans to work on that from my side because synchronizing the address book required quite a lot of work and guessing although it was at least similar to the Mac OS X address book.

When Apple releases the native iPhone SDK it might be a lot easier and therefore it makes sense to wait for that.

Further Information

The main home page of SyncEvolution is It has sections on installation, getting started and compatibility with platforms and different SyncML servers.

My blog is the place to watch for announcements and news around SyncEvolution.