O
OpenSync has been trying, for several years, to address a really, really hard problem: PIM synchronization. Most people don't realize how difficult the problem is until they get into it (I didn't). Some of the hardest parts are dealing with multiple devices each of which only store part of the data (for example, if Device A stores a contact, it syncs to device B but device B doesn't support a Business 2 telephone number and the user changes something in the contact on device B -- should the updated record have the Business 2 number deleted on Device A along with the other change? And what happens if the user of device A has deleted the Business 2 number in the meantime -- is that a conflict? And then re-answer the question when there are simultaneous changes going on on 4 or 5 devices, none of which is a master and no one of which store ALL the data on the contact). OpenSync had a couple of goes at an architecture to handle all that (along with all the straight protocol conversions, interoperability hacks, reliability, performance, scalability, configuration, etc). Unfortunately it has just proved too hard, with only a small number of people interested in working on the problem.
The current version of OpenSync is just about usable for a limited set of protocols, if you take a lot of care, and if you can cope with writing XML to configure it by hand. Development has pretty much stopped and most current development has moved to SyncEvolution, which is much simpler and doesn't even try to address the really hard problems -- but it works, particularly for two-way syncs in a server/client model.