Tabs and Makefile
20 April 2015
The computing world is littered with unfortunate mistakes that managed to make the leap from small-scale inconvenience to a source of grief to millions or billions–at which point so many people and systems have been become accustomed to the error that fixing it is impossible.
One notorious example is the spelling of HTTP header
referer, which escaped the Netscape Corporation embedded in the bowels of their web browser without anyone noticing the error. From there it spread to every other web browser (they needed to be compatible), and finally RFC1945, the Hypertext Transfer Protocol standard itself. (At least, I’m pretty sure how things happened, but Wikipedia is inconclusive. Does anyone know?)
Another is the fateful decision of the author of
make to have the space character and the (visually identical) tab character do very different things. Very early on, the story goes, the author realized that this was a mistake, but by that point dozens of people were relying on it—backward-compatibility needed to be preserved—and so the tabs had to stay.
Unfortunately I couldn’t find a good source for this story online, so I emailed the author, Stuart Feldman, and asked him if it was true.
From: Michael Stillwell <...@google.com> Date: Mon, 20 Apr 2015 at 15:33 Subject: make versus tabs To: Stuart Feldman <...@google.com> Once upon a time I heard a story that soon after make was released, one of its first users complained that the requirement that each command line begin with a tab was suboptimal, and that some alternative approach should be used. As the story goes, the author was receptive to this criticism, but explained that sadly it was now too late to change the way things worked, because too many people were used to current behavior. The punchline, of course, was that at this point make had perhaps dozens of users. I was Googling a bit to try and figure out whether my memory was correct (it's surprisingly resistant to search), when I discovered that make's author works at Google, and so it might be possible to get a definitive answer by emailing you directly. So, to satisfy my curiosity, perhaps you could tell me: is the story true? Are there any other details you can recall and share? And how do you feel about tabs versus spaces versus whitespace now?
From: Stuart Feldman <...@google.com> Date: Mon, 20 Apr 2015 at 15:51 Subject: Re: make versus tabs To: Michael Stillwell <...@google.com> Story is only partly true. I used tabs because I was trying to use Lex (still in first version) and had trouble with some other patterns. (Make was written over a weekend, rewritten the next weekend ...) So I gave up on being smart and just used a fixed pattern (^\t) to indicate rules. Within a few weeks of writing Make, I already had a dozen friends who were using it. So even though I knew that "tab in column 1" was a bad idea, I didn't want to disrupt my user base. So instead I wrought havoc on tens of millions. I have used that example in software engineering lectures. Side note: I was awarded the ACM Software Systems Award for Make a decade ago. In my one minute talk on stage, I began "I would like to apologize". The audience then split in two - half started laughing, the other half looked at the laughers. A perfect bipartite graph of programmers and non-programmers.