Moved from OperatingSystemsDesign
How does a user learn about the OS?
Nobody has mentioned the documentation yet.
I am currently in the process of trying to understand Unix in general and Linux in particular from the documenation that is freely available on the web. I have a few things to say about the documentation (from a newbie perspective)
Firstly, I don't think that the documentation should be considered an optional add-on to an operating system, it should be considered integral to the whole thing. What is the point of having an operating system which is incomprehensible to its users?
Secondly, the documentation should be layered. Unix people have grasped the idea that code must be layered in order to make it comprehensible. The documentation should also be layered. The very bottom layer should explain things like turing machines and the idea of a computer as a black box with information going in one side and coming out the other. Also concepts like what is data, what are data types, what is a function and what is a parameter.... real basic stuff that you have to get your head around before you can ever hope to understand computers. More details should be presented on higher levels, and of course all the documentation should be hyperlinked together....
I have been thinking a lot about interfaces in general, and human-computer interfaces in particular. I'm beginning to move towards the idea that there should be different interfaces for different types of users depending on how they use the system (though there should always be an 'abuser' mode). Totally new users should start with a point-and-click theme with a couple of icons on the screen which point to entrance nodes to the documentation network, and maybe some games and an email client, web browser etc... As the user learns more about computer programming concepts.... what is a computer language.... what is a compiler... etc... then they will learn how to bring up a command line interface and control their computer textually and linguistically rather than just by pointing and clicking.
Basically new users should be able to bring themselves up to speed on fundamental computer concepts by using graphical and interactive educational software which is apart of the operating system.
You are so wrong about the UI. I mean, your point of view is reasonable to someone new to Unix. What you don't realize is that Unix is a misbegotten, senseless architecture. And your ideas don't have any justification in general UI or OS research. Linguistic control of the computer must be accessible from the first. Every time a user points and clicks, the OS must show them the linguistic equivalent that does the same thing. That's called learning by example, and incremental learning.
And there must never be any magic switch that the user turns on or off to hide most of the system. 1) because it's elitist, 2) because it doesn't confront the user with the existence of the rest of the system, 3) because it doesn't provide a genuine layering of the system. Layering is best provided not by a dummy/wizard switch, but by scrupulously following the NameSpace ideals, and putting the low-level / destructive / useless objects far away from the user. That is, a vast number of links distance in the graph. Of course, this universal notion of distance isn't provided by the inferior obsolete OSes like Windows, Unix and even Plan 9.
This might come as a blow, but give up your quest for understanding Unix. It is pointless. Even if you succeeded in learning all there is to Unix, you would have failed in learning anything about OS design. And in the process, you might even have ruined yourself to any genuine understanding of OS design. If you're interested in OS design per se (and your writing here points to it) then there are literally dozens of vastly more informative, vastly more worthwhile, sources for you to learn about OS design.
Start reading the design documents / motivations for Plan 9. That will teach you about modularity and uniformity. Then read up on GrassHopper and OrthogonalPersistence. Then read up on LoggingFileSystems? and think about how they related to OP. Then read up on ExoKernel; then compare it to everything you can find written on wiki about EKs. Then download VisualWorks and play with SmalltalkLanguage, so you not only learn about OO but get an intuitive feel for it. Once you've done that, come back here and I'll add to the reading list.
But in general read up on OperatingSystemsDesignPrinciples and think about them a lot. -- RK