Development
This page provides information for developers or packagers who want to use the SyncEvolution source code and/or contribute to the development of SyncEvolution. To contact the development team, using the mailing list is recommended. For sensitive issues send email to the closed development team list.
There is no shortage of features that new developers could work on. Many of them are documented in the SyncEvolution tracker. Everything currently assigned to "syncevolution" is not actively worked on by anyone.
In addition, porting SyncEvolution to other platforms and/or synchronizing other data sources is something that will only be possible if motivated developers start contributing and maintaining these extensions of the current functionality.
Architecture
The synchronization stack consists of three components:
- Synthesis SyncML Engine
- Implements the SyncML protocol, data conversion and merging. It is a very advanced SyncML implementation (fully utilizes device information for data handling, suspend/resume support, direct copying from WBXML for low memory overhead, ...) that has been developed by Synthesis since 2000 and represents the core of all their SyncML solutions. It supports both client and server mode in the same code base, which has the advantage that clients automatically support all of the advanced features often only found in servers (like automatic support for multiple different data formats, preserving of properties when receiving updates from less capable peers). Also, a plugin that provides access to data can be implemented once and then be used on the client and server side.
- SyncML Toolkit
- Used by the engine for SyncML message encoding and decoding, both XML and WBXML. Synthesis has maintained and enhanced it since the upstream project effectively become unmaintained in 2004.
- SyncEvolution
- Provides the frame work for writing a SyncML client as well as a complete solution, available currently via the command line. Integrates the Synthesis SyncML Engine into Linux by adding HTTP(S) transports and configuration handling. Plugins provide access to local data. Support is already included for Evolution Data Server (used in Moblin, desktop Evolution, Maemo), Mac OS X, and plain files.
Source Code
The code is available in git repositories:
- SyncEvolution
- Gitorious repository, Ohloh statistics
- upstream Synthesis
- git://www.synthesis.ch/libsynthesis.git, Ohloh statistics
- staging area for patches against upstream Synthesis
- Gitorious repository
The goal of the libsynthesis repository on moblin.org is to prepare patches developed by the core SyncEvolution team and publish them for upstream inclusion. If you want to contribute patches yourself, please work with the Synthesis repository and contact Synthesis regarding their contributor agreement.
When compiling from source, then --with-synthesis-src= in the SyncEvolution configure is useful to compile both projects in a single "configure+make" invocation. "make install" is only needed for the sync-UI's data files and for automatically starting the syncevo-dbus-server.
Issue Tracking
The main bug and issue tracker for SyncEvolution is on bugs.meego.org:
SyncML related issues can be filed there or directly on synthesis.ch.
Contributions
The goal is to keep the number of copyright holders with claims to the code manageable. End of 2009, Patrick Ohly as the original author and Intel Corporation own the copyright of the code. We understand that signing over code ownership to a corporation and complicated contributor agreements are unpopular, so we accept contributions in several different ways:
- For small patches, please submit them to Bugzilla and confirm that you accept the copyright waiver by setting the corresponding checkmark. An email with an explicit reference to that waiver is also okay.
- For larger or ongoing contributions, please sign one of the Linux Foundation license agreements.
- Finally, if none of these options are agreeable, we also accept optional parts in separate files (like database backends) under a compatible open source license, with the original copyright.
Note that none of this changes your rights to use your own contributions for other purposes.
Further Reading
For those who just get started with SyncML, there are various technical articles. Some of them can be found on Patrick's blog, some on this site. Here is a list of recommended reading:
- project presentation - talk at Gran Canaria Desktop Summit 2009
- PIM Data Synchronization: Why is it so hard?- introduction to PIM Sync, SyncML, Synthesis Engine (originally published by LWN.net)
- SyncML Client Do-It-Yourself Style - tutorial for writing your own SyncML client using SyncEvolution (based on 0.8, but mostly still valid)
- Direct Synchronization, aka SyncML Server - design of next generation SyncEvolution
- Magic Tricks Revealed: How SyncML Works and When It Fails
- Calendar Time Stamps and Time Zones - why UTC is not sufficient
- iCalendar 2.0 + Detached Recurrences - synchronizing a meeting series with complex exceptions
- Time Zone Handling in Evolution - describes some pitfalls in VTIMEZONE handling