I bought a new phone (HTC Legend / Android 2.1) to replace my aging iPhone 3G (yay). It took me 3 solid days of research and testing to figure out how to get it to sync between my Mac and Zimbra (blah). Here’s what I finally settled on.

Zimbra Open Source Edition supports open standards for syncing contacts (cardDAV) and calendars (calDAV). Unfortunately, as is often the case with “open” standards, there is still limited support for these: Thunderbird, an opensource email program still doesn’t support cardDAV. For all the complaining open source advocates do about closed source standards, it’s pretty weak that they take forever to comply with those standards are open. Support for MS Office Open XML really gets me down; I find every other office system to be fundamentally flawed because no one implements this open standard properly. Honestly, I don’t really care for open source, I care about quality end-use products with good development API’s.
Anyway I digress. The problem is that Mac OS X Leopard’s AddressBook doesn’t support cardDAV. iCal does support calDAV though. Next, the HTC Legend (Android 2.1) has no support for cardDAV or cardDAV. Again, an entire OS is open source and doesn’t support open sync standards that have been around for years. Android doesn’t even support SyncML out of the box. So, the open standards don’t help much. Now, there is (one, ONLY ONE) app on the Android market (Calendar Sync) to support calDAV and since Leopard supports calDAV, we can sync calendars fine. Easy, except the app config gave me some trouble, but that’s just the result of being new to a system
Ok so on to contacts. Looking in the addressbook configuration for Leopard, it has an option to sync to Google. Part of the point of a groupware server is that data is centralised there, but since the Zimbra iSync connector requires a licensed version of their software. The free Appliance version will work, but I can’t get the VMDK’s to work in VirtualBox and I despise VMWare Server Edition. Actually, if you have the Appliance version of Zimbra, this whole point becomes moot, because it supports ActiveSync to Android and iSync to Mac
So endeavoring to use Google as a middle ground for syncing, I check that box. There aren’t really any other options other than login details. So I add some contacts and wait. They don’t appear on Google straight away. They don’t appear after an hour. Or after 24 hours. Ok so what went wrong? Oh, Apple forgot to mention that the sync isn’t automatic: It happens when you sync your iTunes device (iPod, iPad, iPhone). You don’t have one? Well, you are unworthy of getting assistance from Apple to sync your addressbook to Google then. Actually, there is a well known hack to get this to work, but I don’t like having to hack commercial software. Commercial software has a tendency to detect the hack and undo it without letting you know this has occurred :/
Ok so syncing Addressbook to Google won’t work. You could use SpanningSync actually, if you want to buy a license. It does work quite well. Even if we did that though, how do we get the data back to Zimbra? Google is supposed to be just a middle man, not the authority on the data. The ONLY way I could find to do this is to install a Funambol server and use the connectors available. Actually, they have an Android connector too, which makes syncing really easy. The Funambol server simply acts as a gateway to the Zimbra data. Unfortunately, the Zimbra connector for Funambol seems to be unmaintained, and most of the documentation on getting this to work is via the forums. Sounds like hit and miss to me. Plus, I didn’t want to have to install another service onto the Zimbra server. It’s more to maintain, more to learn, more to break!
I had the idea of using this program available for Android called LVContacts. Sync the data between the Mac and the Phone, and then let LVContacts sync it back to Zimbra. I bought this app and discovered that it only does 1-way syncs: It will download contacts from the Zimbra server, but not update them on the server when you have added new contacts to the phone. Not helpful, especially given that the official site for the app doesn’t say anything about this.
So, the only way I could find of syncing contacts between Zimbra and the Mac was using a Thunderbird extension called Zindus. I was initially just looking for an EMail app that supported cardDAV and read / write access to the mac Addressbook. I couldn’t find one. After messing with Thunderbird, I found that it provides read-only access to the Mac Addressbook. Also, Zindus won’t sync the imported addresses to Zimbra, even after renaming the Mac OS Addressbook group in Thunderbird to zindus/Mac.
The result of this is that I couldn’t find a way to sync my Mac Addressbook with Zimbra. So I had to rethink my strategy and involve using Thunderbird as my main email application. I only use the Addressbook for emailing people and looking up a phone number when I want to dial out with a landline anyway. There is no other external integration with other apps. In this respect I am lucky.
Thunderbird also has an extension called Lightning which is a calendar application. It does support calDAV and so will sync to the Zimbra server directly. Thus, I can work in Thunderbird exclusively and know what my data will be synced to Zimbra.
Ok, now back to getting the contacts on to the Android phone. SyncMate requires a Google account to sync to the Legend, so that just adds another level of complexity to this process. Mark / Space’s The Missing Sync will only sync the Mac Addressbook, which will miss all the contacts I am managing in Thunderbird. So, we come back to using Google as the middle man. Zindus will sync out to Google and Zimbra at the same time. I.e. when a contact is added to Zimbra, it will add it to the Google account. When a contact is added to Google, it will sync it to the Zimbra account. This completes our sync triangle.
What we have now looks like this:

And gives us a complete Over-The-Air sync solution for free, with Zimbra OSE still being the authority on data. Oh how painful (but free) open source can be. Don’t get me wrong though, proprietary software isn’t the answer. I mean, why is it easier for people to pirate Microsoft Windows than it is to use the licensed version? Really, pirate versions don’t make you phone Microsoft when you replace the mainboard just because the system ID changes. At least I know that no matter whether an organization adopts an open source philosophy or a proprietary systems approach, I will still have a job in IT!