It’s not that the “bytecode” is different. It is well understood that all JVM bytecode (instruction set) is the same. It’s the binary product generated by Kotlin that is fully compatible with Java binary. Groovy is not. Hence, it you use a library like ASM to instrument a Java class, that same code will work just fine in Kotlin. The same is not true if you use Groovy, Scala, Fantom, Ceylon.