CVS excludes symbolic links because when they are stored in a version control system they can pose a security risk.
In place of symbolic links, scripts that require certain privileges and conscious intervention to execute may be checked into CVS.
[citation needed] CVS labels a single project (set of related files) that it manages as a module.
This task is mostly handled automatically by the CVS client, requiring manual intervention only when an edit conflict arises between a checked-in modification and the yet-unchecked local version of a file.
Clients can also compare versions, request a complete history of changes, or check out a historical snapshot of the project (e.g.: based on a given date).
These scripts are installed by an entry in CVS's loginfo file, which can trigger email notification or convert the log data into a Web-based format.
CVS assumes that the majority of work takes place on the trunk, and that branches should generally be short-lived or historical.
[10] The code that eventually evolved into the current version of CVS started with Brian Berliner in April 1989, with later input from Jeff Polk and many other contributors.
Brian Berliner wrote a paper introducing his improvements to the CVS program—which describes how the tool was extended and used internally by Prisma, a third-party developer working on the SunOS kernel, and was released for the benefit of the community under the GPL.
CVS itself is free software, and its non-restrictive modus operandi and support for networked operation—which allow dozens of geographically dispersed programmers to share their work—fits the collaborative nature of the open-source world very well.