[Synckolab] Thunderbird + synckolab + lightning = Replacement for Outlook
Edward Ned Harvey
edward.harvey at lyricsemi.com
Sun Nov 11 07:22:15 PST 2007
Thank you Niko Berger! This is a step in the right direction, and I
want it to take over the world, but as an IT administrator, I can't
quite deploy this to my users yet...
At the company where I work, I am hoping to deploy thunderbird/imap
instead of outlook/exchange, because thunderbird works on mac, windows,
linux, and it's exactly the same among all 3. But imap has some
The main advantages of Exchange over IMAP are:
Exchange treats Contacts, Calendar, and Tasks like any other mail
folder. Synchronized among all clients. If you delete something from
one client, you don't have to repeat it on another client, and so on.
(The same is true for filters/rules and for viewing preferences, but
contacts calendar and tasks are the most important.)
Enter synckolab and lightning. Now I have a calendar, tasks, and
addressbook, which can be synchronized to imap folder, and then
synchronized again at another client. Awesome idea!
This is the core of the trouble I have right now: Given all the
permutations of sync algorithms, it seems synckolab uses "combine"
- Synchronize: New and updated items are copied both ways. Renames and
deletes on either side are repeated on the other.
- Echo: New and updated items are copied from master to slave. Renames
and deletes on the master are repeated on the slave.
- Contribute: New and updated items are copied from contributor to the
central repository. When the contributor renames something, the rename
is repeated in the central repository. Nothing gets deleted from the
- Combine: New and updated items are copied both ways. Renames and
deletions are not repeated.
Specifically, this is the behavior I am seeing:
- I have thunderbird on a mac, and on windows.
- I set up imap folder for addressbook, and set up synckolab on both
- On the mac, I had Ben, Barbara, and Alex in my addressbook.
- On the PC, I had Ben, Barbara, and Dave in my addressbook.
- Both machines copied contacts to the imap folder, and I ended up with
duplicates for Ben & Barbara.
- I deleted the duplicates, and they keep coming back.
Unfortunately, the "Synchronize" algorithm is the toughest to implement.
Suppose there are two folders, A and B, and that a synchronization
engine will periodically inspect these folders, to repeat changes on the
other side. Then the synchronization engine must remember the way each
folder looked, the last time it was inspected. The synchronization
engine must keep a copy of A, and when it inspects A again, create a
list of differentials to repeat on B. In fact, the engine must keep a
copy of *both* A and B, so it can create a list of differentials for
Fortunately, once an initial sync is completed, both A and B are
identical. So it becomes redundant to keep a copy of both A and B. If
the engine keeps a copy of either one, it in fact has a copy of both.
Outlook is lucky they can avoid this problem - An initial sync is always
done immediately upon first startup. So it's safe for them to treat the
server as authoritative, and just do a download to achieve the initial
sync. The problem is a little tougher for thunderbird, because so many
users already have items in both containers.
So the way I think best to implement something like synckolab is thus:
- During initial configuration of synckolab, check both the local and
imap containers to see which ones are empty. If they're both empty, the
initial sync is already done. If only one is empty, just copy stuff to
the empty container, and the initial sync is done. If neither container
is empty, you have to prompt the user:
( ) Copy from local to imap (and delete whatever is already in imap)
( ) Copy from imap to local (and delete whatever is already in local)
( ) Combine local & imap, copy in both directions.
- If you want to simplify the above process, it's not terrible to just
automatically copy in both directions.
- Once the initial sync is done, synckollab keeps a 3rd (private) copy
of all the data, so synckollab can always compare the local vs
last-known vs imap containers, to create mutual diff lists.
More information about the Synckolab