I have recently seen some poor metaphors regarding computers and software.
This is my attempt to clarify the issue for the community in more simple terms (see notes below for more technical explanation if so inclined):
1. A computer is a simulation device which can simulate anything at all, given unlimited resources.
2. In practice we (programmers) build a subset of simulations that are most useful or entertaining for the users (because that pays the bills).
3. An operating system is a simulation that allows us to more easily manipulate our computer to run other simulations and communicate to and through ever more complex and sophisticated devices (sound cards, video cards, network interface cards, joysticks, mice, etc) that we hang off the side.
4. A very small subset of programmers have made an ungodly amount of money selling said simulations. The article kind of loses focus at this point and goes off on a tangent - I won't burden the reader here with that.
5. The CLI will not die simply because its utility and expressiveness outweigh the lack of utility and expressiveness found in pure graphical interfaces. The future is begining now - and is a hybrid - both the CLI and GUI coexisting for mutual benefit leveraging the strengths of both in ways far more sophisticated than we can envision today.
My own editorial: Until people stop reading altogether, or natural speach recognition becomes a reality, keyboards will be around for the foreseable future.
Notes (numbered to reference the numbered sections above):
1. The term simulation is defined in the dictionary as the " representation of the operation or features of one process or system through the use of another". This term is quite common in general use; everyone knows what a 'flight simulator' is for example. A computer program is really just a simulation. A bit of history will illustrate this point:
Alan Turing came up with the concept of a Turing Machine which could be used as a general purpose device to simulate any other machine or process using very simple instructions in building block fashion to produce more complex simulations. The brilliant scientist John Von Neumann further extended the idea* to encompass the first stored program computer architecture for practical use (which exists in modified form in all present PC computer cpus).
*(Though this is debated; it is true he worked at Princeton University in New York when Turing was a graduate student between 1936 and 1938 - Von Neumann even asking him to stay on as his assistant - to which he declined. What would the world have been like from such a partnership, had not WWII interceded?)
It is interesting to note that modern computer chips do not have what we think of as the basic instruction set - Assembler - hardcoded into the chip. Instead the Assembler instruction set is itself a simulation running on a far simpler 'micro code' instruction set that is hardcoded into the chip.
I think a better metaphor for computer software (which encompasses everything running on a computer, from the OS to what we think of as applications) is a series of of small boxes within larger boxes, which themselves are inside of a larger box. Some of the boxes may have more than one box inside of them (like the OS running multiple applications, for example). The largest 'lower level' boxes have the ability to serve as simulation 'stage' for the boxes that they contain. At the highest levels (the small boxes at the 'top' of the stack) they may or may not have facilities for doing further simulation (now-a-days it is more prevelant to see applications that have macros up to and including full-blown programming languages and interpreters for creating your own simulations within the instruction sets provided). The OS is simply one of the larger boxes near the bottom of the stack.
2. Sometimes the users are ourselves; this is why we see a plethora of noddy programs/simulations that don't do much usefull for larger audiences.
3. See the 'boxes-within-boxes' metaphor in number 1 above.
4. Not much more can be said. I will state my own philosophical view: I think it is more useful to programmers and to society as a whole to invent more flexible and open simulations that allow computers (and other less-general purposes devices) to communicate more seamlessly and make them a true and natural tool to augment our senses and intellect. It is not impossible -- we just have to dream it up and make it happen.