Interviewing the founder of The Unix Heritage Society got me to thinking about Unix, as well as Linux. Why is Linux so popular in clouds and on servers, while Windows rules the office? The early days of both of these systems have much to do with how they are used today.
But first, the lineup of new articles.
The Lineup
Peter Sperl presents two system design patterns for implementing resilient and layered caching in distributed systems. Sperl's article helped me think differently about distributed systems design, with implications not only for resilience but also for security.
Michał Czapiński and Rainer Wolafka describe methods for securely and efficiently separating containers based on workload security rings and their level of sensitivity or hardening. This article nicely complements the layered caching one by Sperl.
Titus Winters suggests that developers include more alerting in early versions of software. While a lot of these log messages may turn out to be unnecessary, having them present early in the development process helps in choosing what should be alerts, and what doesn't need to be included.
Thai Wood considers the way that Australian rock fishers think about safety with how we handle incident analysis. I found the analogy between rock fishers and incident analysis right on.
Vartika Agarwal and Tracy Ferrell explain the SRE reliability maturity model, with examples that help you determine where your organization fits in this scheme, and why this is important.
I had heard that the Unix system was born so that Ken Thompson and Dennis Ritchies could play a game they had written: Space Travel. And it turns out that is true. Ritchie had published a paper in Australia [1] where he discussed the design decisions that resulted in the basics of systems still in use today.
Ritchie's paper doesn't include the specs for the first platform for Unix, a PDP-7. In a video interview with Brian Kernighan, Ken Thompson provides lots of Unix history, including that the PDP-7 had 8K of 18 bit words, and he ran Unix and programs in 4K memory each. Ritchie described the PDP-11 that was the second platform, and I am amazed. I built a computer from a kit in 1979 that was about as fast, although without the .5 megabyte hard drive, console, and two DEC tape drives. My system had 370 kilobytes of floppy disk and more memory, at 56 kilobytes compared to the 24 kilobytes in the PDP-11. Thompson and Ritchie used 16 kb for the operating system, all written in assembler, and 8 kb for the shell and applications. In order to justify having Bell Labs buy the PDP-11, a bargain at $65,000 (about $500,000 in 2023 US dollars), they wrote a version of runoff (groff is its descendent), typesetting software, for use in inputting, formatting and printing patent applications. Thompson's interview has more details about how they convinced Bell Labs to buy the mini-computer and allow them to work on an operating system.
Windows started out as an interface for MS/DOS, a primitive operating system similar in size to early Unix. Like early Unix, Windows had no memory management and any program could overwrite the OS. Unlike Unix on the PDP-11, there were no users, as MS/DOS and Windows were strickly for the use of one user at-a-time.
- Unix workstations dominated the desktop graphics market
- The majority of Internet services were provided by Unix systems, with DEC's systems providing a small minority of Internet servers
- Novell Netware provided support for networking of offices, including shared storage and printing, as well as central management of user accounts
Windows NT servers soon became popular on the Internet for email and web services. But there were problems with NT as a server right from the start.
Ted Ts'o once remarked to me, during a Linux File System workshop, that a new file system, at that time BtrFS, would take five to ten years to mature enough to be used in production. Using that as a metric, using Windows NT, a new operating system with a new file system, for production servers in the early noughts was a terrible idea. That time period was full of amazing exploits against Windows servers, and even without being attacked, they generally either crashed or needed to be rebooted every two weeks.
But there's a much bigger issue than simple maturity. Several decades after its creation, Windows systems have become much more reliable, and less easily exploitable. Like Unix, Windows can run on relatively tiny hardware systems up to hefty servers. Unlike Linux, you don't find Windows on supercomputers, and most cloud servers run Linux.
During the 1980s, with the birth of many different versions of Unix, there was a need to develop a standard for the programming interface, and this came to be known as POSIX. Microsoft built a POSIX subsystem that could run as part of Windows NT, so they could compete against Unix vendors for US government proposals that required the POSIX interface [6].
POSIX was developed to support non-graphical applications and during a time when memory sizes were small and CPU performance was still limited. Two decades later, I found a paper where the authors had written that POSIX was outdated. They analyzed system call usage and found that system calls relating to memory and interprocess communication were the most common [7]. In another paper at the same EuroSys conference, authors analyzed a large number of Linux applications in attempt to see how much of the system call interface was actually in use [8].