UNIX Takeaways
- Isolation
- Coordination Language
- Concurrency
Threads are Isolation
Programs are completely separated from each other and can communicate only over very restricted channels.
Threads are envelopes that one can drop calculators into.
Coordination Language
PLs have traditionally been restricted to expressing the contstruction of synchronous calculators.
Few PLs address the issues of distributed programming1.
/bin/sh
(&
and |
) is a DSL for creating higher-level concurrent abstractions.
PID
PIDs - process ID - are handles to first-class components.
Concurrency
Concurrency is a programming paradigm.
Parallelism is an application problem that needs to use the concurrent paradigm
Anti-Takeaways
Time-Sharing
Memory Sharing
Closures
Threads are just closure-wannabees2.
UNIX threads are just ad-hoc implementations of closures in C.
Dependency Spaghetti
Rendezvous
Rendezvous is an attempt to corral concurrency by making everything synchronous.
Syntax for Distributed Programming is Minimal
The UNIX shell syntax for distributed programming is muddied by the inclusion of many other features3.
Continued Conflation and Muddied Waters Between Programming and O/Ss
UNIX contains several fundamental advances in PL features (e.g. |, &, fork, etc).
These PL advances have, unfortunately, been conflated with Operating Systems and have largely been ignored in PL designs.
N.B. Pipelines of functions are not the same as pipelines of isolated components.
Union of Coordination and String Processing and …
O/Ss are just libraries.
Windows, MacOS, Linux are just applications.
The problems that Windows, MacOS and Linux must solve are different from the problems that most apps need to solve.
Not every app should have all of the operating system principles built-in, e.g. not every app needs memory sharing and time-sharing.
Some apps use the concurrent programming paradigm. This should not mean that they must include all of O/S-style threading.
Pipelines vs. Isolation
UNIX popularized pipelines of isolated components.
These advances have been, unfortunately, overlooked due to
- conflation with heavy technologies (e.g. O/Ss)
- premature optimization (e.g. the ideas of isolation were burned into hardware before they were sufficiently explored, e.g. C had some useful ideas about isolation but these were missed in lieue of C’s system-language features)
See Also