Run the First Edition of Unix (1972) with Docker
In this article you'll see how to run a PDP-11 simulator through Docker to interact with Unix as it was back in 1972.
One major benefit of Docker is you can run packaged up services without having to install them (or their dependencies) directly on your main OS.
That’s pretty cool. It means we can run a 45+ year old version of Unix on Windows, MacOS or any major distribution of Linux by running 1 Docker command.
When you’re done experimenting, all you have to do is run a different Docker command and your system will be back to pristine condition without any lingering dependencies.
The only requirement is you have Docker installed, so go ahead and install Docker now if you haven’t already. You can use Docker’s official install guides to get you going.
Run the Docker Image
Lucky for us, Brian Bennett put together a GitHub repo that has a pre-made Docker image with everything configured. So all we have to do is run the commmand below and wait a few seconds to get started:
docker run --rm -it bahamat/unix-1st-ed
That should drop you into a
:login: prompt, as seen below:
PDP-11 simulator V3.9-0 ./simh.cfg> #!tools/pdp11 Unknown command Disabling CR Disabling XQ RF: buffering file in memory TC: creating new file TC0: 16b format, buffering file in memory Listening on port 5555 (socket 7) :login:
It’s labeled as a “minicomputer” but it weighed about 100 pounds (45kg) and cost $10,800 back in the early 1970s. If you account for inflation that would be like spending $63,246 today.
But instead of having of buy one, we’ve ran a simulator. This is somewhat comparable to running an NES or game system emulator. It will give us the experience of using it, without needing the hardware.
Logging into the System
:login: prompt, type in
root and press enter.
:login: root root #
You should now see a blinking cursor, we’ve successfully logged into the PDP-11.
At this point we’re ready to start running Unix commands and party like it’s 1972. The only problem is, Bash wasn’t released until 1989 so we’re stuck using the original shell.
That means things we take for granted today like being able to hit backspace, or move the cursor with the arrow keys won’t work. Give it a shot, try typing something and then move the cursor. You can’t. We’ll go over how to clear out invalid commands later.
There Were No Monitors Back Then
If you’re wondering why things like moving the cursor didn’t exist back then, you have to remember, it was a much different time in the early 1970s.
There were special typewriters called teletypes. You typed commands into it, and it communicated with the computer, and then the computer output its display directly onto a piece of paper. If you typed something into the system, there was no going back.
As an aside, this is how the echo command came into existence. You could tell the computer not to echo back some of your commands, which was quite handy for inputting passwords.
How crazy is that. A piece of paper was your monitor. You can see it in action in this Youtube video. Skip around to see how it worked.
Part of the Unix Philosophy states “No news is good news”. Now it makes sense. You wouldn’t want extra text to be printed out when things worked. That’s why most Unix programs output no extra information if they ran correctly.
You’ve probably heard the term
TTY before right? That stands for “TeleTYpewriter”.
TTY system was modeled around these original teletypewriters. If you want to know the nitty gritty details on how that works, there’s an excellent write up of it in an article called “The TTY demystified”.
Exploring Unix Circa 1972
Some commands we use today existed back then. For example you can run
# ls bin dev etc tmp #
You can even run
# ls -la total 7 41 sdrwr- 6 root 60 Jan 1 00:00:00 . 41 sdrwr- 6 root 60 Jan 1 00:00:00 .. 53 sdrwr- 2 root 620 Jan 1 00:00:00 bin 42 sdrwr- 2 root 250 Jan 1 00:00:00 dev 43 sdrwr- 2 root 110 Jan 1 00:00:00 etc 114 sdrwr- 2 root 50 Jan 1 00:00:00 tmp #
On a modern day system you could run
ls --help to get the man pages for
ls but back then you couldn’t do such a thing. The idea of using
-- flags didn’t even come into existence until 1980 and it wasn’t considered a standard until 1992.
Investigating the /bin Directory
You can check out what’s available to run by going to the
/bin directory. The
cd command didn’t exist yet because back then it was named
As an aside, if you make a typo or invalid command you have a few options. You could run the invalid command and have the system yell at you, or you could enter in the
@ character, which was known as the “kill” character. Everything prior to the kill character will be ignored.
foobar@ls -la would translate to
ls -la. Try it out.
chdir /bin, followed by
ls -la to list its contents:
# ls -la total 228 53 sdrwr- 2 root 620 Jan 1 00:00:00 . 41 sdrwr- 6 root 60 Jan 1 00:00:00 .. 95 sxrwr- 1 bin 16 Jan 1 00:00:00 : 101 sxrwr- 1 bin 2310 Jan 1 00:00:00 ar 72 lxrwr- 1 bin 7582 Jan 1 00:00:00 as 112 lxrwr- 1 bin 5922 Jan 1 00:00:00 bas 61 sxrwr- 1 ken 2860 Jan 1 00:00:00 cal 103 sxrwr- 1 bin 134 Jan 1 00:00:00 cat ...
There are 228 binaries to run. Some of which look familiar.
For example, we can output a list of users by using the
cat command as so:
# cat /etc/uids root:0 sys:1 bin:3 adm:3 jfo:4 ken:6 dmr:7 jack:10 peter:11 jay:12 bob:13 sun:14 lee:15
Doing Some Self Exploration
If you want to dig around the file system and try a few commands out, please do so. You can read the complete Unix 1st edition PDF manual.
When you’re done playing with everything you can logout by pressing
That’s going to drop you into the PDP-11 simulator prompt:
Simulation stopped, PC: 007332 (MOV (SP)+,25244) sim>
You can choose to explore what the simulator has to offer by running
help followed by pressing enter, or if you want to quit then run
Delete the Docker Image
This step is optional, but if you want to clean up any disk space used by Docker you can delete the Docker image we ran before by running
docker image rm -f bahamat/unix-1st-ed.
The benefits of keeping it around is the next time you start it, it will start in milliseconds because it won’t have to download this Docker image again. If you delete it now, Docker will simply download it again if you run it in the future.
Going through all of this really makes you think about how good we have it now.
I bet people from the 1970s were really good spellers because not being able to move your cursor is pretty brutal.
Did you discover anything interesting inside the simulator? Let me know below.
It’s also worth noting, you can also use Docker to run web applications and other applications too. If you want to learn how to use Docker in great detail then sign up to the free email course below, or take my complete Dive Into Docker video course at your own pace.