TDT09 Topic 1

Do we even need an operating system?

The first operating systems were developed to make programming easier by collecting commonly used functions into libraries that were always available on a mainframe system. The introduction of time sharing (rapidly switching the CPU of a computer among tasks belonging to different users) created the illusion that every user had a computer of his or her own - albeit slower and with fewer resources than the real machine. Accordingly, the duties of operating systems had to be extended to provide multitasking, resource management, and protection.

In the 1970s, the idea of personal computers came up. If a user has a complete computer for her- or himself, many of the operating system duties introduced on mainframes for time sharing are no longer required. The first person coming up with this idea was Dan Ingalls, who created the Smalltalk system at the Xerox PARC research center, which was the first system to introduce a GUI and a mouse-driven interface and also one of the first object-oriented languages.

Smalltalk is an integrated system using bytecode (similar to Java) which provided extensive facilities to inspect and even modify the system code at runtime. Most of the functionality of the system was actually implemented in Smalltalk itself, so Ingalls came up with the quote [1]
An operating system is a collection of things that don’t fit into a language. There shouldn’t be one.
This is, of course, a somewhat provocative topic worth discussing. Ingall's ideas were taken up more recently by Stephen Kell [2], who also discussed how to add Smalltalk-like features to more traditional, Unix-like systems [3]. More recent research on runtime environments without an underlying OS can be found in [4].

However, getting rid of operating systems is also interesting in other contexts. For example, in Cloud computing environments, running a complete OS in each virtual machine instance (that maybe only serves to execute a single microservice) consumes a significant amount of resources. Thus, the idea of library operating systems was recycled in the form of Unikernels [5].

This topic is on the border of "philosophical" questions on system design and concrete problems of the technical implementation. The hardware/software interface is of interest here, since now a programming language runtime environment has to take care of directly talking to the hardware instead of relying on OS services.


  1. D. H. Ingalls. Design principles behind Smalltalk. Byte Magazine, 6(8):286–298, 198 pdf
  2. Stephen Kell. The operating system: should there be one?. In Proceedings of the 7th Workshop on Programming Languages and Operating Systems, ACM, November 2013.pdf
  3. Stephen Kell. Unix, Plan 9 and the Lurking Smalltalk. In L. de Mol and G. Primiero (eds), Reflections on Programming Systems, Philosophical Studies Series, Springer pdf
  4. G Chari, J Pimás, J Vitek, O Flückiger. Self-contained development environments. ACM SIGPLAN Notices, 2018 pdf
  5. Anil Madhavapeddy, Richard Mortier, Charalampos Rotsos, David Scott, Balraj Singh, Thomas Gazagnaire, Steven Smith, Steven Hand, and Jon Crowcroft. 2013. Unikernels: library operating systems for the cloud. SIGARCH Comput. Archit. News 41, 1 (March 2013), 461–472 link