The Wayback Machine - https://web.archive.org/web/20210825204250/http://sccs.sourceforge.net/sccs_vs_rcs.html
SCCS vs RCS
SCCS has been introduced in 1972 by by Marc J. Rochkind at Bell Labs,
RCS has been introduced in 1982 by Walter Tichy at Purdue University.
Both program systems started as closed source projects.
- RCS converted to OpenSource in Summer 1990.
- SCCS converted to OpenSource in December 2006.
Functionally RCS and SCCS (up to revision 5.0) are similar, with SCCS
now having some more features since it continues to be updated.
RCS did introduce some design flaws that are not present in SCCS
(SCCS is able to detect corrupted files, RCS is not).
1. Interface
SCCS has an easier interface for first time users. There is a command
overview with "sccs help sccs" and "sccs help sccs_subcmds". The
sccs prefix gives a more intuitive usage.
SCCS has instrinsinc support for branches as the weave delta format
is the best way to merge branches. RCS just handles branches like
any other diff.
2. What's in a History File?
SCCS keeps it's history in files with a "s." prefix, RCS adds a ",v"
suffix.
SCCS automatically creates and manages a SCCS sub-directory for the
history files for RCS, you need to manually create such a directory.
SCCS uses a history format that is easy to understand by humans, RCS
uses a hard to understand format.
SCCS includes checksums in the history files to allow for easy verification
of the integrity and provides a "val" program that makes an even more in
depth analysis. RCS does not have checksums.
When SCCS checks out the most recent version, a full integrity check of
the history file is performed. When RCS does the same, it just copies
from a center part in the history file and thus may not detect problems
with other versions.
SCCS uses a concept of "merged deltas" (called "the weave") that makes
branching easy and that allows to annotate each line of code with version
number and author at no extra costs. With RCS history files you need to
apply expensive algorithms to give the same information.
The SCCS concept of merged deltas allows to retrieve any version at the
same cost O(n), where n is the number of deltas in the history file. On
recent hardware (with more than 8MB of RAM), SCCS is typically six
times as fast than RCS even in the easy case for RCS when RCS retrieves
the latest version. This happens since file I/O is fast since at least
20 years if you use UFS or ZFS. RCS (even recent optimized versions) slows
down when retrieving older revisions as RCS needs to apply a list of
separate backwards deltas.
RCS may not need to read the whole history file (as SCCS needs to) but
RCS history files are typically aprox. 20% larger than SCCS history files.
RCS uses fewer intermediate files while applying a delta to a history file.
This is the only advantage that could be seen in RCS as the act of renaming
the intermediate files done by SCCS may dominate the total amount of time
used by SCCS on platforms with slow filesystems (such as e.g. AIX).
Editing SCCS history files is feasible to repair things but no person
did report any history file corruption with SCCS since 1984 as filesystem
stability is now OK. RCS history files are hard to understand and it is
easy to make mistakes when trying to edit them. As SCCS uses checksums,
manual edits of the history file of course need to be followed by an
"sccs admin -z file" to recalculate the checksum. In any case only edit
if you really know what you are doing.
3. Keywords
SCCS and RCS use a different mechanism for keywords that are expanded in
the text. For SCCS a keyword like "%I%" is replaced with the revision
number if the file is not checked out for editing. The SCCS keywords
seem to be harder to remember than the RCS keywords but the command
"sccs help get_kywds" lists an overview of the keywords and thus makes
SCCS more user friendly than RCS. SCCS allows to control the expansion
of each keyword separately and store the decision in the history file,
while RCS only allows to define a global control at command line level.
SCCS by default warns when a file contains no expanded keywords. This
helps to identify bad edits from files that have not been properly
checked out for editing.
4. Performance
Unless you are on a platform with a filesystem that offers very slow
directory operations, SCCS is always faster than RCS. SCCS retrieves
all versions at the same speed, while RCS has an extra slow down when
retriving older versions. Previous RCS versions did slow down
dramatically in such a case, recent RCS versions still need twice as
much time to retrieve the oldest version (compared to retrieving the
latest revision). This can be seen easily in case there are more than
very few revisions in the history file.
Even though RCS has been optimized to retrieve the latest revision
fast, retrieving the latest revision of a file (which is the easiest
case for RCS) using a recent SCCS version is typically aprox. 6x faster
than doing the same with a recent RCS version on a history file with
comparable content. The unoptimized SCCS as distributed with Sun Solaris
is still typically aprox. 2x faster than RCS.
When SCCS uses the SCCSv6 history file format, the performance reduces
by aprox. 10% compared to the SCCSv4 history file format. This is still
significantly faster than RCS.
5. Annotating Version Identification
SCCS is able to determine when a specific line of code was added to
a system because this is an operation at no extra costs in a weave
delta stream.
6. Problems
As RCS has no checksum, it may take longer to realize a problem than
there are backups to restore the last intact revision. SCCS indicates
problems at the same time when they occur.
RCS people often claim that they could extract the latest revision from
the history files by using a text editor. This however takes a long time
if a project includes more than few files. Compiling SCCS on your current
platform thus is usually faster than trying to manually retrieve content
from RCS history files.
7. Conversion
There are scripts to convert history files from SCCS to RCS and vice versa.
8. Support
SCCS is OpenSource software and supported by many vendors that usually include
SCCS in the base system. SCCS is part of the POSIX standard and it is easy to
compile on all major platforms.
9. Development status
RCS does not seem to get new features these days and only seems to get
maintenance to fix bugs.
SCCS is actively maintained and currently evolves to a distributed source
code control system.
10. Did RCS learn from the conceptional mistakes made by SCCS?
No, definitely not.
- RCS started with two digit year numbers and time stamps based on
local time.
- RCS "fixed" this in the late 1980s, with an incompatibile
move to 4-digit year numbers and GMT time stamps.
- SCCS fixed this with a move to 4-digit year numbers and
GMT time zone offsets while introducing the new SCCS v6
history file format.
- RCS has no checksums. This saves a few percent of the time but
prevents to detect corrupted history files. SCCS always implemented
checksums to check for file corruption.
- RCS history files have the content of the payload file located with a
variable offset in the history file. The payload starts aprox. in the
middle of the history file and the meta data in front of the payload
has to be read and understood by RCS to find the beginning of the
payload. The meta data in front of the payload is even harder to parse
than the SCCS meta data. With respect to this fact, RCS is even worse
than SCCS.
- RCS stores the last revision of the file as plain text and reverse
patches to restore older versions. SCCS uses the weave format that
makes all revisions available with the same expense. RCS has to apply
the reverse patches in a row in order to restore older versions.
11. Command Comparison
SCCS RCS Explanation
sccs create file ci file Checks in the file for the
first time, creating
the revision history file.
sccs get file co file Check out a file for reading.
sccs edit file co -l file Check out a file for
modification.
sccs delget file ci file Check in a file previously
locked.
what file ident file Print keyword information.
sccs prs file rlog file Print a history of the file.
sccs -R log ??? Print a Changelog for a project
sccs tell ??? Print a list of edited files in "."
sccs -R tell ??? Print a list of edited files for
a project
sccs sccsdiff -rx -ry file rcsdiff -rx -ry file Compare two revisions.
sccs diffs file rcsdiff file Compare current with last
revision.
sccs edit -ix-y file rcsmerge -rx-y file Merge changes between
two versions into file.
[sccs is multi-user] rcs -l file Lock the latest revision.
[sccs is multi-user] rcs -u file Unlock the latest revision.
Possible to break another's
lock, but mail is sent to the
other person explaining why.
Last change 2015/01/28