Code Co-op
Encyclopedia
Distinguishing features
Code Co-op is a distributed revision controlRevision control
Revision control, also known as version control and source control , is the management of changes to documents, programs, and other information stored as computer files. It is most commonly used in software development, where a team of people may change the same files...
system of the replicated type.
It uses peer-to-peer
Peer-to-peer
Peer-to-peer computing or networking is a distributed application architecture that partitions tasks or workloads among peers. Peers are equally privileged, equipotent participants in the application...
architecture to share projects among developers and to control changes to files. Instead of using a centralized database
Centralized database
A Centralized database is a database located and maintained in one location, unlike a distributed database. One main advantage is that all data is located in one place. The disadvantage is that bottlenecks may occur....
(the repository), it replicates its own database on each computer involved in the project.
The replicas are synchronized by the exchange of (differential) scripts. The exchange of scripts may proceed using different transports, including e-mail (support for SMTP and POP3, integration with MAPI clients, Gmail
Gmail
Gmail is a free, advertising-supported email service provided by Google. Users may access Gmail as secure webmail, as well via POP3 or IMAP protocols. Gmail was launched as an invitation-only beta release on April 1, 2004 and it became available to the general public on February 7, 2007, though...
) and LAN.
Code Co-op has a built-in peer-to-peer wiki system, which can be used to integrate documentation with a software project. It is also possible to create text-based Wiki databases, which can be queried using simplified SQL
SQL
SQL is a programming language designed for managing data in relational database management systems ....
directly from wiki pages.
Standard features
- Distributed development support through E-mailE-mailElectronic mail, commonly known as email or e-mail, is a method of exchanging digital messages from an author to one or more recipients. Modern email operates across the Internet or other computer networks. Some early email systems required that the author and the recipient both be online at the...
, LANLocal area networkA local area network is a computer network that interconnects computers in a limited area such as a home, school, computer laboratory, or office building...
, or VPN - Change-based model—modifications to multiple files are checked in as one transactionDatabase transactionA transaction comprises a unit of work performed within a database management system against a database, and treated in a coherent and reliable way independent of other transactions...
- File additions, deletions, renames, and moves are treated on the same level as edits—they can be added in any combination to a check-in changeset
- File changes can be reviewed before a check-in using a built-in or user-defined differ
- Synchronization changes can be reviewed in the same manner by the recipients
- Three-way visual merge
- Project history is replicated on each machine. Historical version can be reviewed, compared, or restored
- Integration with Microsoft SCC clients, including Visual Studio
History
Code Co-op was the first distributed version control system. It debuted at the 7th Workshop on System Configuration Management in May 1997http://portal.acm.org/citation.cfm?id=716428&dl=ACM&coll=portal.
The development of Code Co-op started in 1996, when Reliable Software, the distributed software company that makes it, was established. Reliable Software needed a collaboration tool that would work between the United States
United States
The United States of America is a federal constitutional republic comprising fifty states and a federal district...
and Poland
Poland
Poland , officially the Republic of Poland , is a country in Central Europe bordered by Germany to the west; the Czech Republic and Slovakia to the south; Ukraine, Belarus and Lithuania to the east; and the Baltic Sea and Kaliningrad Oblast, a Russian exclave, to the north...
. The only dependable and affordable means of communication between the two countries was e-mail, hence the idea of using e-mail for the exchange of diffs. Of course, with such slow transport, using a centralized repository was unfeasible. Each user of Code Co-op had to have a full replica of the repository, including the history of changes.
The problem was reduced to that of designing a distributed database that uses slow and unreliable transport for synchronization (later, faster LAN transport was also added). It also followed that the synchronization between multiple sites must use some kind of peer-to-peer
Peer-to-peer
Peer-to-peer computing or networking is a distributed application architecture that partitions tasks or workloads among peers. Peers are equally privileged, equipotent participants in the application...
protocol.
Challenges
The biggest challenge for a distributed system is the merge problem—How to create a single "official" version of the project from contributions made by many independent developers?In a centralized version control system, it's the server that keeps the official copy of the project—the central repository. All changes are made against the trunk version stored in that repository. Conflicts are avoided by providing a centralized locking mechanism. The server is locked during each individual check-in operation.
In a distributed system, each project member works on his or her private copy of the project, and check-ins are made into a local repository. In open distributed systems each user works on their respective branch, which has to be manually merged into the trunk at some point. A closed system, like Code Co-op, creates instead the illusion of a single trunk against which all check-ins are done. This alleviates the need for frequent merges.
Theoretical foundations
Code Co-op is an example of a distributed database. Local repositories are considered the replicasReplication (computer science)
Replication is the process of sharing information so as to ensure consistency between redundant resources, such as software or hardware components, to improve reliability, fault-tolerance, or accessibility. It could be data replication if the same data is stored on multiple storage devices, or...
of this virtual database. Each check-in corresponds to a distributed commit—a non-blocking version of a two-phase commit.
External links
- Reliable Software
- Product review by ColdFusion Developer's Journal.
- Review in Larkware News