Lessons from the Development of Unix

Joseph Crick
8 min readDec 12, 2017
The Original Hipsters: Thompson and Ritchie

Unix emerged in the late 1960s because Ken Thompson wanted to play video games. Seriously.

Thompson had developed a video game called Space Travel (1). He wrote it on the GE 635. However, there was one problem. It was expensive to run. A single game would cost about $50 in what Thompson called “funny money”. So, he did what any self-respecting developer would do. He wrote a solution. What happened next, changed the world forever…

Blacklane’s Front End team is beginning a large, greenfield software project. In the midst of this, I’ve been thinking about the development of good software.

Great work grows out of the grounds of past work. One concept builds on another. Each new layer is a platform from which to explore and evolve. As Alan Kay explains: “Once you’ve seen Newton, it becomes possible to do electrodynamics and relativity… Once you’ve grokked [a concept], you can think right away of better [concepts, better ways of doing things]” (2). The key is not so much the implementation. It’s the kinds of thinking an approach opens up.

One of the most influential pieces of software I can think of is Unix. Its descendants are the dominant operating systems in the world today (Linux and macOS). Its history showcases many, important aspects of creating both great and awful software.

In part I of this series, I want to focus on the good parts. I’ll highlight five:

  1. Innovation
  2. Purpose and Principles
  3. Collaboration
  4. Evolution
  5. Serendipity

1. Innovation

Unix started as a set of programs its developers wanted for their own use. There was no grand plan for creating a world-changing operating system.

It was developed in an environment where the team had time to innovate (4). As Brian Kernighan recalls, Bell Labs “was a remarkable collection of really outstanding people who were pretty well paid to do whatever they wanted, and most of them had really good taste about what to work on.”

One innovation led to another. The desire to make Unix more portable led to the development of the B programming language. B evolved into C, which became one of the most influential and widely used programming languages in history.

One lesson to be learned here is the value of “play” time. We thrive when we have time to explore, experiment, and exchange ideas. When we thrive, and follow our interests, we can do great things.

2. Purpose and Principles

“great designs have conceptual integrity — unity, economy, clarity. They not only work, they delight.” — Fred Brooks (5).

The hard part of software is its “specification, design, and testing… not the labor of representing it and testing the fidelity of the representation.” (6).Well designed software has both a guiding principles that shape it, and a clear purpose. It is these aspects that define good software, more than how clean or elegant the code is.

According to Dennis Ritchie, the development of Unix had a single, driving purpose to “make computing as simple as possible.” This purpose informed every design decision made in Unix’s development. Given that simplicity is the Holy Grail of systems design, it was a great choice.

Working from this purpose resulted in what is called the Unix Design Philosophy. The Unix philosophy emphasizes building simple, short, clear, modular, and extensible code.

Doug McIlroy summarized the Unix Philosophy in four points (7):

  1. Make each program do one thing well. To do a new job, build afresh rather than complicate old programs by adding new “features”.
  2. Expect the output of every program to become the input to another, as yet unknown, program. Don’t clutter output with extraneous information. Avoid stringently columnar or binary input formats. Don’t insist on interactive input.
  3. Design and build software, even operating systems, to be tried early, ideally within weeks. Don’t hesitate to throw away the clumsy parts and rebuild them.
  4. Use tools in preference to unskilled help to lighten a programming task, even if you have to detour to build the tools and expect to throw some of them out after you’ve finished using them.

Unix’s simple, compositional approach still influences the mainstream approach to good software design to this day — almost fifty years later.

Having a Purpose and Principles for your development effort can have a significant impact on the quality of the product you create.

3. Collaboration and Community

Encouraging collaboration and communication helps to spur innovation and the evolution of a product. When there is a community around a product, groups will self-organize to solve issues, or try out new ideas. This is the power of Collaboration and Community.

Collaboration and community were at the heart of Unix. Thompson and team wanted to create more than a good programming environment. They wanted a system around which a community could form. “We knew from experience that the essence of communal computing is to encourage close communication.”

This said, the Unix community developed serendipitously. Bell Labs couldn’t sell products that weren’t directly related to telecommunications. So, AT&T released the Unix source code to anyone who asked. Because they couldn’t officially sell Unix, they didn’t offer any support for it.

Warren Toomey tells the story:

With no other channels of support available to them, early Unix adopters banded together for mutual assistance… these early Unix users themselves set about fixing bugs, writing new tools, and generally improving the system as they saw fit… By the mid-1970s, the environment of sharing that had sprung up around Unix resembled the open-source movement so prevalent today. (8)

It was this community involvement that gave rise to Unix’s consistent evolution.

Researchers and students got a better high from Unix than any other OS. It was cheap, it was malleable, it ran on relatively inexpensive hardware. And it was superior, for their needs, to anything else they could obtain. Better operating systems that would soon be competing with Unix either required hardware that universities couldn’t afford, weren’t “free,” or weren’t yet out of the labs that were busily synthesizing them. AT&T’s policy produced, at no cost, scads of freshly minted Unix hackers that were psychologically, if not chemically, dependent on Unix. (9)

One of the defining aspects of successful software is the community that rises up around it. The perspectives, innovations,, and frustrations of the community create a rich, valuable ecosystem and help drive its evolution.

4. Evolution

As it was being developed, Unix evolved constantly. It evolved so much early on, it didn’t have named versions or releases. The power of evolving design has been so central to software development that it can be seen in several successful methodologies ranging from RAD, and Boehm’s Spiral, to eXtreme Programming.

Once Unix got into the hands of the computing public, its evolution took off. One could argue this was a natural consequence of a well-functioning, collaborative community. When users of a system are able to provide input on it, the system can better evolve to meet their needs. Listening and empowering the users of your system can have amazing benefits.

5. Serendipity

The development of Unix was heavily influenced by chance. As mentioned earlier, it rose, partly, out of Ken Thompson’s desire to play video games. If you recall, Thompson had developed a game called Space Travel. During the 70s time on a computer cost money. The machine Thompson had written Space Travel on (the GE 635) was expensive to use.

To solve this problem, Thompson found an abandoned PDP-7. He ported Space Travel to the ‘7 so he could play it “for free.” According to the official Bell Labs history, about the time Thompson was writing Space Travel he:

again got the urge to write his own operating system. He had started on such a project before, but on a much bigger machine… Because Ken was now familiar with the ‘7 and knew he could use it as much as he wanted, the first version of Unix was written on this PDP-7. (10)

Writing Space Travel on the ‘7 serendipitously led Thompson to where he could write the first version of Unix.

Throughout the development of Unix, serendipity comes up repeatedly.

  • Thompson’s desire to play video games, led him to the PDP-7. He was able to have a computer to himself to work on Unix, because the PDP-7 was a largely abandoned machine.
  • Thompson had the time to write the first version of Unix because his wife went away for a month to show their new baby off to relatives.
  • The severe limitations of DEC’s PDP series forced Thompson and team to be highly efficient in their designs for Unix.
  • Unix had a community develop around it, because AT&T “gave away” not only the OS, but the source code for it, as well. (11)

The theme of serendipity highlights not only the role of chance, but the value of taking opportunities when they arise. There’s a level of unpredictability and unknowns in any project. Being aware of the role chance plays, you can be more mindful about how to work with the opportunities it presents when they arise, and take advantage of them to your benefit.

In Conclusion

There’s much to be learned from the development and design of successful software. Unix is one of the most successful and influential pieces of software ever developed. Looking at its inception and evolution, one can see patterns of good software development — and the impact of opportunity, and serendipity. Learning from these insights, we can build on them to help craft the next generation of great software.

On the front-end team at Blacklane, we’re looking for inspiration from these aspects of Unix’s development to help guide us. For example:

  • Each Friday, we set aside half the day for innovation time — -time where each developer on the team can work on what is interesting or exciting for them.
  • We want to make working with our code as simple as possible. That’s a tall order, for certain — -and we’re working hard to get there. We have guiding principles, may of which are based on the Unix philosophy, to help us get there.
  • In addition, we recognize the value of a well-thought-out design. We began our project by developing a minimal up-front design that is providing us with direction and guiding principles.
  • Anyone in Blacklane who is interested in the work we’re doing can view and provide feedback on our work. In addition, we’re regularly presenting our accomplishments to the company, to solicit feedback. And, we’re looking at ways to help build community around our product across teams.

End Notes:

  1. While the game Space Travel is no more, you can still play its successor Space War.
  2. https://www.quora.com/What-did-Alan-Kay-mean-by-Lisp-is-the-greatest-single-programming-language-ever-designed
  3. Interestingly, as well, Thompson and team also had significant constraints to work under. The PDP-7 was an obsolete machine with significant limitations. These limitations led to important design decisions in the development of Unix that have greatly contributed to its success.
  4. http://files.cnblogs.com/files/caozhu1/The.Design.of.Design.pdf
  5. http://faculty.salisbury.edu/~xswang/Research/Papers/SERelated/no-silver-bullet.pdf
  6. https://en.wikipedia.org/wiki/Unix_philosophy
  7. https://spectrum.ieee.org/tech-history/cyberspace/the-strange-birth-and-long-life-of-unix
  8. http://simson.net/ref/ugh.pdf
  9. https://www.bell-labs.com/usr/dmr/www/spacetravel.html
  10. They sold Unix to private developers for $100, and to institutions for $21,000.

--

--