I am employed as a computer programmer, contributing to a mobile phone operating system. Here is bit of my work: 1I wrote the first version of this bit of code. My kindly colleagues have since improved it. For this essay, I edited one bit of the production code as of this writing, replacing “this._now()” with Date.now()

  /* This Source Code Form is subject to the terms of the Mozilla Public
   * License, v. 2.0. If a copy of the MPL was not distributed with this file,
   * You can obtain one at http://mozilla.org/MPL/2.0/. */
  hasValidToken: function() {
    if (!this._token) {
      return false;
    }
    if (this._token.expiration < Date.now()) {
      return false;
    }
    return true;
  }

If you’re not accustomed to reading source code, you might find that excerpt incomprehensible. Here’s what it means, skipping the first three lines and with the indentation preserved:

  Let's see if we have a valid token.
    If we can't find a token at all,
      then we don't.
    If the token we find has expired,
      then we don't.
    We do have a valid token.

Though this fragment of a software program is humble, my employer paid me to create it. Now I give it to you. You can take it and run it on your own computer. 2To be precise, you’d have to add a few definitions to it to make it runnable. I didn’t want to embed another thirty lines of source code into an essay, so I left them out. You can edit it and run your edited version. You can even give it to someone else to change and run. Please: consider doing so yourself.

What did my employer do to make me so mad that I’m posting their software on the Internet? To which jurisdiction have I fled to avoid prosecution for doing so? Why do I challenge you to re-share it? And what does the starred bit in the beginning have to do with anyway?

Those first three lines are a license notice, telling you what rights and obligations the software comes with. Like a bottling date on expensive olive oil, the license notice is a synecdoche for a culture. If you follow the URL included in the license notice, you will find this passage:

Each [author of this software] hereby grants You ... license ... to use, reproduce, make available, modify, display, perform, distribute, and otherwise exploit it.

Good news! I’m not going to be fired or sued for publically sharing the software I wrote. 3The concern is not hypothetical. My previous employer emphasized its readiness to do both to anyone who exposed their work many times. The software I developed for them was no more or less mundane than the bit I have shared with you, but they regularly spent enormous sums on lawyers to keep it from being copied. This license urges me to share it with you; it is a Free License, and those lines of code are Free Software.

Free Software, a license 4Technically, a type of license., a doctrine, and a culture, arose from the culture of academic programming in the 1970s, as led by a remarkable young coder named Richard Stallman. 5There are several good histories; start with Steven Levy, Hackers: Heroes of the Computer Revolution for the big picture and Sam Williams, Free as in Freedom for Stallman’s life. Stallman rose from a promising novice to an important figure by leading a change in how programmers worked together.

A computer program is a series of instructions to a machine that serve some purpose. The first computers were programmed by hand: by a person’s setting circuits to on or off. Here are a pair of computer programmers working together. To instruct the computer, they will move the wires you see in the picture:

Programmers Betty Jean Jennings (left) and Fran Bilas (right) operate ENIAC's main control panel
Programmers Betty Jean Jennings (left) and Fran Bilas (right) operate ENIAC’s main control panel

Those computers overwhelmingly performed specific mathematical calculations. The invention of transistors and integrated circuits led to the computers we’ve known since the 1960s, in which programs were “written” rather than wired, and (not coincidentally) in which programs have myriad purposes, many far removed from mathematics.

When Stallman came on the scene, in the early 1970s, coders used program-writing programs, called “editors”, which they controlled with their keyboards. However, they didn’t have pointers for selecting and revising their work. Instead, they meticulously crafted cryptic commands:

0uz
<j 0aua l
<0aub
qa-qb”g xa k -l ga-1uz ‘
qbua
l .-z;>
qz;>

That is an example from Teco, the editor that made Stallman’s career. To get Teco, and by extension the computer, to do anything useful, you had to compose and precisely type abstruse incantations such as that. Functionality we take for granted in today’s programs did not exist. Instead you had to devise one (or often a series) of terse instructions that would accomplish what you wanted, starting more or less from scratch each time. If such an approach seems hopelessly outmoded, keep in mind that Stallman was working closer in time to the picture above than to the present.

Stallman improved Teco by making it possible to save those terse instruction sequences into little mini-programs, called “macros”. That was a “real breakthrough,” and it became very popular. 6Quotations in this paragraph from Free as in Freedom, Chapter 6. Macros freed you from the labor of re-inventing that long command each time you wanted to use it. Programmers developed macros independently, shared them, and reworked others’ macros that had been shared with them in turn, thereby fostering a larger programming community. This good news was also bad news: because “everybody and his brother was writing his own collection,” the resulting embarrassment of riches was, in one participant’s words, “a Tower of Babel”: to understand another coder’s work on Teco, a programmer might as well have needed to learn a new language, without a teacher.

Imagine joining dozens of people to build a house together. But instead of working from a common plan, each of you added what you wanted, where and how you wanted. Doors between rooms would reveal floors whose levels did not match because one side used metric and the other imperial measurements. There might be five bathrooms but no connection to the master sewer line. And you could not go on site without three people running up to demand that you listen to their explanation of how to work together.

By making Teco commands reproducible, Stallman fostered something like that scene. To fix it required facing three interlocking dilemmas:

– How can a software system be constructed so that it can be constantly changed?
– How can people independently change it without creating conflicts?
– Who decides the answers to the first two questions?

Teco needed three more new solutions to arise more-or-less at once, and in harmony with each other:

– A technical lingua franca for macros, like the metric system for measurement.
– A common set of macros which evolved with the community of programmers, like standard construction materials.
– A community which regularly redirected individuals’ new work back to the common code, like carpenters who worked together instead of in mutual disregard.

Working with another soon-to-be-famous programmer, Stallman developed the technical approach in a single afternoon, specifying a very small set of core functions that everyone would need in a way that allowed “Tinker Toy-style extensibility”. He called it “Emacs”, for “Extensible MACroS.” To introduce Emacs to the community of Teco users, Stallman combined the declaration of a principle with the force of his own personality, defining “a social contract [that] ‘all improvements must be given back to me to be incorporated and distributed.'”7http://www.gnu.org/software/emacs/emacs-paper.html#SEC34, as quoted by Williams. One individual, Stallman himself, would take up the burden of embodying the technical commons that would underly the community. He would be the building’s supervising architect. 8A common official job title of a programmer who coordinates the work of other programmers is “architect.”

Stallman’s multi-faceted creativity birthed a virtuous circle: Emacs encouraged users to add bespoke improvements, so they did. Stallman demanded that the resulting individual variations be re-integrated into the shared whole, and they were often enough that the whole improved, which attracted more coders, who invested more of their creativity, and so on.

As Emacs’ community advanced its technical capacity, some developers took their own “forks” in independent directions, even to the extent of withholding source code and charging money, and so revealed the limits of Stallman’s dictatorship. 9Like “architect”, “dictator” has meaning in the context of software projects: “Benevolent Dictator For Life Stallman responded by inventing the idea of Free Software. He replaced the blunt command of personal fealty — “all improvements must be given back to me” — with an impersonal and general intellectual property declaration: the General Public License.

The license agreements of most software companies try to keep users
at the mercy of those companies.  By contrast, our General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users.  The
General Public License applies to the Free Software Foundation's
software and to any other program whose authors commit to using it.
You can use it for your programs, too.

The GPL required any programmer who shared a working program based on common code to share the source of his changes — a brilliant and strange legal and social innovation. To this day, Stallman sees the Free Software principles, license, and community as facets of a whole:

GNU is an operating system that is free software—that is, it respects users’ freedom. The development of GNU made it possible to use a computer without software that would trample your freedom. … The free software movement campaigns to win for the users of computing the freedom that comes from free software.

The license with which this essay opens thirty years later is a variation on the GPL.

Emacs had become the tool that Stallman and his peers worked in all day, and now they were presumably free to stretch their creativity without bound. Of course, they still had to determine how the new work of multiple individuals would remain mutually compatible. The remarkable innovator dedicated the community, for the then-foreseeable future, to re-writing the system software of the machines they preferred, called Unix:

I have found very many programmers eager to contribute part-time work for GNU. For most projects, such part-time distributed work would be very hard to coordinate; the independently written parts would not work together. But for the particular task of replacing Unix, this problem is absent. A complete Unix system contains hundreds of utility programs, each of which is documented separately. Most interface specifications are fixed by Unix compatibility. If each contributor can write a compatible replacement for a single Unix utility, and make it work properly in place of the original on a Unix system, then these utilities will work right when put together.

Do you see what a wonderful, Dada-ist prank Stallman pulled? Freedom to change software is so important that we will start a movement of thousands of programmers to rewrite software we already have, so that the new version … works just like the old one did. Stallman was perfectly serious, and he has not wavered. The programmer who impressed his famous peers with his skill, his creativity, and his vision would spend the rest of his working life in software … without creating even one more significant novel program. Imagine that the Beatles’ stopped playing music in 1964 to spend the next three decades as record company executives, or that Lionel Messi quit football at the age of 19 to become a sports agent. What unique, valuable programs we would have, if only Stallman had continued his brilliant career of crafting novel software! Why would any young genius make such a choice? Would you call that tragedy, or farce?

It was neither. While Stallman, like Pierre Menard, dedicated himself to copying another’s masterpiece, Stallman’s community spent the next two decades writing the programs that became the Internet as we know it. Much of it is not Free Software, but almost all of it follows the larger pattern he established: code used by programmers should be developed in the open and shared without significant restriction. By dedicating himself to the creation of a culture, Stallman fostered more important new work than a hundred geniuses could have developed individually.

When the World Wide Web burst onto the scene in the mid-1990’s, it embodied a similar vision: anyone in the world should be able to further the spread of knowledge by publishing to everyone else in the world, and by linking their own work with anyone else’s. (If the enormous attention given to Steve Jobs were divided into three parts, and two of them redirected to the work of Stallman and the Web’s creator Tim Berners-Lee, popular understanding of the recent history of technology would increase greatly.) Informed observers expected established software companies such as Microsoft to “embrace, extend, and extinguish” this brief flowering of egalitarian creativity. Stallman’s Free Software culture provided a vision for organizing the Web’s self-appointed defenders around a crucial bit of technology, Web server software. A motley group of developers came together to fend off the threat of private monopolies, dubbing themselves The Apache Project:

In February of 1995 … many webmasters had developed their own [web server] extensions and bug fixes that were in need of a common distribution. A small group … gathered together for the purpose of coordinating their changes[. They] put together a mailing list, shared information space, and logins for the core developers on a machine in the California Bay Area, with bandwidth donated.

The Apache Project’s rhetoric shows the long reach of Free Software culture:

Why Apache Software is Free: … We believe that the tools of online publishing should be in the hands of everyone. … We realize that it is often seen as an economic advantage for one company to … control tightly a particular conduit such that all others must pay for its use. … To the extent that the protocols of the World Wide Web remain “unowned” by a single company, the Web will remain a level playing field … Thus, “ownership” of the protocols must be prevented. … those who benefit from this software by using it, often contribute back to it … These kinds of communities can only happen with freely available software … Apache’s strength comes from the fact that it’s free, and if it were made “not free” it would suffer tremendously, even if that money were spent on a real development team. We want to see Apache Software used very widely — by large companies, small companies, research institutions, schools, individuals, in the intranet environment, everywhere

When Stallman sat down to work on Teco in 1974, only an exotic technical elite used computers. By 2004, most adults in affluent societies had access to them, and in particular to the World Wide Web. You probably have a smartphone near you, and all smartphones depend on communally developed software. 10The licenses in question are “Open” but not “Free”: a complex, dry, and important distinction with a detailed history. Stallman and his peers fueled this exponential growth by making programming inseparable from sharing with other programmers, both technically and culturally. Stallman placed upon each programmer a moral obligation to give their work to “everyone”. Every day programmers in their tradition share with each other. I wrote this essay with Emacs, for sharing on the Web. Stallman in his youthful obscurity, lacking authority beyond that of his remarkable voice and energy, insisted to everyone around him that they had a moral obligation to change the way they made things, and in particular, to focus on their obligation to share with any productive colleague who wanted it. He defined a culture which attracted a community that shaped the world we live in today.

Acknowledgements

This account of Stallman draws heavily on Chapter 6 of Sam Williams’ Free As in Freedom , a truly excellent work of expository prose. I struggled to effectively summarize Williams’ meticulously researched narrative and probably failed. If the topic interests you, or if you’d simply enjoy watching a tricky challenge in the crafting of technical history solved well, go read Williams. My friend Mike Travers drew on his own experience of the AI Lab and Stallman to save me from several embarrassing mistakes. Close readings from my friends Kartik Agaram, Anthony Di Franco, John Neil, Vivekananda Ponnaiyan, and Bill Seitz led to other improvements. This work began as a talk given at Refactor Camp; my thanks to the other participants and especially to Venkatesh Rao.

Creative Commons License
Tools by Sam Penrose is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.
Available at http://www.sampenrose.net/tools/.

References   [ + ]

1. I wrote the first version of this bit of code. My kindly colleagues have since improved it. For this essay, I edited one bit of the production code as of this writing, replacing “this._now()” with Date.now()
2. To be precise, you’d have to add a few definitions to it to make it runnable. I didn’t want to embed another thirty lines of source code into an essay, so I left them out.
3. The concern is not hypothetical. My previous employer emphasized its readiness to do both to anyone who exposed their work many times. The software I developed for them was no more or less mundane than the bit I have shared with you, but they regularly spent enormous sums on lawyers to keep it from being copied.
4. Technically, a type of license.
5. There are several good histories; start with Steven Levy, Hackers: Heroes of the Computer Revolution for the big picture and Sam Williams, Free as in Freedom for Stallman’s life.
6. Quotations in this paragraph from Free as in Freedom, Chapter 6.
7. http://www.gnu.org/software/emacs/emacs-paper.html#SEC34, as quoted by Williams.
8. A common official job title of a programmer who coordinates the work of other programmers is “architect.”
9. Like “architect”, “dictator” has meaning in the context of software projects: “Benevolent Dictator For Life
10. The licenses in question are “Open” but not “Free”: a complex, dry, and important distinction with a detailed history.

Leave a Reply

Your email address will not be published. Required fields are marked *