I'm also excited about this aspect of WebAssembly, but interoperability will hard without a well-defined ABI. There are only four types in wasm: int32, int64, float32, and float64. Anything other than that needs to be encoded somehow, either as multiple values or in memory. For example, say you want to pass a 16-byte struct as an argument: how do you do it? Do you store the struct in memory and pass an int32 pointer…
I share that view. Currently each high level language compiles to its own thing creating huge islands of code. C#, Java, Go, Rust, C etc will all compile their frameworks into the wasm files with very simple facade interfaces. The overhead will be enormous. Also the core is abstraction like memory and thread management is far from here. It will take a decade to figure that out. Till then, wasm is good for single apps…
This is more or less what SmallTalk has been doing for ages. The keyword for that is "image", in particular "single image".
And yes, it poses interoperability problems: http://www.ianbicking.org/where-smalltalk-went-wrong.html