My interest in self-modifying code goes back to 1968 when I read that a single IBM 360 instruction could LPR the numbers from N to 0 and then stop itself by automodification.
In this vein it was later I came across a text on autocompilation and made the analogy to what had seemed a problem of infite ascent associated first posed by John Von Neumann in his writing posthumously collected as Self-Reproducing Automata.
With autocompliation of a compiler an established work practice in computer science I extended the analogy to machine design, designing starting from a machine, by stages, resolving "external references" in the manner of including linked libraries, and performing a "compliation and syntax check" for each stage, until "compiled with no errors" meant "universal and self-reproducing".