Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Posting-Version: version B 2.10.1a 7/7/83; site rlgvax.UUCP
Path: utzoo!linus!decvax!harpo!seismo!rlgvax!jeff
From: j...@rlgvax.UUCP (Jeffrey Kegler)
Newsgroups: net.lang.c
Subject: strncpy()
Message-ID: <1020@rlgvax.UUCP>
Date: Fri, 19-Aug-83 13:10:54 EDT
Article-I.D.: rlgvax.1020
Posted: Fri Aug 19 13:10:54 1983
Date-Received: Fri, 19-Aug-83 17:01:54 EDT
Organization: CCI Office Systems Group, Reston, VA
Lines: 74

As most of you know, the UNIX philosophy is to have everything have
explicit terminators, instead of being terminated by counts.

In strcpy() this has raised the complaint that a slight error in an
argument to strcpy() can result is destruction of a considerable amount
of data.  This could happen when the string to be copied is not
properly terminated, or is a bad pointer, or is just overlong.  One can
say that it is really up to the programmer to check for these things.
Another part of the UNIX philosophy is, wherever something might be
seen as either a protection or a restriction of the programmer,
depending on point of view, to assume it is a restriction.

For those of us who do desire to be protected from our own lapses,
especially when these lapses may lead to a core with its stack
destroyed, strncpy() exists.  It takes a third argument which gives an
explicit maximum length to the string.  However, for some strange
reason, it still does not guarantee its result will be null terminated
if it is overlong.  Instead it puts characters right up into the last
permitted location.  Always writing

		strncpy(string1, string2, n);
		string1[n] = '\0';

solves the problem, but whenever I see this in code, I wonder why
UNIX's string copy of explicitly n characters does not always result in
a string of n characters.

Further, it always copies a string of the length specified, adding
nulls once the source string has been terminated.  I can think of
situations where this is useful, but one has never occurred to me, and
far more often I wind up copying a string whose maximum length is 5000
and whose average length is 10.  So as a byproduct of this feature, I
would get an average of 4990 extra trips through the loop.

Finally, strncpy() is far less efficient than it could be.  Its main
loop maintains and updates both a string pointer and a count, and each
character copied requires a comparison to n, which is not is a
register.  I would get more into its behavior, but I do not know if the
code is public domain, unlike strcpy(), 4 versions of which are in K&R
on pages 100-101.

Below is the code for my rewrite of strncpy(), which never accesses
anything except a register in its main loop (if your compiler supports
this sort of thing), has a main loop one instruction shorter on the VAX
(all claims are for code generated by the C optimizer), guarantees the
copied string will be a legal string, even where the original was not,
and does no copying beyond the end-of-string.  The main efficiency
improvement does not depend on my changes from the behavior of
strncpy(), and scpy() could be rewritten to simulate strncpy()
exactly.

===========================

/*
 * Copy a string in a fail-safe manner.
 */
void
scpy(s1,s2,n)
register char *s1,*s2;
{
	register char *eos = s1+n-1;

	while(*s1++ = *s2++)
		if (s1 >= eos) {
			*eos = '\0';
			return;
		}
}

==============================

One could argue that the above is not as fail-safe as it should be, because
if n is zero or negative, the byte before s1 is zeroed, and a check for
such an n could be placed before the main loop.

Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Posting-Version: version B 2.10.1 6/24/83; site whuxlb.UUCP
Path: utzoo!linus!decvax!harpo!gummo!whuxlb!mash
From: m...@whuxlb.UUCP (John Mashey)
Newsgroups: net.lang.c
Subject: Re: strncpy()
Message-ID: <1283@whuxlb.UUCP>
Date: Sat, 20-Aug-83 08:05:17 EDT
Article-I.D.: whuxlb.1283
Posted: Sat Aug 20 08:05:17 1983
Date-Received: Sat, 20-Aug-83 10:20:06 EDT
Organization: Bell Labs, Whippany
Lines: 7

strcpyn() (before it was renamed strncpy(), was originally
written specifically t odeal with directories, accouting records,
and various other places in UNIX that expect fixed-length fields
containing varaible length strings padded with nulls.
There used to be numerous instances of slightly different code to
do the strncpy/strncmp functions in-line.
-mashey

Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Posting-Version: version B 2.10.1a 7/7/83; site rlgvax.UUCP
Path: utzoo!linus!philabs!seismo!rlgvax!jack
From: j...@rlgvax.UUCP (Jack Waugh)
Newsgroups: net.flame
Subject: Re: Unix philosophy (from net.unix-wizards)
Message-ID: <1156@rlgvax.UUCP>
Date: Tue, 13-Sep-83 11:06:12 EDT
Article-I.D.: rlgvax.1156
Posted: Tue Sep 13 11:06:12 1983
Date-Received: Tue, 13-Sep-83 23:09:59 EDT
References: <2540@umcp-cs.UUCP>
Organization: Computer Consoles
Lines: 16

Let's write portable code, and leave the kernel alone.
That way, the benefits of writing a program will be
multiplied by a higher number of systems that can run
the program.

Some of us out here in the commercial world have to write code and
transport it to many UNIX and UNIX-like systems.  Often, neither we
nor the customer can get hold of the kernel source.  This situation
is bound to continue, i. e., there will be plenty of binary licenses
sold.  The only way the industry can reliably supply programs for
such systems is if these systems follow some well-known standard, such
as the Seventh Edition UNIX Programmer's Manual, or the UNIX User's
Manual Release 3.0, and for developers to write their programs under
a kernel that also follows one of those well-known standards.

Jack Waugh

Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Posting-Version: version B 2.10.1 6/24/83; site utcsstat.UUCP
Path: utzoo!utcsrgv!utcsstat!laura
From: la...@utcsstat.UUCP (Laura Creighton)
Newsgroups: net.unix-wizards
Subject: Re: Unix philosophy
Message-ID: <1075@utcsstat.UUCP>
Date: Sat, 17-Sep-83 08:31:06 EDT
Article-I.D.: utcsstat.1075
Posted: Sat Sep 17 08:31:06 1983
Date-Received: Sat, 17-Sep-83 09:53:16 EDT
References: <4897@sri-arpa.UUCP> <1029@utcsstat.UUCP>, 
<2540@umcp-cs.UUCP> <1052@utcsstat.UUCP>
Organization: U. of Toronto, Canada
Lines: 33

Interprocess communication is perhaps the greatest weakness of unix.
Most people try to use signals for interprocess communication. this
is like trying to use a wrench to hammer nails home. it will work in
a fashion, but not terribly well, and if you do something wrong you
will break a perfectly good wrench.

everybody and his dog seems to have their own way of dealing with
interprocess communication. these days, I think that tunis is 
maybe the way to go. interrupts are converted to messages, and
there is message handling in the kernel. Unfortunately, this is
not unix. It is too bad that interprocess communication was a very
new idea when Dennis Ritchie and Ken Thompson were designing the
first unix.

All the other attempts to get interprocess communication seem like
the proverbial 'tacking a bag on the side of a ...' Very ugly.

I think that interprocess communication is going to be very important
in the future, but boy do I want one general way of doing it! Not
hundreds. And I do not know the best way to do it. A friend and I ...
no, lets be fair, Geoff Collyer came up with this, i just helped criticise
it until it came into its present form... came up with a rather elegant
and simple way to put semaphores into any unix kernel. (we think. there
hasn't been time to test it, alas.)  But if it does not get used by
the people at Berkeley and Bell and HP and DEC and whereever else
unix development work is being done then it is just a local kludge,
even if it is more elegant and pleasing than the official solutions.

And all local software that uses it will be an albatross on somebody's
neck in the future, something i would not like to inflict on anyone.

laura creighton
utzoo!utcsstat!laura

Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Posting-Version: version B 2.10.1 6/24/83; site wivax.UUCP
Path: utzoo!linus!wivax!dyer
From: d...@wivax.UUCP (Stephen Dyer)
Newsgroups: net.unix-wizards
Subject: Re: Unix philosophy--semaphores, message passing
Message-ID: <18677@wivax.UUCP>
Date: Sat, 17-Sep-83 18:09:32 EDT
Article-I.D.: wivax.18677
Posted: Sat Sep 17 18:09:32 1983
Date-Received: Sun, 18-Sep-83 04:59:21 EDT
References: <4897@sri-arpa.UUCP> <1029@utcsstat.UUCP>, <2540@umcp-cs.UUCP> 
<1052@utcsstat.UUCP>, <2605@umcp-cs.URe: Unix philosophy
Organization: Wang Institute, Tyngsboro, Ma.  10879
Lines: 9

Note that UNIX System V has semaphores, message passing, and shared
memory implemented as system call primitives.  We have just received
our tapes and are wading through the masses of documentation, so I
can't yet judge the facilities critically.  Still, it seems that if
there is anything resembling a "standard" this is (will be) it.

/Steve Dyer
decvax!wivax!dyer
sdyer@bbn-unix

Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Posting-Version: version B 2.10.1 6/24/83; site csd1.UUCP
Path: utzoo!linus!decvax!harpo!floyd!cmcl2!csd1!condict
From: cond...@csd1.UUCP (Michael Condict)
Newsgroups: net.unix-wizards
Subject: Re: Unix philosophy
Message-ID: <117@csd1.UUCP>
Date: Sun, 18-Sep-83 16:40:07 EDT
Article-I.D.: csd1.117
Posted: Sun Sep 18 16:40:07 1983
Date-Received: Mon, 19-Sep-83 00:54:18 EDT
References: <1075@utcsstat.UUCP>
Organization: New York University
Lines: 50

I'm no expert on the requirements and applications of interprocess
communication (IPC) but I do know that any reasonable definition of what
constitutes an IPC mechanism would include the now widely acclaimed Unix
pipeline.  Therefore it depresses, even saddens, me to hear so many people
talk about ways to do IPC in Unix without any discussion of pipelines (except
to immediately dismiss them as too weak).  If there are any remaining adherents
of the original Unix philosophy of Parsimony and Elegance in Design out there
besides me, please make your voices heard!  Surely there must be a reasonably
simple way to remove the heredity constraints on pipelines, so that arbitrary
processes can connect to and disconnect from one another, and an upward-
compatible way to add the necessary concurrent processing features to pipelines
(do we need more than a few things like mutually-exclusive read/write access,
flexible permission codes and the ability to find out the number of processes
that have a pipe open or the number of unread bytes sitting in a pipe?).

If we really cannot generalize the pipeline construct adequately, then let us
at least have the courage to throw it away, and replace it with your new-fangled
IPC system.  But please, please let us not allow Unix to grow fat and ugly,
but rather taller and more powerful.  No matter what gross iniquities are
done to it in the name of progress, Unix will be around to help or haunt us
for many years.  It has become the FORTRAN of operating systems with respect
to the number of different processors it runs on, the variety of tasks
to which it is applied and (because of the former two) its longevity.  We need
to be very careful that we do not let the analogy extend any further than this.


Michael Condict			...!cmcl2!csd1!condict
Courant Inst., New York U.

P.S.  Here's a concrete proposal (someone must have already thought of this).
Why not let pipelines have names that appear in the file system as a new kind
of directory entry in addition to files and directories.  Then they can
live and die independently of processes and any process that knows the name
of a pipeline and has the right permission can read or write to it.  This is
the VMS approach, with its mailbox devices, which are nothing more than a
generalized pipeline of the sort I'm proposing (actually it's less, because
the VMS designers forgot to make these mailboxes accessible at the command
level for connecting processes together easily, but that does not argue against
the utility of mailbox devices as an IPC).  Of course we would preserve the
current behavior of pipes with respect to shells creating them automatically
upon seeing "|" in a command; only the explanation of what goes on internally
would change.  Actually, this proposal simply amounts to having a new kind of
file, in which things are deleted as they are read and which is inherently
sequential (seek is not allowed).  Of course we would expect the kernel to go
out of its way to store most or all of this kind of file in main storage, for
efficient access.  As for the concurrent processing features, like mutual
exclusion, we can benefit from having these features available for pipes, files
and devices alike, so there is no particular reason to associate them only
with pipes.

Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Posting-Version: version B 2.10.1a 7/7/83; site rlgvax.UUCP
Path: utzoo!linus!decvax!harpo!seismo!rlgvax!guy
From: g...@rlgvax.UUCP (Guy Harris)
Newsgroups: net.unix-wizards
Subject: Re: Unix philosophy
Message-ID: <1171@rlgvax.UUCP>
Date: Mon, 19-Sep-83 02:09:26 EDT
Article-I.D.: rlgvax.1171
Posted: Mon Sep 19 02:09:26 1983
Date-Received: Mon, 19-Sep-83 08:51:46 EDT
References: <1075@utcsstat.UUCP>,  <117@csd1.UUCP>
Organization: CCI Office Systems Group, Reston, VA
Lines: 68

In reply to several points on interprocess communication:

	But sometimes the kernel must be changed, because there are certain
	things that one just can't do in a subroutine library (although
	it is amazing to me that Newcastle implemented a fully distributed
	file system better than Sun's 4.2 without touching the kernel).
	The best example is interprocess communication.

4.2BSD already has what seems to be a fairly decent IPC mechanism, with its
sockets.

	everybody and his dog seems to have their own way of dealing with
	interprocess communication. these days, I think that tunis is
	maybe the way to go. interrupts are converted to messages, and
	there is message handling in the kernel. Unfortunately, this is
	not unix. It is too bad that interprocess communication was a very
	new idea when Dennis Ritchie and Ken Thompson were designing the
	first unix.

I'm not sure it was really that new an idea; several real-time minicomputer
operating systems had message send/receive facilities in the mid '70's.
Unfortunately it is true, though, that we have a proliferation of IPC
facilities.  I suspect the 4.2BSD and USG 5.0 mechanisms can be twisted enough
to be based on one common system if someone wants to work hard enough (start
by taking the 4.2BSD system, add a new domain where the socket address is the
32-bit unique identifier used by 5.0, and add in whatever stuff is needed to
support the 5.0 facilities.  The 5.0 system is based on an "IPC descriptor"
which is like a file descriptor, sort of, so the 4.2BSD descriptors may be
usable here.).

	I'm no expert on the requirements and applications of interprocess
	communication (IPC) but I do know that any reasonable definition of
	what constitutes an IPC mechanism would include the now widely acclaimed Unix
	pipeline.  Therefore it depresses, even saddens, me to hear so many
	people talk about ways to do IPC in Unix without any discussion of
	pipelines (except to immediately dismiss them as too weak).

	P.S.  Here's a concrete proposal (someone must have already thought of
	this).  Why not let pipelines have names that appear in the file system
	as a new kind of directory entry in addition to files and directories.
	Then they can live and die independently of processes and any process
	that knows the name of a pipeline and has the right permission can read
	or write to it.

Somebody did think of that; System III and later USG releases of UNIX implement
pipes as a new type of inode - a "fifo".  A pipe is just a fifo made up on the
fly with no directory entry pointing to it.  You connect to a fifo by opening
it like a regular file.

However, the inability for unrelated processes to use pre-S3 pipes isn't pipes'
only problem.  They cannot function in a record-oriented (i.e., message-
oriented) fashion; any record separators or lengths must be provided by the
process writing to the fifo.  This means a malicious or deranged process can
foul up everybody else by writing an incomplete record to the fifo; I don't
know whether there's a protocol which guarantees this won't happen, but even
if it does exist it would probably add overhead.  Furthermore, multiplexing
several communications over a fifo is difficult.

4.2BSD took the opposite tack from generalizing pipes.  They added a new IPC
mechanism and implemented pipes as a special case of it.

The System V message queues are different beasts from pipes entirely.  They
are message-oriented (rather than stream-oriented) and support multiple readers
and writers (you can put a "tag" on a message when you send it and can ask for
only messages with certain tags when you receive a message from a queue).

	Guy Harris
	{seismo,mcnc,we13,brl-bmd,allegra}!rlgvax!guy

Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Path: utzoo!linus!decvax!duke!unc!mcnc!idis!mi-cec!dvk
From: dvk@mi-cec.UUCP (Dan Klein)
Newsgroups: net.unix-wizards
Subject: Unix IPC
Message-ID: <154@mi-cec.UUCP>
Date: Mon, 19-Sep-83 11:16:59 EDT
Article-I.D.: mi-cec.154
Posted: Mon Sep 19 11:16:59 1983
Date-Received: Mon, 19-Sep-83 22:30:24 EDT
Lines: 15

Clearly, the signalling mechanism currently in Unix is far from optimal
for anything other than the most simpleminded IPC.  The mailbox approach
is reasonable, but tricky, since you need to have a way of passing the
names of the mailbox (for which you need IPC already), or just making it
an open file which gets transferred via exec.

There is one advantage to signals which cannot be overlooked in this
discussion: they have the ability to interrupt you.  Pipes do not.  Perhaps
having a VMS style AST to interrupt you on file/terminal activity is the
way to go. This way you get notice when a communicating process has something
to say, or you can simply poll things.  This makes useful programs (like
multi-player interactive games) easy to write.  They just do their real-time
things until the player changes some state by issuing a command.

(Sorry for the stream of consciousness...)

Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Path: utzoo!linus!decvax!tektronix!ogcvax!omsvax!hplabs!sri-unix!gwyn@brl-vld
From: gwyn%brl-...@sri-unix.UUCP
Newsgroups: net.unix-wizards
Subject: Re:  Unix philosophy
Message-ID: <11817@sri-arpa.UUCP>
Date: Mon, 19-Sep-83 13:52:11 EDT
Article-I.D.: sri-arpa.11817
Posted: Mon Sep 19 13:52:11 1983
Date-Received: Fri, 23-Sep-83 23:12:07 EDT
Lines: 10

From:      Doug Gwyn (VLD/VMB) <gwyn@brl-vld>

Bell UNIX (System V) does include IPC in the form of semaphores,
shared memory, and message passing.  Berkeley UNIX (4.2BSD) includes
sockets.  The problem I see is that no one known form of IPC or
process synchronization mechanism is best for all applications.

A "semaphore" device driver was distributed long ago on a USENIX
tape; this seems like the simplest semi-portable addition one could
make to a deficient UNIX in order to give it semaphores.

Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Path: utzoo!linus!philabs!seismo!hao!hplabs!sri-unix!gwyn@brl-vld
From: gwyn@brl-...@sri-unix.UUCP
Newsgroups: net.unix-wizards
Subject: Re:  Unix philosophy
Message-ID: <11915@sri-arpa.UUCP>
Date: Wed, 21-Sep-83 16:28:33 EDT
Article-I.D.: sri-arpa.11915
Posted: Wed Sep 21 16:28:33 1983
Date-Received: Mon, 26-Sep-83 08:15:57 EDT
Lines: 19

From:      Doug Gwyn (VLD/VMB) <gwyn@brl-vld>

The important thing about pipes is that for ordinary purposes a process
does not have to be concerned whether a file descriptor it is using is
attached to a file, a pipe, or a special file (device).  This is not
true of many other IPC schemes.

Another nice thing about pipes is that they are file system entities,
so fstat() works on them.  However, 4.1cBSD (and I am told 4.2BSD)
changed pipes to be socket pairs and return a bogus (struct stat) on
pipes.  This needs to be fixed, at least to the extent that (device,
inode) is unique for each pipe.

I actually liked pipes that were genuinely part of the file system;
named pipes (FIFOs) and pipes are integrated into UNIX System III and V
very cleanly.  It would seem that with good block buffer handling this
would still be a good scheme even in the presence of other IPC
mechanisms.  I think Berkeley had in mind piping between processes on
separate CPUs when they changed to socket pairs.

Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Path: utzoo!linus!decvax!tektronix!tekmdp!bronze!stevesu
From: stevesu@bronze.UUCP (Steve Summit)
Newsgroups: net.unix-wizards
Subject: IPC and Unix philosophy
Message-ID: <760@bronze.UUCP>
Date: Tue, 20-Sep-83 18:40:35 EDT
Article-I.D.: bronze.760
Posted: Tue Sep 20 18:40:35 1983
Date-Received: Wed, 21-Sep-83 23:13:46 EDT
References: rlgvax.1171
Lines: 37

So far, I haven't found pipes to be too deficient for passing
messages between processes.  I have a replacement for "cu" with a
pipe between the transmit and receive processes, so that the
transmit process, which is under the control of the user, can
send messages to the receive process, telling it to open a local
file for writing, etc.  (In the generic cu, this information must
come from the remote device, in a painful syntax involving
the '~' character, which many big mainframes don't have.)
It works like a charm.  I'm sure there are more complicated
applications out there where pipes and signals break down, which
is what prompted this discussion, but I haven't had to deal with
them yet.  (No flames about my naievete, please.)

I'm getting tired of people complaining that "unix doesn't have
IPC," "unix doesn't have file and record locking," etc.  These
deficiencies are an acknowledged part of the "unix philosophy,"
as described in the "UNIX Time-Sharing System" paper by Ritchie
and Thompson.  (Everyone should read this article two or three
times before posting an article mentioning "unix philosophy." 
It's right there in volume two of your unix manual.)

It's big, hairy features like IPC and record locking that turn
operating systems into hard-to-use dinosaurs.  Of course, those
features are occasionally useful, but I like to see unix stay
"small and beautiful."

I know I'm going to get flames from people who say that operating
systems have to grow and respond to new needs and ideas. 
(Actually, that's in the unix paper too, and is one of the
reasons unix was developed in the first place.)  However,
elegance and simplicity are virtues that are often not
appreciated.  Our pals at Berkeley have already contrived a
number of pieces of software that are a bit on the "big and ugly"
side.  (Take a look at csh, or vi, or the new tty driver.)

				Steve Summit
				textronix!tekmdp!bronze!stevesu

Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Path: utzoo!linus!philabs!seismo!hao!hplabs!sri-unix!wert.rice@rand-relay
From: wert.rice@rand-re...@sri-unix.UUCP
Newsgroups: net.unix-wizards
Subject: Your flame about Unix philosophy...right on target.
Message-ID: <11957@sri-arpa.UUCP>
Date: Thu, 22-Sep-83 11:32:12 EDT
Article-I.D.: sri-arpa.11957
Posted: Thu Sep 22 11:32:12 1983
Date-Received: Tue, 27-Sep-83 02:19:35 EDT
Lines: 29

From:  Scott Comer <wert.rice@rand-relay>

Hear now, what are you complaining about? Don't you enjoy using a system
that is buggy, flaky, and downright unreliable? Doesn't your heart just
go pitty-pat at the prospect of digging into the kernel code for the
answer to yet another annoying "problem" (read that as Undocumented
Feature and/or Restriction)?

I find it strange that Unix is the computer scientists system, but
its design philosophy flys in the face of most of the time-honored
rules of software design, implementation, and documentation. We
daily commit the sin of not practicing what we preach, by telling
our beginning computer science students about the virtues of 
structured design and the importance of good data structures, while
forcing them to use a system that is held together only by the
considerable efforts of 3 systems programmers and lots of bubble
gum and bailing wire.

I realize this is heresy to say things like this. You'll probably point
out that I wouldn't have even be able to read your message if it wasn't
for fine Unix software. On the other hand, I will point out that many
systems are capable of Unix-like functionality, except that they are
lacking a certain sexy user interface. On the other hand, they are
reliable, well documented, maintainable, and supported. By a responsive
and responsible group of people. THEY answer their telephone, which is
more than I can say for Berkeley.

How long is this community going to put up with this utter piece of
software trash?

Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Path: utzoo!linus!decvax!tektronix!ogcvax!omsvax!hplabs!sri-unix!edhall@rand-unix
From: edhall%rand-u...@sri-unix.UUCP
Newsgroups: net.unix-wizards
Subject: Re:  Your flame about Unix philosophy...right on target.
Message-ID: <11984@sri-arpa.UUCP>
Date: Thu, 29-Sep-83 02:56:00 EDT
Article-I.D.: sri-arpa.11984
Posted: Thu Sep 29 02:56:00 1983
Date-Received: Wed, 28-Sep-83 19:54:22 EDT
Lines: 61

I quote from your letter:

>>  I realize this is heresy to say things like this. You'll probably point
>>  out that I wouldn't have even be able to read your message if it wasn't
>>  for fine Unix software. On the other hand, I will point out that many
>>  systems are capable of Unix-like functionality, except that they are
>>  lacking a certain sexy user interface. On the other hand, they are
>>  reliable, well documented, maintainable, and supported. By a responsive
>>  and responsible group of people. THEY answer their telephone, which is
>>  more than I can say for Berkeley.
>>
>>  How long is this community going to put up with this utter piece of
>>  software trash?

My first reaction is to ask you why in the world you wish to make such
complaints in `Unix-Wizards'?  Seems a bit out of place, no?

It's a bit late, and your miasmal letter just rubbed me the wrong way.
I'm still trying to figure out if you merely want to vent your spleen
over something--anything--or if you really do have some valid criticisms.
In the former case, I guess it's better than kicking the dog.  But if
you really feel that UNIX is so very, very bad that it mystifies you
as to how any sentient being can tolerate it, let's hear some specifics.

Here is a list of questions for you:

1) Is the UNIX software really that unreliable compared to other systems?

1a) Which systems are better?

(Your experience here seems atypical--I've seen 4.1BSD systems run for
weeks, even months, continuously without breakdown or problem.)

1b) What are some of these bugs that have bitten you so bad?

2) Is UNIX *that* unstructured?

2a) What do you mean by `structured'?

2b) Which systems are better structured?

3) Is the UNIX documentation so incredibly worse than other systems?

3a) Which other systems?

4) Did you really expect Berkeley to provide free consulting?

4a) What vendors/systems provide such free consulting?

(If you have a System III/V -flavored UNIX you can pay for full support
from AT&T.  Other consulting firms support BSD UNIX.  Berkeley is a
University, not a software vendor/consultant.)


...and so on and so forth.  Constructive criticism is appreciated more
than the other kind.  I'll leave it to others to answer you point-by-
point, if they find anything more than innuendo.  I don't have the time.

		-Ed Hall
		edhall@rand-unix
		decvax!randvax!edhall