Unfortunately, present-day synchronizers seldom give the user enough information to predict how they will behave under all circumstances. Simple slogans like ``Non-conflicting updates are propagated to other replicas'' ignore numerous subtleties---e.g., Precisely what constitutes a conflict between updates in different replicas? What does the synchronizer do if updates conflict? What happens when files are renamed? What if the directory structure is reorganized in one replica?
Our goal is to offer a simple, concrete, and precise framework for describing the behavior of file synchronizers. To this end, we divide the synchronization task into two conceptually distinct phases: update detection and reconciliation. We discuss each phase in detail and develop a straightforward specification of each. We sketch our own implementation of these specifications and discuss how they apply to some existing synchronization tools.
(Joint work with Sundar Balasubramaniam, Matthieu Goulay, and Trevor Jim.)