Both evolution and software are serious subjects and this topic is worthy of a serious analysis. I can see three areas of research:
- premises: to what extent do the same conditions and laws apply?
- what can Darwinism teach us about software?
- what can software teach us about Darwinism?
Natural evolution is very similar to the evolution of software.
Both have natural selection, which weeds out forms based on their suitability in real life.
Both use mutations of source code as the means to provide variation. In biology, the code is DNA; in software engineering, it is in a programming language. Mutations in software are thought to be less random. This is largely a myth.
Note that it is irrelevant whether individual moves are predetermined and purposeful, if you want to know whether the rules of Darwinism (mutation and natural selection) apply to developments at large. Darwinism says nothing about individual, isolated changes, it only says something about long-term, large-scale effects.
Everything evolves: software that doesn't change, will die. We knew this; Darwinism provides reasons.
Convergent evolution: in similar conditions, from similar base materials, very similar systems will evolve.
Viability: a product fails if there is no environment to support it.
Punctuated equilibrium: evolution is always optimization: stable, successful pieces of software exist within temporarily optimal constellations of mutually adapted products.
If software evolves, it can be used to validate theories of evolution.
Richard Dawkins's books claim, for instance, that social behaviour is determined by reproductive success:
if this is true in humans, and software evolves in the same way, it is also true of software.