What Is Not In Plan Nine

There are things missing from PlanNineFromBellLabs:

the X windowing system
Way too big, half of any Linux distribution is X. Plan9's windowing system rio is about 280kilobytes. The source is 7684 lines of code, including the .h files and the makefile.
symbolic links
they were a hack -- the root of Unix thought it owned the file system, including even the imported parts. The Plan9 NameSpace is yours, you, the user, put everything where you want it.
super-user
Superuser is a target for crackers and for the script kiddies alike - su confers a power which ignores every bit of security built into the local file system. The wide variety of superusers allowed each of them to inflict their style guidelines on the structure of the file system... Now where did that @#!$ superuser put gcc or perl or ...
vi, emacs, ...
Try acme or sam. Sam uses StructuralRegularExpressions.
find
The unix find is a SwissArmyKnife. In PlanNine, the TreeWalking is done by du -- a unix find . -print is in PlanNine: du -a|awk '{print $2}'
objects
BellLabs didn't need them since the complexity is back under control.
shell command line history
roll your own: fn history {grep '^term%' /mnt/wsys/text|sed -e 's/^term%//'} term% is the prompt. Sure looks a lot like Unix. The history is the function of the windowing system. Instead of saying term% I should use some quoted form of cat /env/prompt
cp -r
Recursive copy isn't built into the cp command in PlanNine. Imagine how many separate Unix commands have the TreeWalking built into them... RefactorMercilessly. Instead, this shell script, dircp refactors that functionality for the cp command into two invocations of tar:
        #!/bin/rc
        switch ($#*) {
        case 2 @{ cd $1 && tar c . } | @{ cd $2 && tar x }
        case * echo usage:  dircp from to >[1=2]
        }

For solutions to some of the above, see: http://plan9.bell-labs.com/wiki/plan9/UNIX_to_Plan_9_command_translation/index.html

There are apparently a few typing intensive alternatives for the commands find and cp -r, etc.
I would imagine that that is a shell issue, not a plan9 issue. I expect that bash is available for plan9.

Bash could be ported, the version I use on a Unix flavor at work exceeds 1.5Mb and still makes calls on shared libraries. In fact anything could be ported, Plan9 comes with an Ansi POSIX Environment for compatibility. -- cg

No this is a Plan9 issue. The rio windows don't understand cursor addressing, as no standard tool uses it. How would the shell redraw the input line then if you say go back in history? There is vt for emulating a vt100 if you absolutely need to... log in to a BBS... or run bash with command history... Plan9 people would say this is the task of the windowing system and not the shell anyways!


symbolic links: they were a hack - Unix thought it owned the file system

Interesting, does plan9 provide some form of non-hacky equivalent? I've always viewed filesystems without symbolic link support as brain-damaged beyond any sort of real usefulness. Actually, I get violently annoyed and irritated at the mere memory, the slightest recall of dealings with such systems. I'll try to calm down now... -- AnonymousDonor

The default path given to users is as simple as /bin and . - I always thought . was a bad thing, you might run some unanticipated program. Instead of creating symbolic or hard links, you mount all the commands you want into /bin.

It allows you to say "mount this bit of filesystem in that place, so that the resulting directory contains both the new stuff and what was there before". This is (or, at least, can be) done per-process.

There is a flag you can use to fork so that resulting processes can no longer alter their name spaces in any way.

See NameSpaces. -- ChrisGarrod (who takes responsibility for most of this page)


I am highly unconvinced by the remarks above about command-line history. If your prompt is "$ ", say, do you really want to assume that every line that starts dollar-space is one you typed? (Hint: no.) If your prompt consists of the current directory followed by ">", what are you going to do? This approach just doesn't work. (It could be made to work if the contents of /mnt/wsys/text were represented in some marked-up form that distinguished between user input and system output, but that would be very un-plan9-ish.) -- GarethMcCaughan

It's not Command Line History, it's Window History! Imagine having history built into every program you use for free. It's not just for shells anymore. The text of all of your windows can be found in /mnt/wsys/*/text where * means all windows, or you can use a regular expression for the number or a set of windows. -- ChrisGarrod

Note that when using plan9 I've never found the need for all that grep /mnt/wsys/blahblah stuff. There is an even simpler solution: click to edit, and cut and paste.

For example, suppose I write ls /some/long/path and get foo.c bar.c some_dir/ and now I want to tar up some_dir without retyping /some/long/path. I select ls and type tar c over it, then click after /some/long/path and type /some_dir | gzip >some_dir.tgz (I could cut and paste some_dir from the ls output, but it's not worth it if it's small). Then I select the line with the middle mouse button (which, under acme, copies the line to the bottom of the window and adds a newline, effectively executing it). It's so much simpler than remembering obscure bang syntax and counting how many commands ago the command I'm interested in happened. (no doubt ExtremeKeyboarding fans would consider this MouseAbuse compared to GnuReadline-style interaction) Yes, plan9 tar has different syntax from unix tar.

There are two disadvantages I can think of. One is that you have to go find the command to edit. If it happened a long time ago you may have to scroll the window back some. This is not a problem for me because 1 - when using csh-style bang history I wind up scrolling back by hand anyway (who really remembers that the command they want to edit was 5 commands ago?), 2 - I almost always want to edit the previous or penultimate command line, and 3 - if I really want to find an old command I can use the acme text search function (right mouse click) (this is not available under a plain rio window).

The second disadvantage is that you lose teletype hardcopy-like command history in your window, since you've been editing your old commands (reminds me of the algorists vs. abaccists). This can be annoying, but well worth the tradeoff considering that you can get rid of the giant buggy readline library linked into everything, obscure shell history syntax, and all the complicated tty modes and commands that make the giant buggy readline library possible. And of course with readline, you always find yourself using some program that didn't happen to have it linked in.

Shell histories and gnu readline clearly are solving the problem in the wrong place, but that's simply a result of history since they grew up on teletypes and dumb terminals that emulated teletypes (text only gets written at the bottom of the screen, where the typewriter head is). But we have mice and bitmap screens and proportional fonts now, surely it's time to shed the historical glass tty baggage?

Actually, this is what I mostly notice WhatIsNotInPlanNine: HistoricalBaggage. ---- That is a result of the team's MercilessRefactoring - again I am talking to myself

Using bash in Linux, I use the up arrow to scroll back through the commands I've recently executed until I get to the one I want. I don't have to remember how many commands ago it was. I find this much more convenient than using the mouse could ever be. Using the mouse is slow. Bash hint: use the editors search function / to find the command you want.

Regarding history and all you can go/scroll select, not part of the shell, etc... WTH? i need to use mouse for command entrance and accessing previous commands and stuff or use left/right to access previous lines and do something there? no just no, sorry but this is just stupid, not using best input device (keyboard) to its fullest is very very bad.


Contributors: AnonymousDonor, ChrisGarrod
CategoryOperatingSystem
Last edit February 4, 2012, See github about remodling.