Class 1: What is an Operating System?

Posted: Tue 14 January 2014


Action Items

You should do at least these three things before Thursday's class:

  1. Read the Course Syllabus.

  2. Setup Rust on your computer by either:

    • Installing VirtualBox following these directions. (This should work for everyone. It takes a long time to download so get started early. This is the simplest way to get started, but can be a bit slow and klunky.)
    • Setting up Rust to run natively on your machine, following these directions. If you are running Mac OS X or Linux, this is probably the best option. There is a native Windows version of Rust also, but it requires quite a bit of effort to set up.
    • Setting up an Amazon EC2 instance for running Rust following these directions.
  3. Set up your student github account, following these directions.

By 4:59pm on Sunday, you should also submit Problem Set 0 which includes completing part 1 of the Rust tutorial and course registration survey.

Before next Tuesday's class:

  • Read Introduction to Operating Systems from Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau's Operating Systems: Three Easy Pieces book. (This book is freely available on-line, but may also be ordered as a printed book for $29. We will have several readings from the book during the semester, all of which are also freely available on-line, but if you prefer to read things in printed form I encourage you to buy the printed book.)

Don't forget to bring your laptop to Thursday's class. If you do not have access to a suitable machine for use in this class, please contact me right away. The department does have a few loaner machines that may be available for you to borrow.

Operating Systems

What is an operating system?

What fraction of a baby's toys had an operating system in 1990? What about in 2014? What fraction would you expect in 2020

What aspects of computing seem like magic to you today?

Programming Languages

Why are there so many programming languages?

  • Languages change the way we think.

  • Languages provide abstractions for machine resources. The abstractions they provide are engineering tradeoffs between:

    • expressiveness and "truthiness"
    • freedom and safety
    • flexibility and simplicity
    • efficiency and ease-of-use

Which of these should we prefer for a programming language for systems programming?

What's the difference between a language and an operating system?


Rust is a systems programming language developed by Mozilla Research. It is a new and immature language: the release we are using is Version 0.9 (released last week).

Rust is designed with a particular focus on providing both safety and control. This means it provides programmers with a lot of control over how memory is managed to enable efficient programs, but without the opportunity to shoot yourself in the foot so readily provided by C/C++. Much of the design is driven by the needs of Servo, an experimental, highly-parallelizable web browser engine.


In the discussion, please answer "What aspects of computing seem like magic to you today?" and feel free to also use the discussion below for any comments about Class 1 (including thoughts on the questions above).

Next Class

comments powered by Disqus