A Good Answer

The Structure of the "THE" Multiprogramming System
The Nucleus of a Multiprogramming System

9/5: What are the main philosophical differences in design of the THE system and the Nucleus system?

The foremost philosophical difference between the two systems is quite evident after reading both papers. The "THE" system was designed with a specific purpose in mind, which Dijkstra explains in depth in the second section of the paper. In sharp contrast, Hansen explains that many operating systems are designed only for a specific purpose, and modifying the operating system for a different purpose at a later time is difficult if not impossible. Thus, Hansen strongly advocates the use of a system nucleus which provides only basic primitives, on top of which can be placed hierarchical operating systems as needed. This is quite different from Dijkstra's operating system developed for his University.

The papers have differences in their implementation of a complete operating system. Dijkstra implements a hierarchical operating system, where different sequential processes perform a variety of hierarchical tasks, such as a "segment controller", a "message interpreter", and others. Hansen implements a hierarchical system too, however he only describes the nucleus, which is the root of the hierarchy. The other facilities needed for a complete operating system are implemented as other programs, on top of the nucleus.

Hansen refers to Dijkstra's concept of semaphores for locking, however, he explains that it did not fulfill their requirements of safety and efficiency. Instead, Hansen used message buffering for interprocess communication. Indeed, Dijkstra does not describe any kind of similar communication mechanism.

Another philosophical difference which may just be caused by advancements in the computing world is the language used. Dijkstra explains that the "THE" system was implemented in "plain machine code". Hansen, however, explains that new operating systems can be built on top of the existing system nucleus in high level languages. Lastly, it is good to notice the software engineering concepts that Dijkstra used in development. He described their emphasis on requirements and design, the use of program verification, and testing with a set of relevant test cases at different levels of abstraction. Hansen did not find it necessary to detail anything similar.