The Long Now of Software

What sort of software can be written today that would still be in service a century from now? This assumes no technological singularity or Mayan apocalypse; just people, software, and computers. Also, it doesn’t have to be the exact same code. Maintaining the codebase is allowed. Before reading on, give it 60 seconds of thought.

Don’t worry. I’ll wait.

My first (though not unique) idea was software for space probes. Interstellar probes last a long time. The Voyagers have been running for over 40 years, and can be expected to remain active for another decade. That only gets us halfway to our goal, but there are older software projects still in use today. Most of them can be built more easily than space probes.

Grep was created by Ken Thompson in 1973. FreeBSD and OS X use a descendant of the original code. Every Mac has software with roots going back over 40 years. (Sorry Linux users, GNU grep was created in 1999.)

Considering all that has changed, how has grep survived for so long? The original grep was compiled for the PDP-11. The file encodings it supported are long dead. Computers have gotten a million times faster since it was created.

I think there are several factors explaining grep’s longevity:

  1. The code is permissively licensed.
  2. It was written in a language that remains popular (C).
  3. The problem it solves (searching text files & streams) is still a problem today.
  4. People maintain it, mostly because of the reasons above.

Anything we build today should satisfy similar criteria.

Just as a binary compiled on a PDP-11 in 1973 won’t run on a modern computer, I doubt that anything compiled today will run on a computer a century hence. Even if the source code is available, it will require maintenance. There are simply too many unpredictable ways in which computers will change. New CPU architectures and operating systems will arise. New protocols and encoding formats will be standardized. New interaction paradigms will be invented. Hardware will probably get a million times faster.

So what, if anything, won’t change? Which of today’s programming languages will still be supported? Which file formats used today will still be popular in 2114?

When it comes to language support in 2114, few of today’s languages will survive. If I had to put my money on one, it would be C. Fortran and COBOL might still be used, but they’re niche languages even today. Newer languages such as Python, Ruby, and JavaScript may still be around, but they evolve more quickly than C. Any software written in those languages will require more effort to maintain. Go and Java aren’t terrible bets, but C has been around for longer and is simpler to implement.

File formats come and go, but one has been around since the beginning: Text files, and they’re as popular as ever. The encoding format may change, but it will likely be a superset of ASCII (like UTF-8).

It’s not crazy to believe that if humans are still alive and using computers in 2114, they’ll have text files and C compilers. It was only after I’d come to this conclusion that I realized Ag fits the criteria.

I hope that one day, a software archeologist reads my code and thinks, “Jeez, people back then must have had a lot of lead in their brains.”

When commenting, remember: Is it true? Is it necessary? Is it kind?

Go dark.