SCCS: The Posix Standard Source Code Control System (2017)
sccs.sourceforge.net
sccs.sourceforge.net
One benefit of these ancient tools is that they are effectively done. They've been beaten on for years; all behavior and quirks are well understood, and whatever the promised feature set is, usually exists and works exactly as promised.
We used SCCS on a shared filesystem. If you really needed to edit a file somebody else had locked, you simply removed the lock file. Of course, social convention was that you better have a really good reason for doing that. If you went on vacation with files locked, it was pretty much expected that your locks would be removed, and that you'd have to merge or otherwise deal with your stranded edits.
That's common amongst the older breed of VCS: VSS or Perforce do the same.
It's useful when working on binary files which can't be merged. Some centralised VCS (e.g. SVN) can be opted into locked checkout on a per-file basis.
Definitely not a great default though.
I've worked with both SCCS, RCS, Perforce and git. The way SCCS and RCS did it was a pain, but Perforce's was IMO more feature than bug. When Perforce told me "uh, X is editing this file you're just about to edit", talking to X was usually a good idea for some reason I wasn't aware of. Sometimes X was working on one issue and I on another, and the deeper cause was actually the same. Sometimes X had forgotten to check in some work and would do so immediately when I asked.
Not always. But often enough that I liked those locks. (Hated the RCS/SCCS locks though. Those had far too much cost and offered too little value.)
For Perforce, that is false.
For Visual SourceSafe, that behavior is the default, but can be changed.
If you're doing critical heavy lifting or refactoring, merging inline changes is hell.
I think the informal technique works better since it’s a lot more flexible, but the basic concept is very useful.
And for some reason it's in POSIX. I'm pretty sure nobody even cares about its existence in POSIX, but it's technically there. Though I can't think of a single OS that ships SCCS; OpenBSD ships GNU CVS and their own RCS (OpenCVS is sadly in eternal limbo[1]), not sure what FreeBSD does. Linux distributions generally don't ship anything. And git has basically won anyway.
[1] http://openbsd-archive.7691.n7.nabble.com/Status-of-OpenCVS-...
Commercial UNIX systems do.
Check the documentation of Aix, HP-UX and similar.
0 - https://www.freebsd.org/cgi/man.cgi?query=what&apropos=0&sek...
EDIT: So, not yet, but they will. OpenBSD has a long story of reimplementing GNU tools in BSD, see the bc(1), dc(1) history.
[1] https://bsd.slashdot.org/story/04/12/06/1154242/new-bsd-lice...
SCCS was horrible, even by CVS standards. I had the "pleasure" of using this on HP UX back in the day and it wasn't fun at all.
* File oriented, there is no concept of an atomic commit, change set or anything similar, every file is independently tracked - so your commit may fail halfway (e.g. because of a conflict) and the repo is left in an inconsistent state, with some files having their changes applied and some not. RCS and CVS have inherited this wonderful design trait too. One of major Subversion improvements over CVS was introduction of atomic commits that either succeed or fail but not break halfway.
* Locking. Yay. You checked out a file, it got locked. If you forgot about it and e.g. went on vacation or something, everyone else was screwed until you came back ... Even CVS was not working in this way.
* Frequent file corruption. Hacking the ,v files was frequent, sometimes you had to do it as root (e.g. in the above-mentioned case of a colleague on vacation leaving a file locked). Hopefully you had good backups ...
* Yay for the wonderful "comma vee" extension that meant this didn't work on anything but Unix and even there some tools choked on it. Same for RCS and CVS ...
* No way to access the repository remotely, except over NFS, with all the associated problems.
SCCS (and RCS) were really meant to version individual files, such as system configuration files. There it was working relatively OK. However, using this for actual source code on a larger project with multiple developers was a pure masochism. I can't imagine anyone using this today. Even CVS runs circles around it, not to mention Subversion, Git or Mercurial.
RCS and CVS use "filename,v". SCCS uses "s.filename".
It is kind of amusing how tracking history has evolved over the years.
We started out with an initial version (of a file) and then tracking the changes since the beginning.
One of the major innovations with RCS was to track changes in reverse time, so that the latest version of the file was quickly accessible.
And with git and other DVCS, we're back to forward-time tracking of changes, but now with snapshots along the way to easily produce the current version on a branch.
While it's amusing to see someone still working on it, for new projects, if I was interested in not using git, I'd likely go for fossil just because it integrates many other useful tools like issue tracking. It is unfortunate that an integrated issue tracking never seemed to get widespread adoption in the git world.
These old tools are more common than the cool kids would have you believe.
When I said that there was SCCS in use at a major bank in 2010, the hope therefore was that the reader would think "that probably means that SCCS is in use elsewhere".
The JDK sources were maintained in SCCS (which was wrapped within CodeManager/Teamware) prior to being open sourced in 2007. The history in the OpenJDK repositories goes only back to that time. The (Oracle internal) archives of previous versions of the JDK, which date to before JDK 1.0, are still in SCCS format. I'll occasionally browse through the ancient history of these sources using Schily's SCCS implementation. What's cool is that all my old shell aliases and functions still work. Of course this is browsing/viewing only. I haven't checked in an edit using SCCS in decades.
2. Suppose you're implementing a Wiki where docs are version-controlled on a fs mounted by the web server. git doesn't really fit this use case since you'd need a shared checkout dir, whereas eg. RCS does, provided locking is accepted or even preferred
3. on-site version control of config files in /etc when you don't do full-blown DevOps