Can computer viruses evolve?

The latest episode of This Week in Virology posed an interesting question.  A listener question (at about 20 minutes before the end) prompted the question of whether or not the similarities between biological viruses and computer viruses was close enough that it would be possible to create a truly evolving computer virus and if so whether it would develop in similar ways to real viruses.

I'm no virologist, but I did happen to do some research in neuro-evolution while I was a student at UT.  I'm obviously no expert, but it's an interesting question that I have spend some time thinking about.   The short answer is that the evolution of real computer programs doesn't really work.  In my opinion, the problem is that of representation.  Software instructions are very brittle.  They cary out a specific set of instructions, and those instructions are so densely coded that almost all mutations or recombinations would yield completely non-functional programs.  It's not even a question of reduced fitness - they simply wouldn't work.  When all evolutionary paths result in death, evolution just doesn't have much to work with.

Although it's tempting to want to draw comparisons between DNA and software, I think it's clear that DNA is not software.  It is information, but it's not computational.  When a ribosome translates RNA, it isn't evaluating a fragile mathematical computation.    It is chaining together amino acids to create proteins, creating tiny biomachines that perform some function.  Changes in that representation can potentially produce new proteins which could perform new functions.  I'd guess most changes only result in a small change in fitness of the entity, though some changes could be deadly.   Either way, there's enough fuzziness in the system that evolution has some room to play and produce improvements.  

That's not to say that computational evolution is impossible.  It is done, however the trick is to find something other than software to evolve.  In my university research, I evolved neural networks.  A neural network is a system that takes inputs, passes them across a number of nodes that loosely mimic biological neural networks, and produces outputs.  The representations of neural networks can look a lot more like DNA than normal software.  A small change in a neural network won't necessarily kill the network, and it could conceivably improve it.   In my research, I showed that you could apply neuro-evolution to complex game playing tasks and the system could naturally evolve successful playing strategies, apparently only limited by the expressiveness of whatever the underlying neural network system is.  

In this way, the similarities to biological systems are quite striking.  If DNA is the representation of proteins, then evolution of DNA should be capable of  producing any sort of imaginable protein machine.  If some combination of proteins could, for example, produce the kind of powers you see on Heroes, then I'd think we would almost surely see those capabilities produced.  Since we don't observe that, then the most likely explanation is that our DNA-based architecture simply isn't capable enough.  It's possible evolution just needs more time, but my personal belief is that we've largely hit the limits of our current architecture.  

Getting back to software, neural networks are not the only computational devices that can be evolved.  To engage in a bit of circular logic, we can evolve pretty much anything that has a representation that is amenable to evolution.   That is to say, we need some sort of representation of the system that can be acted on by change operators (mutations and recombinations of some sort) and that is resilient in the face of those changes.  

Real computer software doesn't fit that description, so the idea of setting computer viruses loose on a closed network and applying evolutionary pressure really wouldn't work.   We can (and do) create evolving systems in software and study them, but so far I've yet to see anything truly amazing produced.  My feeling is this is due to the limitations of the architectures being evolved and not due to the limitations of evolutionary techniques.