The whole concept of "run your software on anything" dates back to at least the late 70s and early 80s. Every home computer had a BASIC interpreter and from what I can gather, most of the major ones had similar code words that you could conceivably take a BASIC program from one computer and plop onto another, barring of course using POKE, PEEK, and other memory related commands as-is.
As long as we're talking about application level software and programming languages made for such, then such applications are already CPU agnostic. However, if we're talking about systems level software, then you can't really escape from the nuances of the hardware you have until we unify on a single ISA.