[This post was inspired by a discussion last week in my “Biological Approaches to Computer Security” class.]
Let’s talk about living code and dead code.
Living code is code which can change and evolve in response to new requirements. Living code is a communications medium between the programmers of the past and those of the present. Together, they collaborate on specifying solutions to software problems. The more alive the code, the more active this dialog.
Dead code*, in this context, is code that is not alive. It does not change in response to new requirements. Dead code is part of a conversation that ended long ago. Some dead code is truly dead and buried. The code for Windows 1.0 I would characterize as being dead in this way. Other dead code, however, still walks the earth.
I call these entities code zombies. Others call them legacy code.
Code zombies died a long time ago. The programmer conversations they were part of have long ended, and nobody is left who can continue them from where they left off. Nobody understands this code, and nobody can really change it without almost rewriting it from scratch. Yet this code is still run, is still relied upon.
Look around you – you’re surrounded by code zombies. If you run commercial, proprietary software, you are probably running a lot of zombie code. If you run open source, there are many fewer zombies around – but they do pop their heads up every so often.
Enterprises devote huge resources to maintaining their zombies. Zombies aren’t good at taking care of themselves, and the repair jobs are often gruesome. Sometimes a zombie needs to be brought back to life. This can be done, at great effort and expense. The result, however, is Frankenstein code: it may live, but boy is it not pretty, and it may turn around and bite you.
And here’s a funny thing: zombie code is insecure code. Tamed zombies aren’t fussy about who they take orders from. Living code, however, is part of a community that works to keep it safe.
I predict that the software industry will transform once enough people realize the costs of keeping zombies around outweigh the benefits.
* I know”dead code” has other meanings in computer science.