We'd lose meta information. (Java) bytecode contains a lot more than just executable code. It contains information about which classes there are, what methods they contain, and what the exact signatures of these methods are. This gives the compiler and run-time linker enough information to link different class libraries distributed in binary format against each other, and to make such class libraries available to self-written code without having to manually write "glue code" that does that job.
Raw x86 code only contains the naked machine instructions plus (if you take a traditional library format like, say, ELF) primitive named symbols. This makes kludges like "scripting language x to toolkit y bindings" necessary, which serve the purpose to convey some higher-ordered pieces of information (like class hierachies or the like) over a lower-ordered bridge (shared objects).
We'd lose meta information. (Java) bytecode contains a lot more than just executable code. It contains information about which classes there are, what methods they contain, and what the exact signatures of these methods are. This gives the compiler and run-time linker enough information to link different class libraries distributed in binary format against each other, and to make such class libraries available to self-written code without having to manually write "glue code" that does that job.
Raw x86 code only contains the naked machine instructions plus (if you take a traditional library format like, say, ELF) primitive named symbols. This makes kludges like "scripting language x to toolkit y bindings" necessary, which serve the purpose to convey some higher-ordered pieces of information (like class hierachies or the like) over a lower-ordered bridge (shared objects).