2. To be precise: 'Kotlin does not draw a distinction between “primitive” types, that are intrinsic to the language, and user-defined types'
From JVM point of view there are two kinds of types primitive and reference types. It's true in Kotlin most types are reference types e.g. Int uses boxed representation (primitive is wrapped). There is however a way to define real JVM primitive type, so there is a distinction :
Array<Int> - array of boxed integers
intArrayOf() / IntArray() - array of primitive integers
primitive types means JVM primitive types, and in you article it seems that primitive mean native kotlin types (boxed representation)