Humans have been controlling the evolution of other species for tens of thousands of years. This has formed the basis of agriculture, through the domestication of plants and animals. The fields of genetic algorithms [27,35], and genetic programming  are based on controlling the evolution of computer programs. However, we still have very little experience with controlling the evolution of self-replicating computer programs, which is more difficult. In addition, breeding complex parallel programs is likely to bring new challenges. Developing technologies for managing the evolution of complex software will be critical for harnessing the full potential of evolution for the creation of useful software.