This area is an archive and is no longer actively maintained. Information found on this page is likely to be extremely out of date and therefore highly inaccurate.

CVS Development

This page concerns the process of developing CVS. It has been designed for contributors to CVS development, and those thinking of working on CVS. If you are simply a CVS user looking for information you should try the documentation or communication areas.

History of CVS Development

The most recent interim release of CVS is version 1.11.2. It contains a few enhancements and quite a few bug fixes since 1.11. We recommend an upgrade. Take a look at the NEWS File.

The most recent major release of CVS is version 1.11. It was code-named Steelhead and released in September 2000. You can read more about it here.

The previous major release was CVS 1.10 in August 1998. It was code-named Halibut.

Current Development Version

The current working version of CVS is available to all. It may not be thoroughly tested and it may not even compile on your system. So, unless you are helping to develop CVS or love getting the latest, greatest, and buggiest, there is a good chance that you should be running a released version of CVS instead.

If you are wondering about CVS on a particular machine, see our downloads page or look at the list of machines in the INSTALL file in the CVS source distribution. As INSTALL is continually updated, you may want to get the current working version. If you test CVS on a machine not listed, or you test a more recent version of CVS than the one listed, please send in an update as described in INSTALL.

Anonymous CVS

If you want to download a significant amount of source, use anonymous CVS. The directory containing CVS is known as ccvs so to get all the sources you would run:

cvs -d co ccvs

If you're running a very old version of CVS you might have to login first using an empty password:

cvs -d login

NOTE: This will take quite a long time. If you don't need everything, just get the file(s) you want, with a command like:

cvs -d co ccvs/src/client.c

Policies and Procedures

The main sources of information concerning CVS development are the HACKING and DEVEL-CVS files in the CVS source distribution. These files evolve, and in fact DEVEL-CVS was only added on 4 Feb 1997. So you might want to see below about getting the latest version.

Meet the CVS developers (list of developers, with an attempt to summarize what they have contributed to CVS).

Interim releases

There is always a current major release and usually a current minor release.

The major releases (1.10, 1.9, etc.) are exceedingly stable. They usually represent a major change and have a significant new feature added.

The minor releases (1.10.2, 1.10.7, etc.) are usually the best available version. It takes a significant amount of testing and thought for a change to make it from development to release. There are few cases where a later interim release was worse than an earlier release. Here is a list of bugs fixed in interim releases.

Interim releases are available for download.

Documented Interfaces:

CVS Client/Server Protocol:

The protocol is documented in doc/cvsclient.texi in the CVS source distribution. For the most part it puts the intelligence on the server. It also is designed for low-bandwidth connections and connections which might not be up all the time.

As far as we know the server has only been implemented once. The client side has been implemented much more, including:

  • The command line client, which is part of the CVS source distribution, is written in C and is a full-featured client. Although the code is readable, it is not the best place to turn if you are just learning the protocol (partly because it is so full-featured).
  • MacCVSClient implements a CVS client in C++. It includes the basic functionality but no bells and whistles.
  • jCVS implements a CVS client in Java. The parts of the code which talk to the server are broken out into classes which are intended to be usable in other contexts (such as special-purpose clients).

Working Directory Formats:

The way files are stored in the CVS working directories (for example the format of the CVS/Entries and CVS/Tag files) is documented in recent versions of the Cederqvist manual. Affected programs include the CVS client, the VC package for emacs, jCVS, and a vast number of special-purpose scripts.

Repository Formats:

The way files are stored in the CVS repository is documented in recent versions of the Cederqvist manual. Programs that are affected by this include the CVS server, CVSweb, CVSup (the mirroring tool from FreeBSD), and a vast number of special-purpose scripts.

Note that running RCS commands to update the CVS repository has the potential for problems because the programs use different locking mechanisms. CVS's mechanism is documented in the Cederqvist manual and involves lock files with names starting with #cvs. RCS's mechanism involves lock files with names like and is not supported by CVS. To use the CVS convention in scripts and other tools, see the cvslock program from Thomas Roessler.

The RCS file format itself is documented in the rcsfile(5) manpage in the RCS distribution and the file doc/RCSFILES in the CVS source distribution. Programs which can at least read this format include CVS, and RCS.

Derek Price, CVS developer and technical editor of Essential CVS (Essentials line from O'Reilly Press) , and others offer consulting services and training through Ximbiot.