# Why is JVM model simpler than klib? Inline function have several more dimensions of declaration changes, compared to normal ones. - Type parameter can be converted between reified and not - Lambda paramerets can be inline/noinline/crossinline - inline keyword itself can be added/removed In klib compatibility model, we need to answer what happens in all these cases. In jvm compatibility mode, there are effectively no inline functions on link-time (except corner cases like [calling from java](calling-from-java.md) and [inline override](inline-override.md)). , but in that cases, inline functions already behaves as normal ones. So they can't be changed, and this makes mental model much easier. For example, what this non-local return even mean, when `l` is `noinline`? ```kotlin // MODULE: lib // FILE: lib.kt // version: v1 inline fun foo(l: () -> Unit) { l() } // version: v2 inline fun foo(noinline l: () -> Unit) { l() } // MODULE: other // FILE: other.kt // compile("lib:v1") fun test() { foo { return } } // MODULE: app // compile("other") // compile("lib:v2") fun main() { test() // Will it link? } ```