9fans - fans of the OS Plan 9 from Bell Labs
 help / color / mirror / Atom feed
From: "Russ Cox" <rsc@swtch.com>
To: 9fans@9fans.net
Subject: Re: [9fans] sad commentary
Date: Tue,  1 Jul 2008 13:44:47 -0400	[thread overview]
Message-ID: <20080701174231.A36EA1E8C35@holo.morphisms.net> (raw)
In-Reply-To: <5B52A7C15C61DD08DCF0726E@F74D39FA044AA309EAEA14B9>

As a first approximation, there are two types of computer users.
There are the ones who just want something that does everything
they need it to, out of the box, and then there are the ones who
don't care so much what it can do at first, but they want to be able
to adapt the system to their needs as time goes on.
If you want, you can call the former "end users" and the latter
"programmers."  These camps have very different mindsets.

Most of your arguments seem to be about creating a system for
the "end users," but as Rob said, Plan 9 is not primarily for them.
Plan 9 is for people who want a system they can understand and customize
and adapt to their own purposes.  I don't mean setting a couple of buttons
in a preference dialog, either.  I mean writing actual programs to make
the system do something its designers did not explicitly anticipate.
When the computer doesn't already have some feature, it's a question
of thinking "this dumb system should already have that feature"
versus thinking "how can I add that feature?"

The fact that Plan 9 is not targeted at end users doesn't mean that
it's not usable by end users.  It just means that the system often
needs to be customized (by programmers) to fit the needs of the
particular end users.  For example, Coraid programmers built
software to adapt Plan 9 into a particular kind of end-user storage
server.  Rangboom adapted Plan 9 into a different kind of end-user
storage service.  In the past, other companies have done other things.

It doesn't have to be companies that are customizing the system for
other users.  Eric Nichols studies natural language processing and
has built a customized acme environment to speed manual translation
of text.  Nemo created a very interesting computing environment
on top of Plan 9 that is popular in his computer science department
and used by non-developers.  I know a handful of very happy end
users of venti, vbackup, and vac.

Notice that I haven't defended any of the individual Plan 9 tools--sam,
acme, rc, rio, fossil, venti, and so on.  There are people with strong
opinions on both sides for each of these.  The specific details of a
particular tool are far less important than the overall simplicity and
flexibility of the entire system.  That's not to say that no one likes the
tools.  Plan 9 from User Space exists exactly to provide the tools to
a broader audience, and I've heard from a surprising number of people
who were thrilled to find a new version of sam.  But no individual tool
is the point, and the Plan 9 tools alone are not Plan 9.

John Lions famously said about Sixth Edition Unix that, ``The whole
documentation is not unreasonably transportable in a student's
briefcase,'' and the same is true of Plan 9 today.  It's a system that
people can keep entirely in their head, that they can adapt to
their own needs and understand and fix if it breaks.


> The fact the UTF-8 was first "implemented" on Plan 9 has nothing to do with
> Plan 9's funtionality as an OS.

One way to read this sentence is as saying "Plan 9's support of UTF-8 doesn't
distinguish it anymore; other OSes now support UTF-8 too."  This is almost
true, although in my experience none of those systems approach Plan 9
for how everything UTF-8 just works out of the box.  (I still don't know
how to put UTF-8 in file names in Linux, for example, or to tell whether
a given file name is intended to be interpreted as UTF-8 or as Latin-1
or as some other character set.)

Another way to read this sentence is as saying "UTF-8 could have been first
implemented just as easily on some other OS as on Plan 9."  This is the
interpretation that Rob was replying to, and it's simply not true.
UTF-8 is as clean as it is because Ken Thompson came up with
a clean design, but that design alone would not have been enough.

Rob's history at http://www.cl.cam.ac.uk/~mgk25/ucs/utf-8-history.txt
doesn't emphasize this as much as it could, but it does mention it:
in order for the design to be an acceptable proposal, it had to be
implemented in a real system.  Ken designed UTF-8 on a Wednesday
night, and by lunch on Saturday, Ken and Rob had completely
converted Plan 9--libraries, programs, graphics, and text files--to use it.
That was necessary to get the proposal accepted, and there are very
few systems out there in which something like that would be possible,
that quickly.

That's a key strength of Plan 9.  It is powerful enough to use well, simple
enough to understand completely, and small enough to make wholesale
changes to the system quickly.

In its early days, Unix was like that--Ken implemented pipes and converted
all the existing programs like grep to act as filters overnight--but not anymore.


> When I came to actually "use" Plan 9 I found out the two interfaces I'd
> heard about, i.e. rc and rio, are both awkward despite how everybody on
> 9fans thought they were such glorious climaxes of simplicity and usability
> and how everybody would bash Bash. If I were to save one interface (textual
> or graphical) out of all interfaces that exist today that'd be Bash.

Let's run with this, because it is actually a good example of the
philosophical difference here.

Bash is full of useful features, yes, but wow is it complicated.
These features might make it quicker to get some particular
thing done, but they impose a steep learning curve and also
make the software more complex and fragile.  When bash
breaks, about all you can do is keep the many pieces.
Rc is a nice simple shell that one person can completely
understand, and if it breaks, you can read the source code,
see what's going on, and fix it.

Here's a fantastic bash bug that a friend ran across the other day.
I suggested that he put "set -o allexport" in his .bash_profile, like I do,
and when he did on his Linux machine, he lost the ability to run xpdf.
It spewed tons of mysterious garbage about syntax errors:

    /bin/bash: _openssl: line 25: syntax error near unexpected token `('
    /bin/bash: _openssl: line 25: ` -@(in|out|oid))'
    /bin/bash: error importing function definition for `_openssl'
    /bin/bash: _service: line 4: syntax error in conditional expression:
    unexpected token `('
    /bin/bash: _service: line 4: syntax error near `@(*'
    /bin/bash: _service: line 4: ` [[ ${COMP_WORDS[0]} !=
    @(*init.d/!(functions|~)|service) ]] && return 0;'
    /bin/bash: error importing function definition for `_service'
    /bin/bash: _python: line 17: syntax error near unexpected token `('
    /bin/bash: _python: line 17: ` !(python|-?))'
    /bin/bash: error importing function definition for `_python'
    /bin/bash: _apt_cache: line 7: syntax error in conditional expression:
    unexpected token `('
    /bin/bash: _apt_cache: line 7: syntax error near `@(a'
    /bin/bash: _apt_cache: line 7: ` if [[ ${COMP_WORDS[i]} ==
    @(add|depends|dotty|policy|rdepends|madison|show?(pkg|src|)) ]]; then'
    /bin/bash: error importing function definition for `_apt_cache'
    /bin/bash: _aspell: line 5: syntax error near unexpected token `('
    /bin/bash: _aspell: line 5: ` @(-c|-p|check))'
    /bin/bash: error importing function definition for `_aspell'
    /bin/bash: _java_classes: line 5: syntax error in conditional expression:
    unexpected token `('
    /bin/bash: _java_classes: line 5: syntax error near
    ...

We spent quite a while tracking down what this garbage meant.
What happened?  Well, set -o allexport makes bash export
all of its environment variables, including shell functions.
Bash also has a flag you can set that says whether or not to
allow certain extended syntaxes.  The functions in question
were installed by the system as part of the autocompletion
magic, and they use the special syntax, after turning it on.
But when they get exported to the environment, there's no
way for the new shell to know that it needs the special syntax,
so it gets tons of syntax errors trying to reparse them.
Why xpdf?  Well, that was just the first #!/bin/bash script
that ran into this problem.  Why hadn't I run into this?
I don't source /etc/bash.bashrc like the default profiles do.

This bug results from the interaction of at least four different
features: allexport, the special syntax, function exporting,
and the Linux distribution's helpfully-added completion
functions.  And it's only the shell.  If the shell is too complicated to
understand, what about the rest of the system?

Plan 9 is filled with simple tools that actually do one thing well.
That often means a lack of bells and whistles, because the whistles
you might find useful and the ones I might find useful are mostly
different, and putting them all in makes bloated, fragile software
like bash.

Plan 9 is, above all else, simple and malleable.  I'll take that over
complex and brittle any day.

All that said, it sounds like you're not interested in a system that
is easy to program, easy to understand, and easy to adapt to
your needs, if light on traditional out-of-the-box features.
It sounds like you're focused on end-user do-everything features
rather than the ability to program the system to be a better
computing environment for you.  If that's the case, then
Plan 9 isn't for you.

Russ



  parent reply	other threads:[~2008-07-01 17:44 UTC|newest]

Thread overview: 134+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-07-01  6:47 Eris Discordia
2008-07-01  7:42 ` John Stalker
2008-07-01 13:24 ` Eric Van Hensbergen
2008-07-01 13:32   ` john
2008-07-01 21:35     ` Pietro Gagliardi
2008-07-01 21:53       ` Dan Cross
2008-07-01 22:17         ` Pietro Gagliardi
2008-07-01 21:55       ` john
2008-07-01 17:44 ` Russ Cox [this message]
     [not found] <6653239E78712E5C0992CFE3@172.16.10.224>
2008-07-01 12:49 ` ron minnich
2008-07-01 20:40 ` Iruata Souza
2008-07-01 21:40   ` Charles Forsyth
     [not found] <6AB24A226A77E17024CF16B9@172.16.10.224>
2008-07-01 20:22 ` Iruata Souza
2008-07-01 20:30 ` Iruata Souza
  -- strict thread matches above, loose matches on Subject: below --
2008-07-01  8:42 Eris Discordia
     [not found] <970551641B57BC6070158BA7@172.16.10.224>
2008-07-01  8:38 ` Francisco J Ballesteros
2008-07-01 20:36 ` Iruata Souza
2008-07-01  8:28 Eris Discordia
2008-07-01  8:25 Eris Discordia
2008-07-02  4:52 ` lucio
2008-07-02  5:21   ` Robert William Fuller
2008-07-02  6:09     ` andrey mirtchovski
2008-07-02 18:58       ` Wes Kussmaul
2008-07-02 19:14         ` erik quanstrom
2008-07-02 21:20           ` Skip Tavakkolian
2008-07-03  0:19       ` Robert William Fuller
2008-07-02  9:28     ` lucio
2008-07-02 17:55       ` David Leimbach
2008-07-02 12:04     ` erik quanstrom
2008-07-03  0:13       ` Robert William Fuller
2008-07-03  0:17       ` Robert William Fuller
2008-07-03  2:16         ` Adrian Tritschler
2008-07-03  8:43           ` Robert Raschke
2008-07-03 10:25             ` Steve Simon
2008-07-03 12:27             ` dave.l
2008-07-03 18:12               ` Michaelian Ennis
2008-07-05 17:14             ` Wes Kussmaul
2008-07-05 17:43             ` Wes Kussmaul
2008-07-03  9:39           ` Rodolfo kix García 
2008-07-04 11:26           ` matt
2008-07-04 10:58         ` matt
2008-07-01  7:47 Eris Discordia
2008-07-01 13:15 ` john
     [not found] <A5F2B9F56DBEDAA4DDA2E579@172.16.10.224>
2008-07-01  7:23 ` andrey mirtchovski
2008-07-01  8:45   ` Eris Discordia
     [not found]   ` <E65EC37F521210B28673D390@172.16.10.224>
2008-07-01  9:41     ` Federico G. Benavento
2008-07-01 10:40       ` Andrés Domínguez
2008-07-01 22:02       ` Eris Discordia
2008-07-01 22:40         ` erik quanstrom
2008-07-01 23:43         ` a
2008-07-02  5:44         ` Federico G. Benavento
2008-07-02  6:19           ` John Waters
2008-07-01  7:04 Eris Discordia
2008-07-01 14:06 ` cummij
2008-07-01 14:16   ` ron minnich
     [not found] <B7A30661A94738A2B9BE1EA7@172.16.10.200>
2008-06-30 23:02 ` Uriel
2008-06-30 22:32 Eris Discordia
2008-06-30 22:13 Eris Discordia
2008-06-30 22:48 ` Rob Pike
2008-06-30 23:17   ` Francisco J Ballesteros
2008-06-30 23:28   ` Federico G. Benavento
2008-07-01  6:53     ` bblochl
2008-07-01  9:21       ` Federico G. Benavento
2008-07-01 13:50         ` David Leimbach
2008-07-01 14:10           ` hiro
2008-07-01 15:20         ` Uriel
2008-07-01 19:21           ` bblochl
2008-07-01 22:55           ` Jack Johnson
2008-07-01 12:44       ` ron minnich
2008-07-01 13:35   ` David Leimbach
2008-07-01 13:47     ` john
2008-07-01 13:59     ` John Waters
2008-07-01 14:03       ` David Leimbach
2008-06-30 22:56 ` erik quanstrom
2008-06-30 23:07 ` a
2008-06-30 23:11 ` Skip Tavakkolian
2008-07-01  8:01   ` Eris Discordia
     [not found]   ` <EBDCEA43BFC1C5EE4070BC1E@172.16.10.224>
2008-07-01 20:33     ` Iruata Souza
2008-07-02  8:38 ` DaveL
2008-06-30 21:45 Eris Discordia
2008-07-01 15:40 ` michael block
2008-06-30 19:12 Eris Discordia
2008-06-30 20:01 ` ron minnich
2008-06-30 21:20   ` Eris Discordia
2008-06-30 23:23     ` Iruata Souza
2008-07-01  0:22     ` ron minnich
2008-07-01 10:52   ` John Waters
2008-07-01 11:19     ` hiro
2008-06-30 20:11 ` michael block
2008-06-30 20:42 ` Skip Tavakkolian
2008-06-30 20:55   ` Eric Van Hensbergen
2008-06-30 23:06     ` Bakul Shah
2008-06-30 23:21       ` Francisco J Ballesteros
2008-06-30 23:22       ` Lyndon Nerenberg
2008-07-01  9:37         ` Stefan Groß
2008-06-30 14:55 erik quanstrom
2008-06-30 15:36 ` Charles Forsyth
2008-06-30 17:26   ` Pietro Gagliardi
2008-06-30 17:06 ` Steven D. Vormwald
2008-06-30 17:34   ` john
2008-06-30 18:33     ` Francisco J Ballesteros
2008-06-30 18:47       ` Tom Lieber
2008-06-30 23:28     ` Pietro Gagliardi
2008-06-30 18:16   ` John Stalker
2008-06-30 18:27     ` a
2008-07-02  6:48       ` sqweek
2008-07-02  7:39         ` gdiaz
2008-07-02 12:17           ` erik quanstrom
2008-07-02 12:35         ` erik quanstrom
2008-07-22 14:16           ` sqweek
2008-07-22 14:47             ` Kernel Panic
2008-07-22 14:50               ` erik quanstrom
2008-07-22 15:50               ` Charles Forsyth
2008-07-22 15:50                 ` sqweek
2008-07-22 15:46             ` C H Forsyth
2008-06-30 21:19   ` erik quanstrom
2008-06-30  2:21 erik quanstrom
2008-06-30  2:32 ` john
2008-06-30  3:10   ` Tim Wiess
2008-06-30  5:24     ` underspecified
2008-06-30  6:57       ` Francisco J Ballesteros
2008-06-30  7:50         ` John Waters
2008-06-30  8:03           ` Fco. J. Ballesteros
2008-06-30  2:38 ` Uriel
2008-06-30 12:06   ` Pietro Gagliardi
2008-06-30 13:46     ` bblochl
2008-06-30 17:27       ` Pietro Gagliardi
2008-06-30 13:48     ` bblochl
2008-06-30 13:52       ` john
2008-06-30 14:00         ` bblochl
2008-06-30 14:07           ` john
2008-06-30 17:23             ` Pietro Gagliardi
2008-06-30 17:21       ` Pietro Gagliardi
2008-06-30 17:34 ` ron minnich

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080701174231.A36EA1E8C35@holo.morphisms.net \
    --to=rsc@swtch.com \
    --cc=9fans@9fans.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).