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 "1.5" 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