interesting questions. They kind of resonate with a discussion I had
with someone recently. The question of feature(X) in linux came up, as
feature(X) was not available in Plan 9. It doesn't much matter what
feature(X) is in this case, since the question is so frequent.

As it happens, feature(X) is not really uniformly available in Linux
either. It sorta works on some types of things, and does not really
work on  most others. Take a simple one: select on an open file.
Doesn't really work, might be useful, so we get inotify. Well, but,
inotify doesn't work on most things, but for those things it doesn't
work on, well, maybe select will work. You end up with the tangled
thicket of overlapping, but incompatible, feature sets that are
almost, but not quite entirely, unlike what Unix was supposed to be:
that's Linux today.

This made me think about the design rules for Linux and Plan 9. From
what I can see on Linux, the rule is: if it will work on something and
make it better, do it. It may not work on most things, but as long as
it works on one, go ahead and plug it in. The Linux rules also happen
to make those few things feature(X) works on fast for some cases. Put
together enough special cases and for those uses that conform to those
cases, you've got a very fast and capable system. Which Linux is. But
there is certainly a great deal of ugliness there.

If you look at what a hard link really is, you'll realize that your
two questions are actually the same question.

On Plan 9, the rule tends to be: if feature(X) can't be implemented in
a way that works for everything, don't do it. No special cases
allowed; it's why mmap is discouraged. This has led to a system that
is quite uniform and a pleasure to use, albeit lower performing than
its competitors in many places.

If you look at what a hard link is, you'll realize why they are not in Plan 9.

Just my take, anyway.

ron

Reply via email to