Ну общего там то, что и Scala и Kotlin умеют таргетиться в разные платформы (JVM, JS, Native) и они оба пришли к необходимости промежуточного представления (что-то вроде типизированного AST дерева), которое уже в последствии компилируется в разные таргеты, например в JVM байткод. И если JVM байткод един для всех языков умеющих в JVM, то вот варианты промежуточного представления разошлись 😀 Хотя может конечно оно и к лучшему 😀