Firefly vs. CVS
Fundamental Differences
To understand the difference between Firefly and CVS, one needs to grasp the underlying differences between the design of the two systems. While both are configuration management systems, several key concepts that form the foundation of the systems differ greatly.
System Architecture
CVS is a file-oriented version control tool basing the RCS package which uses clear text files to contain development history and file system folders to organize the data structure of the repository. All changes done to a certain file is recorded in one single history file. Since CVS uses a per-file structure to store development history, operations on a macro-level, such as branching and label, slows down dramatically as the number of files increases in a repository. If a folder contains too many files, the performance of CVS will suffer as well.
Also, CVS uses rsh to communicate between client and server. As the number of users increases, system performance will drop because each user opens a separate process. And because each users has to be assigned with a separate process, CVS is forced to use read and write lock to limit the performance when multiple users attempt to access the same file simultaneously.
Firefly is a branch-based configuration management system. It uses a proprietary database to store all files and development history. The database store contents and changes indexes. User cannot access data in the repository directly and file system structure is hidden from end users. This ensures that the threat of a virus of malpractice is reduced to a minimum. Branching and label is always instantaneous regardless of the amount of file involved. Also, multiple access to the same file is never a problem.
Firefly implements a true server/client structure and each connection to the server opens up a thread instead of a process. This not only uses significantly less system resource but also makes communication between users much easier, faster and more reliable.
Branch
The difference between CVS branch and Firefly branch is perhaps the most important one. Many features in Firefly, or the lack of them in CVS, stems from this distinction.
Branch in CVS is file specific which means a file contains or, is tagged with, branches.

Aside from the performance hit (each time a branch or label is created, CVS has to go through each file and tag them individually), branching in CVS is troublesome at best. Since branches are tagged on files, each user is able to create branches at will. There's no stopping developers using CVS from branching off mindlessly except good faith. Branch merge can be a mess because repetitive merge isn't checked and script has to be written for branch lock.
Branch in Firefly is a first-class citizen. It is a logical container of files and changes. Files are part of branches.
Branch in Firefly has the factor of time. It evolves as development progresses thus has its own history like files. Such concept is also called codeline or stream.

These characteristics of branch in Firefly has many advantages, which will be illustrated in later sections.
Changeset
Changeset is a concept unique to Firefly. CVS has no such notion. As its name implies, a changeset is a set of changes, usually related. It makes up the history of a branch, helps developers to organize their daily work and aids project managers to manage branches more easily. Changesets are created by developers and submitted to branches which is an atomic operation. It makes task-oriented operations possible.
Staging Workspace
Staging Workspace is a server-side mirror of your Local Workspace (the rough equivalent of working area in CVS) or your private stream on the server. It contains not only the contents of the files in your workspace, but also the histories and changes you made.
The existence of a staging workspace also makes process approval possible. A project manager can set the system to require his/her approval before any change is allowed into the branch.
Staging Workspace will hold your changes until a Submit command is issued at which point these changes become part of the history on your staging workspace and are merged to the parent branch.
Projects
CVS has no clearly defined notion of project. It uses module to server at a substitute. Modules are separated by folders and a module can contain other modules in its sub directories. This leads to a great deal of confusion because a module can be a project, a component of a project, or a folder. How would one know which is which without intricate knowledge of the repository structure?
A project in Firefly is the same as a development project and like branch, it is a first-class citizen. A project is a project and nothing else. It cannot contain other projects.
Features and Benefits
Distributed Development
With Firefly ServerSync module, you can have multiple development teams and servers all over the globe and you will still feel like you are working in adjacent rooms. To learn more about Firefly ServerSync, please read ServerSync user guide.
CVS does not support geographically distributed development. Although client and server can communicate over TCP/IP protocol for remote development, if network performance is less than optimal, then performance will become an issue. Moreover, if for various reasons, such as security or practicality, there's no network connection between two development site, CVS will be rendered useless.

Task-Oriented Operation
Firefly implements a task-oriented work model through changeset. It helps you to better organize your local workspace. Your daily operations will no longer be file based but task based, which is much more human-behavior like and helps to increase efficiency.
What is a task? A task is an item in a Change Request system. Such item could be a request for bug fix, feature enhancement, design requirement or document update. If you have a CR system, you can associate your CR items with changeset. The relationship between changeset and CR item is multiple-association.
Although CVS can be integrated with bug tracking systems, it does not support changeset since all of its operations are file based. This leads to unorganized local development. Since CVS does not support codeline as well, development history becomes murky at best. There's no PROJECT history, only repository history. All history is packed together with no clear hierarchical structure.

Atomic Operation
Atomic operation means such operations is a whole and cannot be broken down to smaller units. They have a binary state, either they complete or they fail. There's nothing in between. In Firefly, Changeset submit, label and branching practices: creation and merge, are all atomic transactions. For an example, if you submit a changeset with 10 changes, either these 10 changes all get submitted, or they all don't. You can never have five changes submitted and the other five still in local workspace. This guarantees the data integrity in your repository.
CVS is a per-file transaction system. That means if one attempts to commit 10 files and the network connection was cut off at the 6th file, then the first five new versions will stay on server. And more likely than not, the build will be broken until the rest of the batch is transferred or the admin revert the first five files back to their old versions.
FleXtream Branching
The technology behind branching in Firefly is called FleXtream. With FleXtream Branching, you can easily implement stream-base development. A picture of the whole project will be readily available. The purpose and users of each branch will be very clear.
Firefly supports unlimited stream levels and the time of creating a stream or label in Firefly is a near-constant . It increases linearly instead of exponentially as the number of files and folders increase and the curve is almost flat. In fact, Firefly doesn’t copy any file when creating branch, even if the files were modified on any of the branches.
Any two streams, not just parent and child, can be merged in Firefly. In fact, there are a series of actions can be done on any two streams. They can be merged, compared, and synchronized.
Aside from performance issue discussed in previous sections, branching in CVS is much more restricted. It lacks a top-level view of the project. Project managers have no easy way of knowing how many branches were created, which files belong to which branch, who did what change to which branch, etc.

Parallel Development
Because of the advanced branching technology and practices it implements, parallel development is a breath with Firefly. Different streams in Firefly are separate entities and changes done on them will be isolated until explicit merge command is executed. This does not mean branch merge is a difficult task in Firefly however. Quite on the contrary, branch merge is easier than ever in Firefly. FleXtream makes branching best practice and SCM Patterns implementation easy and straightforward.
Implementing parallel development in CVS is much more difficult because branch compare and merge is painfully hard.
Easy Branch Management
Firefly offers an extensive GUI to help you manage branches in your projects. Branch merge, compare, sync and creation are made easy by buttons on the toolbar and wizards which guide you through the processes.
CVS has no systematic branch management commands.

Click here to enlarge.
Label Management
In Firefly, label is a project level concept instead a file level tag. Therefore, label creation is very fast in Firefly. After a label is created, it can not be changed because a label is a snapshot of the branch at a specific time in development history and you can not change history. File rename, move or delete should not affect existing labels and they do not in Firefly.
Aside from the convenient GUI and wizard to help you through the typical label operations like download, setting, delete, compare and creation, Firefly also provides you with the ability to easily retrieve all labels belong to a stream; to compare two labels, to create a new branch basing on a label and to create a label basing on an existing label.
Labels have two states in Firefly, active and inactive. You can set a past label to be inactive and set Firefly to display only active labels.
Offline Mode
You can setup a local workspace on your laptop and take all your work on the go. You can checkout files in offline mode and edit or move/rename them, or add new files to source control. All history and changes will be kept in the local workspace and ready to be transferred to the server. When you come back to the office, all change will be uploaded to the server.
CVS does not support offline development. It's true you can check out a file, go home and hack away, then return and check the file back in. However, all history while you are working at home will be lost. One update entry in history is all you get.
Complete History
Firefly records all development history, even rename/move, offline operations, and all versions. For an example if Tom and Jerry both worked on a.c and check it in to produce file version 1.1.1 and 1.1.2. Jerry is told there's an conflict and is asked to merge the file. After the merge, a.c is at 1.2. Unlike other version control tools, Firefly will record both 1.1.1 and 1.1.2 as 1.2's parent version, which means no history is lost.
CVS does not support rename and move and therefore does not retain this part of the history. It does not support offline operations either. In the situation described above, CVS will only record 1.1.1 as 1.2's parent version.
vs. 
Move/Rename Support
Firefly keeps a comprehensive and complete history of its controlled assets. Any action done on such assets will be recorded. Aside from the usual recorded history items by legacy version control tools, Firefly also provides true support for Rename, Move, Delete and Undelete. Move and Rename in Firefly is not a delete and create process. The moved/renamed file retains its history instead starts anew.
Since Firefly supports true move and rename, it handles Refactoring in Extreme Programming with ease. For an example, if you decide to perform a refactoring operation in WSAD, Firefly will be automatically called to handle appropriate changes.
CVS rename support requires repository hacking and the renaming entry in history is lost. Move is not supported in CVS. If you move a file to a different location, you will have to add it again as if it is a new file and all history is lost. This inability to cope with rename/move also screw up labels.
Repeat Merge
Repeat merge is a severe problem in CVS and it is one of the main reasons why parallel development is so hard if you use CVS. CVS does not keep track of merges between two branches. As soon as the merge between two branches is done, CVS will forget it ever happened. The result is that if you make any change to either one of the branches and merge them again, all changes will show up again, including those you just saw in the previous merge. If you resolved a hundred conflicts in the previous merge, you are guaranteed to see a hundred or more conflicts this time around.
Firefly does not have this weakness because it automatically tracks all aspects of branch relationships, including which was branched from which and who just merged with who. Only the new changes will show up in the aforementioned scenario.
Local Workspace
Firefly’s local workspace provides a private sandbox for individuals involved in the development process. When you work in a local workspace, you control the versions of code and components you are working on. You will have total control over when and how your environment changes. It also provides safety. A local workspace isolates your work from others. Your work will not be affected by outside changes. In turn, your work will not affect other developers. So if anything goes wrong, you won't be a victim or you won't cost a disaster. You will work in your private sandbox to modify code and run unit tests. In other word, you will have a safe place to do your work, and test them and make sure everything is ok before you put the changes back to the stream.
CVS has similar concept too. And it is more flexible than Firefly in this regard because you can check out files to different folders all over your hard disk while a Firefly local workspace has to remain under the same root. This is because we want to retain the same file tree on your hard drive as it is on the server so that the work environment within the team will be the same in order to facilitate teamwork.
Comprehensive Report
Firefly offers the ability to generate reports, you can easily to see which files (versions) are contained in a release, and which changes are made to a branch in a specific time span.
Branch Checkout List
Firefly provides you with the option to display a complete list of file that’s been checked out or locked at any given time on any branch. Also showing on the list are the information about which file is checked out or locked by which user(s) and the option to release the lock or checkout.
CVS has no similar functionality.
Security
Authorization in Firefly is double-layered. The first is the branch ACL. Each branch can be set to allow certain user or user group to execute certain or all operations on it. Such operations include bringover, submit, create label, create local workspace and so on.
And file/folder level access control is the other frontier. This level of access control is much like that of NTFS'. You can set ACL for a folder and all sub-directories and files by default will inherits the ACL setting from their parent folder. Also you can set individual files/folders to allow access by certain user/group.

Click here to enlarge.
Binary File Handling
Firefly will automatically recognize if a file is text or binary. It also uses a binary diff algorithm to store and transfer file versions. That means Firefly handles binary files just as efficient as text files.
CVS require special argument when adding binary files to repository. And binary file versions are stored as separate, complete files.
Repository Management
Firefly server could host an unlimited number of repositories as long as hard disk space and operating system does not complain.
Firefly offers a set of powerful commands for you to manage repositories in the server. It includes repository backup and restore without any third party applications. Repository backup can be scheduled or executed manually. The backup process could be mirror or incremental.
CVS offers no repository management commands. If you want to add or remove a repository, you will have to manually edit the configure file then restart the server for the change to take effect.
High Performance
Firefly is a highly efficient system. Firefly’s advanced technologies like Smart Transfer and Java Remoting makes data transfers efficient and fast. The communication overhead is kept to a minimum in Firefly. You won’t waste any time waiting for your version control tool to finish its job.
Firefly performance remains the same as file count, user number and repository size increase.
The performance of CVS is depended heavily on user and file count. On one hand, if too many users login at the same time, CVS server will slow down because too many processes hugs all system resources and the increasing number of read/write locks build up access time. On the other hand, if there are too many files inside a repository, the time to branch or label a project will increase dramatically.
SmartTransfer
In Firefly, Only the difference between two versions is transferred between client and server both directions. And this is true for both text files and binary ones. We call this technology SmartTransfer. This not only makes the process of Submit and Bringover fast, but also saves precious network bandwidth.
Delta transfer in CVS is mono-directional. Only data transferred from server to client is the difference between two versions. Data transferred from client to server is always the full content.
Web UI
Firefly Web UI is a powerful feature. It is not just an information portal where properties and statistics about controlled objected are displayed. You can complete most of the tasks like branch, label creation, ACL setup and so on. Also, the Web UI makes code review easier than ever.
CVS can be set up to support such functionality as repository browsing, file download but these are mainly for display purposes. You can't really get anything done through CVS web.

Graphical Version Tree
Firefly provides a graphical version tree to intuitive display of file versions. It is able to display file versions in two modes: file complete versions and file versions by development streams. With Firefly's graphical version tree, you will be able to see how a file evolves over the development process, how its version splits and merges and exactly at which version a new branch is created, etc.
CVS has graphical version tree through third-party GUIs. They can display file branches.

Click here to enlarge.
VDM
Firefly can intelligently resolve most of the conflicts, but when the unfortunate occurs and you have to step in, Hansky Visual Diff-Merge is here to help. Hansky VDM is a graphical compare and conflict resolve tool integrated into Firefly. It supports compare and 3-way merge. Third-party tools are supported by Firefly. You can configure client to use different diff-merge tools by file extension.

Time Safe
With Firefly, client and server can be set to different time and it wouldn’t make any difference at all. File time stamp is only recorded as common file property. The system does not use it to judge if a file has been changed. You don’t need to deploy NTP (Network Time Protocol) in order to keep Firefly working properly.
CVS uses file time stamp to determine if a file has been changed.