> well after Unix had fledged, its developers at CSRC found it necessary
> and/or desirable to borrow back a Multics concept: they named it mmap().
As far as I know no Research version of Unix ever had mmap.
Multics had a segmented universal memory. A process incorporated
segments into its address space The universal memory was normally
addressed via a hierachical segment-name directory. With enhancement
to provide for multisegment "files", the directory could serve as a file
system and file I/O became data transfer between segments.
Unix originally imitated the Multics file system, but not the universal
memory. mmap(2) weakly imitates universal memory by allowing a process
to nominally incorporate a portion of a file into the process address space
at page-level granularity. However, an update is guaranteed to be visible
to the file and other processes only upon specific request.
Does anyone know whether there are implementations of mmap that
do transparent file sharing? It seems to me that should be possible by
making the buffer cache share pages with mmapping processes.
Doug
I'm curious if anyone has any history they can share about the BSD
"talk" program.
I was fond of this back when it was still (relatively) common, but
given the way it's architected I definitely see why it fell out of use
as the Internet grew. Still, does anybody know what the history behind
it is? Initially, I thought it was written by Mike Karels, but that
was just my speculation from SCCS spelunking, and looking at the
sources from 4.2, I see RCS header strings that indicate it was
written by "moore" (Peter Moore?). talk.c says, "Written by Kipp
Hickman".
It seems to have arrived pretty early on with respect to the
introduction of TCP/IP in BSD: the README alludes to some things
coming up in 4.1c. Clem, you seem to have had a hand in it, and are
credited (along with Peter Moore) for making it work on 4.1a.
So I guess the question is, what was the motivation? Was it just to
have a more pleasing user-to-user communications experience, or was
discussion across the network an explicit goal? There's a note in
talk.c ("Modified to run between hosts by Peter Moore, 8/19/82") that
suggests this wasn't the original intent. Who thought up the
character-at-a-time display mode?
Thanks for any insights.
- Dan C.
IEEE Transactions on Software Engineering has asked me to write a
retrospective on the influence of SCCS over the last 50 years, as my SCCS
paper was published in 1975. They consider it one of the most influential
papers from TSE's first decade.
There's a funny quote from Ken Thompson that circulates from time-to-time:
"SCCS, the source motel! Programs check in and never check out!"
But nobody seems to know what it means exactly. As part of my research, I
asked Ken what the quote meant, sunce I wanted to include it. He explained
that it refers to SCCS storing binary data in its repository file,
preventing UNIX text tools from operating on the file.
Of course, this is only one of SCCS's many weaknesses. If you have anything
funny about any of the others, post it here. I already have all the boring
usual stuff (e.g., long-term locks, file-oriented, no merging).
Marc Rochkind
mrochkind.com
I was thinking about this some more.
IIRC: Peter and I sketched out the protocol for the sockets version on a
whiteboard in our office one night after a beer and pizza run. Rick
Spicklemeir, Tom Quarles, and Jim Kleckner also participated in those bull
sessions. I started writing the program soon after that and had it working
to a point in a couple of hours. I don't remember the issues, but a couple
of them were when I left for the USENIX conference later that week. When I
got back Peter had finished it and put it into RCS. The key is that the
coding was primarily Peter and myself, but Rick, TQ, and Jim all had
contributed in some manner, too,
Although the famous bug of using a vax integer, you can squarely blame me —
and as I said, having worked on networking for several years before my time
at UCB, I should have known better. But did not even think about it. I
failed Henry's ten programming commandments and concluded that the world
was a Vax. Mei culpa.
ᐧ
On Fri, Dec 13, 2024 at 10:03 AM Mark Seiden <mseiden(a)gmail.com> wrote:
> (I know there is a special place in hell for those who explain a joke,
> but, you asked…)
>
> it’s just an allusion to the Black Flag Roach Motel product (still being
> produced)
> which has a trademark on the phrase “Roaches Check in… But they Don’t
> Check Out”.
>
> Yeah, I knew that much. My question to Ken was about what this was saying
about SCCS.
Marc
This is verging on COFF material, and I won't mind if someone
moves the discussion thither:
Clem Cole:
As a satisfied user of SCCS (and later Bitkeeper), it's still my preferred
choice.
====
I have to admit SCCS is one of the many pieces of software
I tried for a week or two > 40 years ago and abandoned because
I couldn't stand it. I don't think I ever tried RCS, because
I could see it didn't what I saw as the underlying problems.
CVS likewise. Subversion was the earliest version-control
system that felt usable to me.
What bugged me so much? The earlier systems were focussed
entirely (or for CVS, almost entirely) on individual files.
There was no way to link changes that affected more than one
file:
-- SCCS and RCS don't (so far as I can tell) understand any
relation between files at all. When I'm working on a real
project of any size, there is almost always more than one
file, and there are often changes that affect multiple files
at once: if an interface changes, the changes to definitions
and uses really all should be a single commit, logged in one
go and reversible as a single coordinated operation; if I
refactor code, moving it between files and perhaps adding
files or removing them, likewise. It is possible to check
in a bunch of files at once and reuse the log message, but
I couldn't find a way to make it a true coordinated single
commit; and neither SCCS nor RCS has a way I could find to
record, as a structured commit, that files are added or
removed from a directory or directory tree.
-- CVS can track adds and deletes and can bundle changes
into a single commit on the command line, but the changes
are still stored individually per file.
-- None of the systems even tries to track file renames,
something I also do occasionally as programs and especially
documentation evolves.
It wasn't until I discovered Subversion that I started using
version control regularly in my own work.
Ironically, a few years after I began using svn for myself,
I ended up working in places that had great compost heaps
of RCS and CVS. This would have made sense in the 1990s,
but it was in the 2010s, and continues in the 2020s.
I now use hg for my personal work, and have been attempting
to drag my workplace into using git if only so new hires
don't have to learn clumsy outdated stuff just to do their
jobs. I expect to retire (not for this reason) before I
really succeed, though.
Norman Wilson
Toronto ON
----- Forwarded message from Rick Smith <rick(a)rbsmith.com> -----
Date: Fri, 13 Dec 2024 18:22:29 -0500
From: Rick Smith <rick(a)rbsmith.com>
To: Larry McVoy <lm(a)mcvoy.com>
Subject: Re: [TUHS] SCCS roach motel
X-Mailer: Apple Mail (2.3826.300.87.4.3)
Hi Larry,
I likely can???t post to TUHS without joining, though I can read it fine.
Anyway, feel free to edit and post:
Marc,
I remember in 1992 driving to the UCSD library to get that issue of TSE and
make make copy of the article. I still have it and wrote about it on HN [1].
The link I posted at the end there is dead (wayback [2]). It is a post
by J??rg Schilling about your post here on TUHS about SCCS.
Yes, we could get lost in the weeds about choice of control-A, lack of
merge bookkeeping and the corner cases with -i and -x when applying strict
order to a partial order when computing the graph-to-set but in the big
picture, the SCCS system is a huge contribution. Congratulations on
writing one of the most influential papers in TSE's first decade!
Certainly is that for me.
Aside, Larry wrote:
> ... He [Rick] did point out that my weave implementation was the only
> one written such that I could have N serial sets in my hand, and do one
> pass through the weave and get N different checked out files. I don't
> think we ever used that but if we did it would be in smerge.c.
The original makepatch() uses it in sccs_getdiffs() which walks the weave
calling changestate() once to track weave structure and printstate() twice,
generating a diff in one pass.
While this is a hats off to Marc, there is also a hats off to Larry
for extending the SCCS work with TeamWare and Bitkeeper. I studied SCCS
(and other engines).
Larry built systems.
[1] https://news.ycombinator.com/item?id=26225001
[2] https://web.archive.org/web/20190403213137/http://sccs.sourceforge.net/sccs…
----- End forwarded message -----
--
---
Larry McVoy Retired to fishing http://www.mcvoy.com/lm/boat
I just came across a 1995 post from Gordon Letwin, early Microsoft employee
and lead architect of OS/2, about the history of OS/2. There are a few
paragraphs in it about Microsoft and UNIX. Here's Letwin's post:
https://gunkies.org/wiki/Gordon_Letwin_OS/2_usenet_post
And the UNIX-related paragraphs:
*It's extremely hard to do development work on an operating system when
someone else controls the standard. "Control" in this case is a matter of
public perception. For example, Microsoft was once very big in the Unix
world. In fact, we considered it our candidate for the future desktop
operating system, when machines got powerful enough to run something good.
We were the worlds biggest seller of Unix systems. DOS was, when we first
wrote it, a one-time throw-away product intended to keep IBM happy so that
they'd buy our languages.The UNIX contracts were all done when Bell Labs
was regulated and couldn't sell Unix into the commerical marketplace. So
although they wrote it and were paid royalties, they couldn't develop it in
competition to us. But after a few years that changed. Bell was
degregulated and now they were selling Unix directly, in competition to
us! They might sell it for cheaper than we had to pay them in royalties!
But that wasn't the real killer, the real killer was the Bell now
controlled the standard. If we wrote an API extension that did X, and Bell
wrote an incompatible one that did Y, which one would people write for?
The ISVs know that AT&T was a very big company and that they'd written the
original, so they'd believe that AT&T controlled the standard, not MS, and
that belief would then define reality. So we'd always just be waiting for
what AT&T announced and then frantically trying to duplicate it.Bill Gates
knew, right away, that there was no strong future in Unix for us any more.
Fortunately at that time, DOS was taking off and we were learning, along
with everyone else, about the power of standards. So the primary OS team -
the Unix guys - joined with the secondary OS team - the DOS guys - and the
earliest versions of OS/2 were born. (This was before IBM came on board,
so it wasn't called OS/2!)*
Marc Rochkind
All, I received this detailed e-mail from Yufeng Gao who has done a great
job at analysing some of the DECtapes that Dennis made available to the
Unix Archive. I'm sure many of you would be interested and, possibly, could
provide some feedback on his work. A tarball of his efforts are here:
https://mega.nz/file/1cJFTJxT#BgszYuFc_ebSMaQXAIG5b2NtaGInPWMoaxExPM5Lr9Y
Cheers, Warren
P.S. I have a follow-up e-mail coming ...
----- Forwarded message from Yufeng Gao -----
Subject: UNIX DECtapes from Ritchie
Hi Warren,
I am writing you this email after seeing the DECtapes from Dennis
Ritchie that you put up last year. I found them while playing around
with the early C compilers on Ritchie's site. After some research into
the tapes, I have written a parser to parse them and convert them into
tarballs suitable for preservation. Most importantly, the 'dmr' tape
and 's1' tape are currently not decoded properly.
The biggest issue with the current decoding of the 's1' tape is, well,
there is none. After quickly glancing over the tape, I have concluded
that it is in fact not one of the middle tapes of an rkd(1) backup, but
a copy of UNIX INIT DECtape from a version of UNIX between V1 and V2. I
have extracted its contents:
Mode UID GID Size Date Name
---------- --- --- ----- ------------------- ------------
-rw-rw-rw- 0 0 512 1970-01-01 00:00:00 [vcboot]
-rw-rw-rw- 0 0 2048 1970-01-01 00:00:00 [bos]
-rw-rw-rw- 0 0 12288 1970-01-01 00:00:00 [wunix]
-rw-rw-rw- 0 0 12288 1970-01-01 00:00:00 [cunix]
-rw-rw-rw- 0 0 3072 1970-01-01 00:00:00 [unassigned]
-rwxr-xr-x 1 0 424 1970-01-01 00:00:00 /etc/init
-rwxrwxrwx 3 0 446 1970-01-01 00:00:00 /etc/getty
-rwxr-xr-x 3 0 82 1970-01-01 00:00:00 /bin/chmod
-rwsr-xr-x 0 0 794 1970-01-01 00:00:00 /bin/date
-rwsr-xr-x 0 0 1290 1970-01-01 00:00:00 /bin/login
-rwsr-xr-x 0 0 232 1970-01-01 00:00:00 /bin/mkdir
-rwxr-xr-x 1 0 954 1970-01-01 00:00:00 /bin/sh
-rwsr-xr-x 0 0 3678 1970-01-01 00:00:00 /bin/tap
-rwxr-xr-x 3 0 2010 1970-01-01 00:00:00 /bin/ls
578 blocks, 98 (16.96%) used, 480 (83.04%) free.
B = boot; D = directroy;
. = free; X = file data;
O = bos; W = wunix;
C = cunix; S = rf slack;
U = unassigned program;
|0123456789ABCDEF
--+----------------
00|BOOOOWWWWWWWWWWW
01|WWWWWWWWWWWWWCCC
02|CCCCCCCCCCCCCCCC
03|CCCCCUUUUUUSSSSS
04|SDXDXDXDXXDXXXDX
05|DXXDXXXXXXXXDXXX
06|XD..............
07|................
<...>
What is significant here is it contains the vcboot and bos programs
mentioned in bproc(7), as well as a Warm and a Cold UNIX kernel. This
version of UNIX appears to be between V1 and V2, which I believe is the
earliest to exist in binary form. The reason why I say it's between V1
and V2 is its bos program accepts the following console switches
compared to V1 and V2:
| UNIX V1 | s1 | UNIX V2
----------------------+----------+-------+---------
Warm boot | [1]73700 | ??? | ???
Cold boot | 1 | 1 | 1
Unassigned 3K prog | 2 | 2 |
Dump core & halt | 10 | 10 | 10
Boot from RK | | 20 | 20
Dump core & warm boot | | 40 | 40
Boot from paper tape | 0 | 0 | 0
Load DEC loaders | 57500 | 57500 | 77500
----------------------+----------+-------+---------
UNIX load address | 400 | 400 | 600
----------------------+----------+-------+---------
The boot-from-unassigned-3K-program option was probably in the process
of being depreciated, as the 3K of space is also loaded as a part of
the Cold UNIX despite it not being used by the Cold UNIX kernel. The
list of files on the 's1' tape also appear to be between V1 and V2:
| V1 | s1 | V2
-----------+-----+-----+-----
/etc/init | Yes | Yes | Yes
/etc/getty | No | Yes | Y/N
/bin/chmod | Yes | Yes | Yes
/bin/chown | Yes | No | No
/bin/date | No | Yes | Yes
/bin/login | No | Yes | Yes
/bin/cp | Yes | No | No
/bin/ln | Yes | No | No
/bin/ls | Yes | Yes | Yes
/bin/mkdir | Yes | Yes | Yes
/bin/mv | Yes | No | No
/bin/rm | Yes | No | No
/bin/rmdir | Yes | No | No
/etc/mount | No | No | Yes
/bin/sh | Yes | Yes | Yes
/bin/stat | Yes | No | No
/bin/tap | Yes | Yes | Yes
-----------+-----+-----+-----
Given that the files on this tape are identical to the same files on
the 's2' tape and that the files on the 's2' tape are also sort of
between V1 and V2, and that this tape is named 's1' while the other is
named 's2', they are probably from the same version of UNIX. I have
tried booting the 's1' tape using SIMH, but unfortunately it did not
work and I have not yet attempted to debug it.
Next I'm going to talk about the 'dmr' tape. It’s interesting, most of
it was written by tap(1) running under UNIX V1-V2, but files in the
./paper directory were written by tap(1) running under UNIX V4. When
decoded using the tap(1) program itself, the timestamps and access
modes of those files are garbled. My program corrected the timestamps
and access modes in the converted tar(1) archive. The same goes for the
'nsys' tape.
The tar(1) conversion of 's2'
(/Archive/Distributions/Research/1972_stuff/s2-bits.tar.gz) in the TUHS
archives is missing some files in the /etc directory - compare it with
mine and Ritchie's (Ritchie's has wrong timestamps and access modes,
however). Speaking of timestamps and the 's2' tape, the timestamps
outputted by tap(1) are inaccurate because 1972 is a leap year and the
ctime(3) function hard coded 28 for the number of days in February.
I have attached an archive of my tar(1) conversion of each tape, as
well as tarballs containing all the slack space data and unused blocks
which I dumped for data recovery and forensic analysis purposes. There
are some interesting bits and pieces in the unused blocks of various
tapes, but I have not had time to look into them in detail. Just a very
quick summary:
* The 'config' tape has leftover of a dictionary file.
* The 'dmr' tape has some assembler manual ?roff leftover.
* The 'dmr2' tape has some paper ?roff leftover.
* The 'e-pi' tape has a lot of interesting binary stuff, including
bits and pieces of a B compiler from what I can tell.
* The 'ken' tape has some C source fragments and Thompson’s mail
templates and some UNIX manual ?roff leftover.
* The 'ken-du' tape has some paper ?roff leftover.
* The 'ken-sky' tape has some binary leftover.
* The 'nsys' tape has some source code leftover of what seems to be
the kernel.
* The 's1' tape has some source code leftover of what seems to be
userland programs.
* The 'scratch' tape has some binary and source listing and ?roff
leftover.
* The 'unix' tape has some binary leftover.
I hope that these newly extracted stuff could be put up in the TUHS
archives :). If the attachment in this email somehow doesn't come
through, I have also uploaded the archive [1]here. I have a disassembly
of vcboot and bos from 's1', they may help with the UNIX V1
reconstruction project - let me know if you need them. If you can get
the 's1' kernel to boot, I'd like to also receive an update.
Sincerely,
Yufeng Gao
----- End forwarded message -----
> From: Yufeng Gao
> This version of UNIX appears to be between V1 and V2
It's too bad it's not 'between V2 and V3', since the UNIX kernels V2 and V3
are missing. (V4 is the earlist one that we have, after the V2 and onward gap.)
So, depending on how far from V1 (which we have) it is, it _might_ be worth
dis-assenbling. It would be particularly worth having it if it suppports the
KS11, since almost no documentation of that has survived; code that uses it
would allow re-creation of a programming manual for it.
> From: Lars Brinkhoff
> Is the kernel for a PDP-11/20 or /45?
I don't think it can be the /45; as of V2, the /45 was apparently expected in
the near future, and this was before the V2.
Noel