This article needs additional citations for verification .(March 2010) |
Original author(s) | Marc J. Rochkind |
---|---|
Developer(s) | Bell Labs |
Initial release | 1973[ discuss ] |
Repository | N/A |
Written in | First version: SNOBOL4 Rewrite: C |
Operating system | OS/360, Unix, Unix-like |
Platform | IBM System/370, PDP-11, IA-32 |
Type | Version control |
License | proprietary licenses, Common Development and Distribution License |
Website | The Open Group Base Specifications Issue 7, IEEE Std 1003.1-2008, 2016 Edition |
Source Code Control System (SCCS) is a version control system designed to track changes in source code and other text files during the development of a piece of software. This allows the user to retrieve any of the previous versions of the original source code and the changes which are stored. It was originally developed at Bell Labs beginning in late 1972 by Marc Rochkind for an IBM System/370 computer running OS/360. [1]
A characteristic feature of SCCS is the sccsid string that is embedded into source code, and automatically updated by SCCS for each revision. [2] This example illustrates its use in the C programming language:
staticcharsccsid[]="@(#)ls.c 8.1 (Berkeley) 6/11/93";
This string contains the file name, date, and can also contain a comment. After compilation, the string can be found in binary and object files by looking for the pattern @(#)
and can be used to determine which source code files were used during compilation. The what
command is available to automate this search for version strings. [3]
In 1972, Marc Rochkind developed SCCS in SNOBOL4 at Bell Labs for an IBM System/370 computer running OS/360 MVT. [1] He rewrote SCCS in the C programming language for use under UNIX, then running on a PDP-11, in 1973.
The first publicly released version was SCCS version 4 from February 18, 1977. [4] It was available with the Programmer's Workbench (PWB) edition of the operating system. Release 4 of SCCS was the first version that used a text-based history file format, earlier versions did use binary history file formats. Release 4 was no longer written or maintained by Marc Rochkind. Subsequently, SCCS was included in AT&T's commercial System III and System V distributions. It was not licensed with 32V, the ancestor to BSD. [5] The SCCS command set is now part of the Single UNIX Specification.
SCCS was the dominant version control system for Unix until later version control systems, notably the RCS and later CVS, gained more widespread adoption. Today, these early version control systems are generally considered obsolete, particularly in the open-source community, which has largely embraced distributed version control systems. However, the SCCS file format is still used internally by a few newer version control programs, including BitKeeper and TeamWare . The latter is a frontend to SCCS. Sablime [6] has been developed from a modified version of SCCS [7] but uses a history file format that is incompatible with SCCS. The SCCS file format uses a storage technique called interleaved deltas (or the weave [8] ). This storage technique is now considered by many version control system developers as foundational to advanced merging and versioning techniques, [9] such as the "Precise Codeville" ("pcdv") merge.
Apart from correcting Year 2000 problems in 1999, no active development has taken place on the various UNIX vendor-specific SCCS versions. [10] In 2006, Sun Microsystems (today part of Oracle) released their Solaris version of SCCS as open-source under the CDDL license as part of their efforts to open-source Solaris. [11]
The Source Code Control System (SCCS) is a system for controlling file and history changes. Software is typically upgraded to a new version by fixing bugs, optimizing algorithms and adding extra functions. [12] Changing software causes problems that require version control to solve. [1]
SCCS was built to solve these problems. SCCS from AT&T had five major versions for the IBM OS and five major versions for UNIX [13] Two specific implementations using SCCS are: PDP 11 under Unix and IBM 370 under the OS. [1]
SCCS consists of two parts: SCCS commands and SCCS files. [14] All basic operations (e.g., create, delete, edit) can be realized by SCCS commands. [14] SCCS files have a unique format prefix s.
, which is controlled by SCCS commands. [2]
An SCCS file consists of three parts: [15]
In SCCS, a delta is a single revision in an SCCS file. Deltas are stored in a delta table, so each SCCS file has its own record of changes. [15]
Every operation of each SCCS file is tracked by flags. Their functions are as below: [15]
SCCS uses three types of control records for keeping track of insertions and deletions applied in different deltas. They are the insertion control record, the deletion control record, and the end control record. Whenever a user changes some part of the text, a control record is inserted surrounding the change. The control records are stored in the body along with the original text records. [1]
SCCS provides a set of commands in the form of macro invocations that perform or initiate source code management functions with a simple syntax, such as create, get, edit, prt. [16] [17] It also provides access to the revision history of files under management. These commands are implemented as argument verbs to the driver program sccs.
The sccs command create uses the text of a source file to create a new history file. For example:
$ sccscreateprogram.c program.c:1.187 lines
The outputs are name, version and lines.
The command is a macro that expands to admin to create the new history file followed by get to retrieve the file.
$ sccseditprogram.c 1.1new delta 1.287 lines
Edit a specific file.
The command is a macro that expands to get -e.
$ sccsdelgetprogram.c comments? main function enhanced1.210 inserted0 deleted87 unchanged1.297 lines
Check in new version and get the new version from sccs.
The command is a macro that expands to delta to check in the new version file followed by get to retrieve the file.
$ sccsgetprogram.c 1.187 lines
The outputs are version and lines you want to get from specific file.
$ sccsprtprogram.c
This command produces a report of source code changes.
Most UNIX versions include a version of SCCS, which, however, is often no longer actively developed. [18] [ better source needed ]
The late Jörg Schilling (who requested the release of SCCS in the early days of the OpenSolaris project) [19] maintained a fork of SCCS [20] [21] that is based on the OpenSolaris source code. It has received major feature enhancements but remains compatible with the original SCCS versions unless using the "new project" mode. [22]
The Heirloom Project includes a version of SCCS derived from the OpenSolaris source code [23] and maintained between December 2006 and April 2007. [24]
GNU offers the SCCS compatible program GNU CSSC ("Compatibly Stupid Source Control"), which is occasionally used to convert SCCS archives to newer systems like CVS or Subversion; [25] it is not a complete [26] SCCS implementation and not recommended for use in new projects, but mostly meant for converting to a modern version control system.
Since the 1990s, many new version control systems have been developed and become popular that are designed for managing projects with a large number of files and that offer advanced functionality such as multi-user operation, access control, automatic building, network support, release management and distributed version control. Bitkeeper and TeamWare use the SCCS file format internally and can be considered successors to SCCS. [27] [28]
On BSD systems, the SCCSID is replaced by a RCSID starting and ending with $; the corresponding tool is ident. [29] This system is originally used by RCS and added automatically on checkout. The resulting source code revision control identifiers are documented in the NetBSD [30] and FreeBSD [31] style guides for their own code bases. NetBSD defines the custom keyword $NetBSD: ...$ while FreeBSD defines $FreeBSD: ...$ and a macro renamed __FBSDID.
The SRC version control system can also use the SCCS file format internally (or RCS's) and aims to provide a better user interface for SCCS while still managing only single-file projects. [32]
The Single UNIX Specification (SUS) is a standard for computer operating systems, compliance with which is required to qualify for using the "UNIX" trademark. The standard specifies programming interfaces for the C language, a command-line shell, and user commands. The core specifications of the SUS known as Base Specifications are developed and maintained by the Austin Group, which is a joint working group of IEEE, ISO/IEC JTC 1/SC 22/WG 15 and The Open Group. If an operating system is submitted to The Open Group for certification, and passes conformance tests, then it is deemed to be compliant with a UNIX standard such as UNIX 98 or UNIX 03.
troff, short for "typesetter roff", is the major component of a document processing system developed by Bell Labs for the Unix operating system. troff and the related nroff were both developed from the original roff.
In computing, a core dump, memory dump, crash dump, storage dump, system dump, or ABEND dump consists of the recorded state of the working memory of a computer program at a specific time, generally when the program has crashed or otherwise terminated abnormally. In practice, other key pieces of program state are usually dumped at the same time, including the processor registers, which may include the program counter and stack pointer, memory management information, and other processor and operating system flags and information. A snapshot dump is a memory dump requested by the computer operator or by the running program, after which the program is able to continue. Core dumps are often used to assist in diagnosing and debugging errors in computer programs.
Revision Control System (RCS) is an early implementation of a version control system (VCS). It is a set of UNIX commands that allow multiple users to develop and maintain program code or documents. With RCS, users can make their own revisions of a document, commit changes, and merge them. RCS was originally developed for programs but is also useful for text documents or configuration files that are frequently revised.
A man page is a form of software documentation usually found on a Unix or Unix-like operating system. Topics covered include computer programs, formal standards and conventions, and even abstract concepts. A user may invoke a man page by issuing the man
command.
In computing, tar is a computer software utility for collecting many files into one archive file, often referred to as a tarball, for distribution or backup purposes. The name is derived from "tape archive", as it was originally developed to write data to sequential I/O devices with no file system of their own, such as devices that use magnetic tape. The archive data sets created by tar contain various file system parameters, such as name, timestamps, ownership, file-access permissions, and directory organization. POSIX abandoned tar in favor of pax, yet tar sees continued widespread use.
In computing, ls
is a command to list computer files and directories in Unix and Unix-like operating systems. It is specified by POSIX and the Single UNIX Specification.
In software development, Make is a command-line interface software tool that performs actions ordered by configured dependencies as defined in a configuration file called a makefile. It is commonly used for build automation to build executable code from source code. But, not limited to building, Make can perform any operation available via the operating system shell.
compress is a Unix shell compression program based on the LZW compression algorithm. Compared to gzip's fastest setting, compress is slightly slower at compression, slightly faster at decompression, and has a significantly lower compression ratio. 1.8 MiB of memory is used to compress the Hutter Prize data, slightly more than gzip's slowest setting.
The history of software configuration management (SCM) can be traced back as early as the 1950s, when CM, originally for hardware development and production control, was being applied to software development. Early software had a physical footprint, such as cards, tapes, and other media. The first software configuration management was a manual operation. With the advances in language and complexity, software engineering, involving configuration management and other methods, became a major concern due to issues like schedule, budget, and quality. Practical lessons, over the years, had led to the definition, and establishment, of procedures and tools. Eventually, the tools became systems to manage software changes. Industry-wide practices were offered as solutions, either in an open or proprietary manner. With the growing use of computers, systems emerged that handled a broader scope, including requirements management, design alternatives, quality control, and more; later tools followed the guidelines of organizations, such as the Capability Maturity Model of the Software Engineering Institute.
The computer tool patch is a Unix program that updates text files according to instructions contained in a separate file, called a patch file. The patch file is a text file that consists of a list of differences and is produced by running the related diff program with the original and updated file as arguments. Updating files with patch is often referred to as applying the patch or simply patching the files.
pax is an archiving utility available for various operating systems and defined since 1995. Rather than sort out the incompatible options that have crept up between tar
and cpio
, along with their implementations across various versions of Unix, the IEEE designed a new archive utility pax that could support various archive formats with useful options from both archivers. The pax
command is available on Unix and Unix-like operating systems and on IBM i, and Microsoft Windows NT until Windows 2000.
Extended file attributes are file system features that enable users to associate computer files with metadata not interpreted by the filesystem, whereas regular attributes have a purpose strictly defined by the filesystem. Unlike forks, which can usually be as large as the maximum file size, extended attributes are usually limited in size to a value significantly smaller than the maximum file size. Typical uses include storing the author of a document, the character encoding of a plain-text document, or a checksum, cryptographic hash or digital certificate, and discretionary access control information.
In computing, a dynamic linker is the part of an operating system that loads and links the shared libraries needed by an executable when it is executed, by copying the content of libraries from persistent storage to RAM, filling jump tables and relocating pointers. The specific operating system and executable format determine how the dynamic linker functions and how it is implemented.
In Unix computing, crypt or enigma is a utility program used for encryption. Due to the ease of breaking it, it is considered to be obsolete.
The following tables describe attributes of notable version control and software configuration management (SCM) software systems that can be used to compare and contrast the various systems.
sum is a legacy utility available on some Unix and Unix-like operating systems. This utility outputs a 16-bit checksum of each argument file, as well as the number of blocks they take on disk. Two different checksum algorithms are in use. POSIX abandoned sum
in favor of cksum.
chattr is the command in Linux that allows a user to set certain attributes of a file. lsattr is the command that displays the attributes of a file.
Unix is a family of multitasking, multi-user computer operating systems that derive from the original AT&T Unix, whose development started in 1969 at the Bell Labs research center by Ken Thompson, Dennis Ritchie, and others.
development has been picked up by a group of volunteers who would like to keep the project alive and well