// Underlying Idea

Explore some unifying ideas that have driven system evolution.

::: Everything is a file

    Used in unix and plan9.

    Concept of a hierarchical filesystem.

    Things that are not files can be attached to the hierarchy, and you can
    interact with them as though they were files. Kind of. Most of the time.

    Makes the system discoverable. You can browse around /proc and look for

    There is some elegance. You can use select(2) to detect non-blocking
    behaviour across both files and sockets and stdin. Kind of. This is not at
    all possible in Windows.

    There is some ugliness in edge-cases. 

::: Everything is an icon

    Used in BeOS and Haiku.

    Concept of a hierarchical filesystem.

    Files have metadata attached. Through sophisticated use of metadata tags,
    you can create applications on top of the filesystem. For example, an
    email client where you could view your inbox simply by using the GUI to
    open the folder containing your email.


::: Cheap process forking

    Used in unix.

    Idea that you can compose results through the use of lightweight

    This concept seems to be often good for prototyping, and often bad for

    Use of unix pipe in the shell to chain commands together. Upside: allows
    for rapid composition of complex pipelines from simple tools. Downside:
    requires lots of copying.

    Original apache webserver would fork a new process for handling each
    client. Upside: Offloads lots of nasty concurrency problems onto the
    operating system, which has already had to solve those problems. Downside:
    does not scale as well as later single-process efforts like apache 2 (uses
    threads) and nginx (focus on async techniques).