Newly discovered earliest draft of a Unix manual (1971)
tuhs.org
tuhs.org
http://www.tuhs.org/Archive/PDP-11/Distributions/research/Mc...
This is amazingly cool and clearly deserves more attention, so we've changed the title and re-upped the submission to give more people a chance to see it.
(Submitted title was 'DMR Unix “Edition Zero” Manual Unearthed (restoration in progress)'.)
Perhaps change the URL to the directory, so people can see the Readme and image scans, without needing to come here to the comments?
I'm glad it's getting attention now!
You could, and people did, write a lot of code with just that doc as documentation.
Maybe it's because I'm a Bell Labs fanboy, I find this doc impressive.
I looked up TGM which is mentioned in this manual (TGML). Apparently this was what Thompson used to write the B compiler.
Anyway, I ended up on the Multicians site. Some online accounts of computing history suggest UNIX was an alternative to the Multics project.
On the Multicians site it suggests Multics had a very different concept of "files", which could also be "segments". There was apparently potential ambiguity regarding the term "file".
Here's my question for anyone who was there:
Today we often see the phrase "Everything is a file" being cited when introducing people to UNIX. But I have never seen anyone attempt to explain why. What was the context in the 1970's?
Was the UNIX notion of "files" a reaction to the approach taken by Multics?
Again, this early manual says: "The most important role for UNIX is to provide a file system."
Segments are a hardware mechanism often used then for accessing or protecting things in memory due to simplicity & speed of mechanism. Several modern techniques in INFOSEC use segments to protect programs.
Here's how the MULTICs filesystem worked, though. Gist of it seems like MULTICS came up with all the key concepts I recognize for hierarchical, filesystems.
http://www.multicians.org/fjcc4.html
Hansen's history shows the Titan System also had a similar filesystem:
http://brinch-hansen.net/papers/2001b.pdf
Both predate UNIX with Thompson and Ritchie actually using MULTIC before writing UNIX. So, it's probably main influence.
"Today we often see the phrase "Everything is a file" being cited when introducing people to UNIX. But I have never seen anyone attempt to explain why. What was the context in the 1970's?"
It's explained here:
https://superuser.com/questions/364152/why-is-everything-is-...
More detail from authors (see 3.3):
http://www.scs.stanford.edu/nyu/04fa/sched/readings/unix.pdf
"Again, this early manual says: "The most important role for UNIX is to provide a file system.""
Ritchie was clear in other writings that there wasn't a single goal for UNIX at all other than to be usable and more than what they were working with. It was designed to be efficient and enable programmers rather than hold them back. The rest fell into place from there.
Too bad networking was not part of early UNIX; sockets could perhaps have been part of the "carefully selected set of fertile ideas" that could be "keys to the implementation of a _small_ yet powerful operating system."
"carefully selected" (i.e., things are deliberately left out)
"small" (i.e., smaller than the alternatives)
These are ideas in programming that seem to have been lost over time.
https://en.wikipedia.org/wiki/Amoeba_%28operating_system%29
https://en.wikipedia.org/wiki/Convergent_Technologies_Operat...
[1] http://www.tuhs.org/Archive/PDP-11/Distributions/research/Mc... [2] http://www.tuhs.org/Archive/PDP-11/Distributions/research/Mc...
processid, status = wait()
This primitive causes its caller to suspend execution until one
of its children has completed execution. Then wait returns the
processid of the terminated process and a status value indicating
how the process died. (Processes which are never waited for die
unnoticed and presumably unmourned)."A lost opportunity to give C multiple return values.
typedef struct { pid_t pid; int status; } wait_t;
wait_t status = wait();
Those were the days.
> And I have not seen any claims from the 1970s or 1980s
> that the command stands for "catenate".
The Seventh Edition (1979) man page for cat(1) says “catenate and print”.Sixth Edition (1975) says “concatenate and print”.
So it looks like Bill Joy made the mistake! (and the Bell Labs people thought it funny?)
Catenate and concatenate mean basically the same thing, it's trivially easy to see people confusing the two - they might even hear one for the other if they're only familiar with one. That's not going to happen with catharsis.
Is that a joke?
CREAT(2) BSD System Calls Manual CREAT(2)
NAME
creat -- create a new file
LIBRARY
Standard C Library (libc, -lc)
SYNOPSIS
#include <fcntl.h>
int
creat(const char *path, mode_t mode);
DESCRIPTION
This interface is made obsolete by: open(2).
The creat() function is the same as:
open(path, O_CREAT | O_TRUNC | O_WRONLY, mode);
SEE ALSO
open(2)
HISTORY
The creat() function appeared in Version 6 AT&T UNIX.
BSD June 2, 1993 BSD 3.5.2 Create
To create a new file, the following call is used.
filep = create(name, mode)
But it's listed correctly as a system call. A1.6 creat
To create or recreate a file,
sys creat
name
mode 3.5.2 Create
To create a new file, the following call is used.
filep = create(name, mode)With that in mind, it's kind of funny to see that "correction" made by some OCR software.
filep = create(name, mode)
[1] http://www.tuhs.org/Archive/PDP-11/Distributions/research/Mc...