A magazine about programmers, code, and society. Written by humans since 2018.

A Requiem For DOS

Operating systems shape our computing experience. They determine the kind of things people can do with their computer, how they can interact with it, what kind of programs they can run on it, and what kind of output they take out of it. In many ways, operating systems follow l’air du temps when it comes to their functionality; they offer slightly more than required, just enough to tantalize the imagination of users, while severely limiting the capabilities of developers on the other hand.

As a species, we have been computing in one way or another for around 70 years at the time of this publication. There have been (there are) many kinds of operating systems, but most of them have settled in families. There are real-time operating systems; there are operating systems specialized in running cloud applications; there are operating systems you use on your laptop, some others for your smartphone, and others to run COBOL programs on IBM mainframes. And, yes, somehow Linux appears in all of those categories in one way or another.

And then there is DOS. Yes, the venerable Disk Operating System.

Some of you reading this article might feel offended that I consider DOS an operating system, but I will. For around 20 years, from the mid-1970s to the mid-1990s, DOS was the de facto focus point for a lot of “innovation” in the personal computer industry. And I am not specifically talking about MS-DOS, Apple DOS, ProDOS, DR-DOS, FreeDOS, or CP/M, but as a whole family of operating systems, as a collective experience, sharing various characteristics with one another.

Let us enumerate those characteristics; what was it like to use a personal computer, say, in 1982 or 1983? Before turning on the power on both the monitor and the computer itself, you would insert the DOS diskette on the A: drive. The BIOS would self-test the RAM chips, and then turn the attention of the CPU toward a specific sector of some disk; first on a hard disk (if any) invariably denominated “C:”, and if that failed, on the aforementioned diskette drive, usually “A:”, but maybe also “B:” for those fortunate enough to have some spare cash for a second diskette drive.

The DOS would load a kernel (yes, that word also applies to DOS) who in turn would read a couple of initialization files. In the case of MS-DOS, CONFIG.SYS and AUTOEXEC.BAT, and I suppose that after reading these names, a meteorite of nostalgia has hit the connoisseur reader to their core.

Wipe your tears and keep reading.

Disk Operating Systems were the pinnacle of computing minimalism. They were, essentially, as simple as the computers they were meant to run on: single-user, single-task, lacking a graphical user interface or networking, devoid of any built-in security of any kind, and without any memory management whatsoever.

But (and this is the big upside) with tons and tons of applications of any kind you can imagine.

DOS also offered the simplest, laziest, and most straightforward API to applications: interrupt vector 21h and unlimited direct hardware access. Does your app require playing sound or reading the joystick? Be my guest, just read or write some registers here and there, and you are most welcome. (Well, to be honest, “playing sound” was a bit of a stretch on the original IBM PC, at least until Creative Labs released the Sound Blaster card, but I digress.)

(Again, I hope readers will indulge me in calling such a crude mechanism an “API”; I know for sure Michael Kerrisk would not. So be it.)

As the name “Disk Operating System” implies, the most important task of a DOS is that of providing access to… you guessed it, disk drives. The first edition of CP/M provided the basic five functions already in 1974: list all files on the screen; show their contents; copy them to another location; rename them; and delete them. And yes, if possible, also allow the user to launch applications just by typing their name, thankyousomuch.

(The inspiration from Unix and older operating systems is obvious; be mindful, however, to replace rm -rf / with FORMAT C: when pranking your friends.)

And that, essentially, was it. With such a small memory footprint, CP/M opened the door to the imagination of a whole generation of programmers, and created the first de facto personal computing platform, yielding an immense library of productivity and gaming software in just 5 or 6 years of existence.

There is, nowadays, a collective bout of nostalgia happening, this article notwithstanding. I have already talked in a previous issue of this magazine about the wonders that an old DOS system, coupled with a rusty copy of WordStar, did to the creativity of George R.R. Martin. Imagine this: just you and your words, in a laconic white-over-black screen, without any distractions (because there cannot be any, as a matter of fact.) The length and breadth of his creation have now an easy explanation. I consider this return to innocence a required vacation for our brains, a way to escape an ever-growing complexity, or simply a mechanism to appreciate the goodness of our current computing world.

The revival of this kind of interactivity patterns happens as well in more modern systems. Software developers using Linux or macOS have a large array of quite advanced console tooling at their disposal, allowing them to work with (relative) comfort in a terminal window. Let us mention some of those tools: tmux, vim, htop, k9s, and autocompletion for zsh and bash alike. The list of tools I have just mentioned constitutes the bread and butter of the technology galaxy I am immersed right now (that is, Kubernetes, OpenShift, and cloud native applications). They form a cohesive set that makes some developers very productive, sometimes in quite challenging scenarios.

Probably the closest thing to tmux that ever existed for a DOS was the brilliant yet ill-fated MP/M, or “Concurrent CP/M” system. Gary Kildall himself, founder of Digital Research, gave a short demo of MP/M on the March 12th, 1984 episode of the “Computer Chronicles”, switching between virtual consoles with his keyboard. Any tmux or screen user will nod and smile in appreciation of an uncannily similar experience upon watching this interaction.

(There was, apparently, a multitasking version of MS-DOS 4.0 available in Europe for a short time, but it was quickly discontinued.)

I also sometimes rant and yearn for a simpler bygone era, even wishing for a new, upgraded edition of the venerable TRS-80 Model 100.

The nostalgia of the DOS of yore is fueled by various recent events: the availability of CP/M as open-source software since 2014, with its licensing status clarified two years ago; MS-DOS 4.0 being open-sourced last April; CP/M celebrating its 50th birthday also last April; and FreeDOS celebrating its 30th as this article hits the press.

There is, however, another sad mention on the obituary these days. Just as Jim Hall was starting the FreeDOS project on June 29th, 1994, Gary Kildall passed away exactly one week later, on July 6th. The legacy of Gary in the history of personal computing is nothing short of spectacular, but that will be the gist of the next article in this edition.

Jack Crenshaw, of “Let’s Build a Compiler” fame, said in a 2009 interview:

The most recent operating system that I truly loved was CP/M. And the reasons were simple enough. First, it was small enough to understand.

So there you have it. Get your hands dirty, install DOSBox or FreeDOS on QEMU, then download a copy of Microsoft Word 5.5, and write your next magnus opus on the simplest possible computing environment in history, just like I did to write the article you just read.

Cover photo by William Warby on Unsplash.

Continue reading Gary Kildall or go back to Issue 070: DOS. Did you like this article? Consider subscribing to our newsletter or contributing to the sustainability of this magazine. Thanks!
Back to top