Dan Cross writes:
The interesting thing about all of this graphics stuff (and to tie it back
to TUHS) is that none of these things ever struck me as particularly Unix-y
in nature. X in particular doesn't seem like it composes nicely with
anything else, and in many ways, Unix from the perspective of a user is all
about composition from smaller parts. But X is this big, monolithic thing
that you kind of bolted on the side. For example, it certainly doesn't
integrate with, say, the permissions model.
I wonder if these seeming impedance mismatches are because pretty much
being all of this stuff invented as folks went along.
- Dan C.
This wasn't UNIX-y at all, it didn't come from UNIX despite having
its origin in the original Stanford University Network machine.
The problem isn't unique and is one of those things that I'm trying
to help with via mentoring and such. The big question that few seem
to consider is "Am I adding value with what I'm doing?" Even if
people think about it, few are learning much about history despite
our attempts here. I try to point out that learning the history is
important so that instead of repeating mistakes that others have made
one can come up with new and interesting mistakes.
I remember trying to talk to Bob Scheifler about this and was stunned
to hear him say "I don't believe in models because they predispose
your implementation." As near as I could tell, he didn't look at
anything anyone else had done (with the exception of the W code from
Stanford) which is why he made all sorts of beginner mistakes. For
example, had he been looking at other projects in the window space
he would have seen how Gosling and Rosenthal designed the Andrew
protocol to minimize network round trips. But it never seemed to
cross his mind until others pushed for it in response to NeWS.
These mismatches are everywhere today. Programming is more about
learning secret incantations to make poorly designed stuff sort of
work than it is about actual good design. At least in my opinion.
BTW, one of my part time projects here which is currently low on the
priority list is to fix this. I've done some prototyping of a "real
UNIX philosophy" window system which looks a lot like some of the Plan
9 stuff. I map my desktop into a filesystem and use inotify to monitor
changes. My goal, which so far seems achievable is to make a system
that requires no new commands and works with all of the existing ones.
Create a directory and fill it with some stuff to make a window.
Delete it to get rid of it. Write the size and position into files in
the directory to move and resize. And so on. Doing this, the window
manager was only a couple of hundred lines of bash script.
Going back to X versus NeWS in a way, one of the stumbling blocks is
how things have gone back to device-dependent graphics. As near as I
can tell (haven't done too much work here), it takes about a thousand
lines of code using Vulcan to draw a simple straight line these days.
Jon