The Bug That Shut Down Computers World-Wide was originally published on October 2nd, 2007, and today marks the twenty-fifth anniversary of the story. Here’s to a great 2009!

Where were you the morning of January 1st, 1984? Me? I was out living it up at Divestiture-fest ’84 and – let me tell you – it was quite a party. We drank until those seven little Baby Bells looked like fourteen, and kept drinking until it all looked like AT&T again. Ah, the good old days. But not all of us were out celebrating. Some – like Robert Reagan – were actually working, desperately trying to fix the bug that shut down computers across the world.

With all the “oh no, the world’s gonna end” date problems out there – Y2K, DST, The End of the Epoch, and Y2070 – it’s surprising that most haven’t heard of the day that the world actually ended. On that day – January 1st, 1984 – a single bug was responsible for shutting down – and keeping down – a whole lot of computer systems.

There were three big rages back in the 1980’s: Rubik’s cubes, Molly Ringwald, and Wangs. While I’m sure you are all familiar with those first two 80’s icons, Wangs – i.e., any one of the many systems from Wang Laboratories – have fallen into the void of boring, obsolete computer junk. But a quarter century ago, Wang was where it was at.

Around 1983, Wang Laboratories employed upwards of 30,000 people and brought in revenues of nearly $6 billion/year (in today’s dollars). And their computers were everywhere. The Wang OIS (Office Information System) was perfect for many businesses and allowed “easy extensibility” through its Glossary programming language. It was so simple, apparently, that secretaries were able to master it.

Wang was even able to compete with IBM’s System 34 and System 36’s with their own line of mini-computers called the Wang VS. These systems hosted the standard development tools – COBOL, BASIC, RPG, etc – and its own. And like many Operating Systems of Old, the Wang VS was a little peculiar.

One interesting security feature of the Wang VS was File Expiration Dates. In addition to having a Creation and Modification date, files included an Expiration date. If someone – regardless of his/her security privileges – attempted to delete a file not past expiration, the operating system would raise an error. Although users could easily change the expiration date with another command, it was seen as a “nice to have” that prevented accidental deletions.

Like many operating systems, the Wang VS and its applications utilized temporary files to do all sorts of things, from caching to scheduling.

Like many modern development environments, there was no built-in mechanism for date/time calculations. Different modules of the operating system and its applications relied on different functions for different date/time calculations. Not surprisingly, one of these functions had a bug.

Unfortunately, the bug was in the temporary file creation module. Specifically, it mistakenly incremented the zero-indexed day-of-year for all day-of-years that are equal to 0 in a leap-year. In other words, when January 1, 1984 (day 0 in a leap year) hit, the code set “January 2, 1984” as a temporary file’s expiration date.

Because temporary files are created and deleted in a manner of seconds, the operating system was blocked from deleting its own files. One by one, processes in the Wang VS shut down and the computers grinded to a halt. Since boot time activity included the creation and deletion of temporary files, the operating system boot process could not complete. This effectively put ever single Wang VS computer in an unbootable state.

Wang engineers and support techs worked around-the-clock to restore and fix everyone’s broken computer. Thankfully, a combination of the New Year’s Day holiday and FedEx (who, apparently, were all using IBM computers) overnight shipping, most businesses only suffered a minor disruption of service. And the day the world ended – January 1st, 1984 – passed like every other.