The problem with write once run anywhere is that it's not desirable to device manufacturers apart from those on the bottom rungs who don't have a big enough developer community to carry the devices on their own. If MS and Apple threw JVMs onto their devices then we would be 90% of the way there already.
If any write-once-run-anywhere solution becomes to popular then the likes of MS or Apple will try their best to kill it.
See: Embrace, extend , extinguish by MS on Java and to an extent the web itself and Apple's ban on language runtimes/interpreters on the app store.
If every device allows for the same functionality as other devices due to identical software then manufacturers will only be able to compete on price.