But in this case the program also creates the computer it runs on.
(Another way to look at it: a piece of code, be it DNA or a program written in a programming language, is just a bunch of symbols. You can't divine what these symbols mean from looking at the piece of code alone; you have to understand the mechanics of your compiler and your runtime. And these can evolve separately to the code you're looking at.)