Two different models are commonly used for distributing data. In the first model, all clients synchronize their files with a central server. The server must be accessible by all clients at least from time to time. This model is used by CVS and InterMezzo.
The other possibility is to let equal hosts synchronize their data among each other. This is the approach Unison uses.
InterMezzo is a solution that only supports Linux systems at present. In the past, the support was limited to 32-bit little endian architectures (ix86). Due to the migration from the perl-based lento to InterSync, this limitation no longer applies. Nevertheless, caution is needed when synchronizing between different architectures, as this feature has not yet been tested thoroughly. CVS and Unison are also available for many other operating systems, including various Unix and Windows systems.
In InterMezzo, the data synchronization normally occurs automatically in the background as soon as a network connection can be established with the server. Manual intervention is only required when conflicts arise.
In CVS and Unison, the data synchronization is started manually by the user. This enables more control over the data to synchronize and easier conflict handling. On the other hand, if the synchronization intervals are too long, conflicts are more likely to occur.
Due to their interactive character, Unison and CVS appear to be slower than InterMezzo, which operates in the background. Usually CVS is somewhat faster than Unison.
Conflicts do not occur often in CVS, even if several people work on one large program project. This is because the documents are merged on the basis of individual lines. When a conflict occurs, only one client is affected. Usually conflicts can easily be resolved in CVS.
Unison reports conflicts, allowing the affected files to be excluded from the synchronization. However, changes cannot be merged as easy as in CVS.
Due to the noninteractive character of InterMezzo, conflicts cannot simply be resolved interactively. When conflicts occur, InterSync terminates with an alert message. In this case, the system administrator must intervene and possibly transfer files manually (using rsync or scp) to restore a consistent state.
InterMezzo synchronizes the entire file system. Newly added files in the file system automatically appear on the other computers.
Configured in the simplest way possible, Unison synchronizes an entire directory tree. New files appearing in the tree are automatically included in the synchronization.
In CVS, new directories and files must be added explicitly using the command cvs add. Thus, the user has more control over the files to synchronize. On the other hand, new files are often overlooked, especially if the question marks in the output of cvs update are ignored because of the number of files.
An additional feature of CVS is that old file versions can be reconstructed. A brief editing remark can be inserted for each change and the development of the files can easily be traced later based on the content and the remarks. This is a valuable aid for theses and program texts.
An adequate amount of free space for all distributed data is required on the hard disks of all involved hosts. CVS requires additional space for the repository on the server. The file history is also stored on the server, requiring even more space. When files in text format are changed, only the modified lines need to be saved. Binary files require additional space amounting to the size of the file every time the file is changed.
Unison offers a graphical user interface that displays the synchronization procedures Unison wants to perform. Accept the proposal or exclude individual files from the synchronization. In text mode, you can interactively confirm the individual procedures.
Experienced users normally control CVS from the command line. However, graphical user interfaces are available for Linux, such as cervisia, and for other operating systems, like wincvs. Many development tools (such as kdevelop) and text editors (such as emacs) provide CVS support. The resolution of conflicts is often much easier with these front-ends.
InterMezzo does not offer that much comfort. On the other hand, normally it does not require any interaction and should simply do its job in the background once it is configured.
The configuration of InterMezzo is relatively difficult and should only be performed by a system administrator who has some experience with Linux. root privileges are required for the configuration. Unison is easy to use and is also suitable for newcomers.
CVS is more difficult to use. Users should understand the interaction between the repository and local data. Changes to the data should first be merged locally with the repository. This is done with the command cvs update. Then the data must be sent back to the repository with the command cvs commit. Once this procedure has been grasped, newcomers are also able to use CVS with ease.
During transmission, the data should be protected against interception and manipulation. Both Unison and CVS can easily be used via ssh (Secure Shell), providing security against attacks of this kind. Use of CVS or Unison via rsh (Remote Shell) should be avoided and access by way of the CVS pserver mechanism in insecure networks is not advisable either.
In InterMezzo, the data synchronization is performed via http. This protocol can easily be intercepted or altered. To increase the level of security, SSL can be used, but this makes the configuration a little bit more difficult. InterMezzo should only be used without SSL in secure, trustworthy networks.
CVS looks back on a long record of deployment by developers for the management of program projects and is extremely stable. As the development history is saved, CVS even provides protection against certain user errors, such as the unintentional deletion of a file.
Unison is still relatively new, but boasts a high level of stability. However, it is more sensitive to user errors. Once the synchronization of the deletion of a file has been confirmed, there is no way to restore the file.
Currently, InterMezzo is still in alpha stage. As the files are stored in a separate file system, the probability of a major data loss is relatively low. However, something could go wrong with the file synchronization itself, leaving behind wrecked files. The resilience to user errors is also limited: when a file is deleted locally, the same step is performed on all synchronized hosts. For this reason, backups are strongly recommended.
Table 16.1. Features of the File Synchronization Tools -- = very poor, - = poor or not available, o = medium, + = good, ++ = excellent, x = available
InterMezzo | unison | CVS | mailsync | |
---|---|---|---|---|
C-S/equal | C-S | equal | C-S | equal |
Portability | Linux(i386) | Lin,Un*x,Win | Lin,Un*x,Win | Lin,Un*x |
Interactivity | - | x | x | - |
Speed | ++ | - | o | + |
Conflicts | - | o | ++ | + |
File selection | File system | Directory | Selection | Mailbox |
History | - | - | x | - |
Hard Disk Space | o | o | -- | + |
GUI | - | + | o | - |
Difficulty | - | + | o | o |
Attacks | - | +(ssh) | +(ssh) | +(SSL) |
Data Loss | o | + | ++ | + |