Kotlin/Native — qué es, compilador a código nativo y características

Autor: IT Sectr Publicado: 2026-06-05 Tiempo de lectura: 8 min

Kotlin/Native es un compilador que traduce código Kotlin directamente a código máquina nativo, funcionando sin una máquina virtual. A diferencia de la versión JVM, Kotlin/Native utiliza un backend LLVM para generar archivos ejecutables para iOS, Android NDK, macOS, Windows, Linux y WebAssembly. La tecnología es la base de Kotlin Multiplatform y permite la ejecución de código compartido en plataformas donde JVM no está disponible. Según JetBrains, 2025, Kotlin/Native admite 13 plataformas objetivo y permite reutilizar hasta el 90% del código en proyectos KMM.

Puntos Clave

  • Kotlin/Native es un compilador que traduce código Kotlin a código máquina nativo sin usar JVM.
  • LLVM es el backend del compilador responsable de generar código máquina para cada plataforma objetivo.
  • KMM — Kotlin Multiplatform Mobile usa Kotlin/Native para ejecutar código compartido en dispositivos iOS.
  • Memory Manager es un recolector de basura automático basado en conteo de referencias sin detener hilos.
  • Interop es un mecanismo de interacción bidireccional con bibliotecas nativas de Objective-C, Swift y C.

¿Qué es Kotlin/Native?

Kotlin/Native es una tecnología para compilar código Kotlin en código máquina nativo, desarrollada por JetBrains. La principal diferencia con Kotlin/JVM es la ausencia de necesidad de una máquina virtual: el archivo ejecutable resultante contiene solo código máquina y un runtime mínimo. Esto permite ejecutar aplicaciones Kotlin en dispositivos y sistemas donde JVM no es compatible, incluyendo iPhone, Apple Watch y sistemas embebidos.

La historia de Kotlin/Native comenzó con un proyecto: un compilador experimental que se integró en la rama principal de Kotlin en 2017. En 2019, en KotlinConf, se anunció el soporte para iOS como plataforma objetivo, lo que se convirtió en un punto de inflexión para el desarrollo móvil. Desde Kotlin 1.9.20, el compilador Kotlin/Native ha alcanzado la estabilidad y se incluye en Kotlin Multiplatform de forma predeterminada.

La característica clave de Kotlin/Native es el uso de una representación intermedia común IR, que se compila en código máquina para cada plataforma por separado. Esto proporciona un frontend de compilación unificado para todos los backends de Kotlin: JVM, JS y Native.

Cómo funciona el compilador Kotlin/Native

La compilación en Kotlin/Native pasa por varias etapas de transformación. El código fuente en Kotlin primero se convierte en una representación interna, luego se optimiza y se pasa al backend LLVM para la generación de código máquina. La etapa final es el enlace con las bibliotecas de runtime y la creación de un archivo ejecutable o biblioteca dinámica.

La arquitectura incluye tres componentes clave: frontend (análisis y verificación de tipos), generador IR (construcción de representación intermedia) y backend LLVM (generación de código máquina). Este esquema es similar al enfoque utilizado en los compiladores Clang para C++ y Rust.

kotlin
// Compilación de Kotlin/Native mediante línea de comandos
kotlinc-native hello.kt -o hello -opt

// Compilación para iOS arm64 mediante Kotlin Multiplatform
./gradlew :shared:linkDebugFrameworkIosArm64

Para la gestión de memoria, Kotlin/Native utiliza su propio Memory Manager, basado en conteo de referencias con un detector de ciclos. Desde Kotlin 1.7.20, el nuevo administrador de memoria funciona por defecto y no requiere anotaciones @ThreadLocal o @SharedImmutable. El recolector de basura funciona sin detener hilos, lo que es crítico para iOS, donde el sistema puede finalizar forzosamente una aplicación durante el bloqueo prolongado del hilo principal.

Etapas de compilación de Kotlin/Native

El proceso de compilación se divide en cinco etapas: análisis sintáctico (análisis del código fuente), análisis semántico (verificación de tipos y resolución de nombres), generación de IR (construcción de representación intermedia), optimización (simplificación y eliminación de código muerto) y generación de código a través de LLVM. Cada etapa puede ejecutarse en paralelo para diferentes módulos, lo que acelera la compilación de proyectos grandes.

EtapaDuraciónResultado
Análisis sintáctico~10% del tiempoÁrbol AST del código fuente
Análisis semántico~20% del tiempoAST tipado
Generación de IR~15% del tiempoKotlin IR (Intermediate Representation)
Optimización~25% del tiempoIR optimizado
Generación de código LLVM~30% del tiempoCódigo máquina + archivo ejecutable

Plataformas compatibles con Kotlin/Native

Kotlin/Native admite 13 plataformas objetivo, divididas en categorías. Para el desarrollo móvil, están disponibles iOS (arm64), Android (arm32, arm64, x86_64) y watchOS. Las plataformas de escritorio incluyen macOS (x64, arm64), Windows (mingw x64) y Linux (x64, arm64, arm32). Para el desarrollo de servidores y sistemas embebidos, están disponibles WebAssembly y Kotlin/Native en LLVM sin SO (standalone). Cada plataforma requiere un framework o biblioteca independiente como salida.

Plataformas para desarrollo móvil

Para iOS, Kotlin/Native genera un framework universal (.framework) que puede conectarse a un proyecto Xcode. Para Android NDK, se crean bibliotecas nativas .so que pueden llamarse a través de JNI. watchOS es compatible desde Kotlin 1.6.0, y tvOS desde la versión 1.7.0. Cada arquitectura requiere una compilación separada, pero Kotlin Multiplatform automatiza este proceso a través del plugin de Gradle.

Plataformas de escritorio y servidor

macOS y Linux se utilizan para desarrollar aplicaciones nativas de escritorio en Kotlin usando el framework Compose Multiplatform. Windows (MinGW) es compatible desde Kotlin 1.3.70 y permite crear aplicaciones Windows sin instalar JVM. Para el desarrollo de servidores, Kotlin/Native puede usarse en entornos donde JVM no está disponible, como contenedores Docker con una imagen mínima basada en scratch o Alpine.

CategoríaPlataformaArquitectura
MóviliOSarm64, simulador (x64, arm64)
MóvilAndroid NDKarm32, arm64, x86, x86_64
WearablewatchOSarm64, simulador (x64)
EscritoriomacOSx64, arm64
EscritorioWindowsmingw x64
EscritorioLinuxx64, arm64, arm32

Kotlin/Native para desarrollo iOS

iOS es la plataforma objetivo principal de Kotlin/Native en el contexto de KMM. El compilador crea un framework de iOS que contiene todo el código compartido, que luego se conecta a un proyecto Xcode. El framework admite tanto enlace estático como dinámico. Kotlin/Native genera wrappers de Objective-C para clases y funciones de Kotlin, proporcionando integración directa con código Swift y Objective-C.

La integración con iOS requiere configurar Xcode para conectar el framework generado. Kotlin Multiplatform automatiza este proceso mediante la tarea embedAndSignAppleFrameworkForXcode, que se invoca desde Xcode Build Phases. Para la depuración, Kotlin/Native admite puntos de interrupción en el código del módulo compartido al ejecutar la aplicación en el simulador de iOS.

kotlin
// Código Kotlin compilado en un framework de iOS
package com.itsectr.shared

class GreetingProvider {
    fun createGreeting(): String {
        return "Hello from Kotlin/Native!"
    }

    fun formatVersion(major: Int, minor: Int): String {
        return "v$major.$minor"
    }
}

Interop con Objective-C y Swift

El Interop con código iOS funciona en ambas direcciones. Kotlin/Native genera cabeceras Objective-C para clases de Kotlin, que automáticamente se vuelven accesibles desde Swift. La comunicación inversa se proporciona mediante la anotación @ObjCName para exportar funciones de Kotlin bajo un nombre Objective-C especificado. Las colecciones de Kotlin se convierten automáticamente a NSArray y NSDictionary, y las corrutinas de Kotlin se envuelven en publishers de Combine a través de la biblioteca SKIE. Para trabajar con frameworks de iOS desde Kotlin, se utiliza cinterop, una herramienta para generar enlaces Kotlin a cabeceras Objective-C.

Ejemplos de código: configuración y compilación

Para comenzar con Kotlin/Native, es necesario configurar build.gradle.kts con el plugin de Kotlin Multiplatform y las plataformas objetivo. Veamos una configuración mínima para un proyecto KMM con soporte para iOS y Android.

kotlin
plugins {
    kotlin("multiplatform") version "2.0.21"
}

kotlin {
    iosArm64()
    iosSimulatorArm64()

    sourceSets {
        commonMain.dependencies {
            implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0")
        }
        iosMain.dependencies {
            implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0")
        }
    }
}

Después de configurar la compilación, se puede agregar código específico de plataforma. Kotlin/Native proporciona acceso a funciones de iOS a través de wrappers de Kotlin. Por ejemplo, obtener el UUID del dispositivo en iOS requiere llamar a NSUUID de Foundation.

kotlin
import platform.Foundation.NSUUID

fun getDeviceId(): String {
    return NSUUID().UUIDString()
}

fun currentTimestampMillis(): Long {
    return (platform.Foundation.NSDate().timeIntervalSince1970 * 1000).toLong()
}

Compilación del framework iOS

Para generar un framework de iOS, se utiliza la tarea de Gradle linkDebugFrameworkIosArm64 o linkReleaseFrameworkIosArm64 para producción. Después de la compilación, el framework se encuentra en build/bin/iosArm64/debugFramework/. La conexión a un proyecto Xcode se realiza mediante Pods Podfile o agregando el framework en General → Frameworks, Libraries and Embedded Content.

kotlin
// Compilar framework release para iOS arm64
./gradlew :shared:linkReleaseFrameworkIosArm64

// Compilar framework universal x86_64 + arm64
./gradlew :shared:linkReleaseFrameworkIosX64 \
    :shared:linkReleaseFrameworkIosArm64

// Crear XCFramework para App Store
./gradlew :shared:assembleReleaseXCFramework

Kotlin/Native vs Kotlin/JVM: comparación

Kotlin/Native y Kotlin/JVM difieren en arquitectura, rendimiento y ámbito de aplicación. Kotlin/JVM compila código en bytecode ejecutado en la JVM, lo que proporciona acceso a un vasto ecosistema de bibliotecas Java, pero requiere una máquina virtual instalada. Kotlin/Native genera un archivo ejecutable sin dependencias externas, pero con un ecosistema de bibliotecas más limitado.

El rendimiento del tiempo de inicio es mayor en Kotlin/Native ya que no requiere carga de JVM. Según los benchmarks de JetBrains, una aplicación Hello World en Kotlin/Native se inicia en 0.003 segundos, mientras que Kotlin/JVM requiere 0.5–1 segundo para cargar la máquina virtual. Sin embargo, el tamaño del archivo ejecutable de Kotlin/Native puede ser 2–3 veces mayor debido al runtime incluido.

CaracterísticaKotlin/NativeKotlin/JVM
Plataformas objetivoiOS, macOS, Windows, Linux, WebAssembly, embebidoServidores, Android, escritorio (JVM)
DependenciasSin runtime (autocontenido)Requiere JVM (JDK/JRE)
Tiempo de inicio~3 ms~500–1000 ms
EcosistemaLimitado (Kotlin + Interop)Completo (Kotlin + Java + Android SDK)
Tamaño del binario~1–5 MB (con runtime)~100–500 KB (JAR)

La elección entre Kotlin/Native y Kotlin/JVM depende de la plataforma objetivo. Si el proyecto está dirigido a iOS o requiere un consumo mínimo de recursos, Kotlin/Native es la única opción. Para el desarrollo de Android, Kotlin/JVM sigue siendo el estándar, aunque Kotlin/Native se usa para componentes NDK donde se necesita rendimiento nativo. En proyectos multiplataforma, Kotlin Multiplatform combina ambos enfoques: el código compartido se compila mediante Kotlin/Native para iOS y mediante Kotlin/JVM para Android.

Preguntas Frecuentes

¿En qué se diferencia Kotlin/Native de Kotlin/JVM?

Kotlin/Native compila código en código máquina nativo sin máquina virtual, mientras que Kotlin/JVM compila en bytecode que requiere una JVM instalada. Kotlin/Native se usa para iOS, sistemas embebidos y WebAssembly, mientras que Kotlin/JVM se usa para Android y servidores.

¿Se puede usar Kotlin/Native sin KMM?

Sí, Kotlin/Native se puede usar como compilador independiente para crear aplicaciones de consola, plugins nativos o bibliotecas para cualquier plataforma compatible. KMM solo simplifica la organización del código multiplataforma.

¿Cómo maneja la memoria Kotlin/Native en iOS?

El Memory Manager de Kotlin/Native utiliza conteo de referencias con un detector automático de ciclos. Desde Kotlin 1.7.20, el recolector de basura no requiere anotaciones @ThreadLocal y funciona sin detener el hilo principal de iOS.

¿Qué bibliotecas de iOS están disponibles desde Kotlin/Native?

A través de cinterop, están disponibles todos los frameworks de iOS: Foundation, UIKit, CoreData, CoreBluetooth, MapKit y cientos más. JetBrains proporciona enlaces preparados para bibliotecas estándar de iOS como parte de Kotlin/Native.

¿Cómo depurar código Kotlin/Native en iOS?

La depuración se realiza usando Xcode con el framework Kotlin/Native conectado. Los puntos de interrupción en código Kotlin funcionan al ejecutar en el simulador de iOS. Para un dispositivo, se requiere una compilación Debug y un perfil de desarrollador de Apple.

Resumen

  • Kotlin/Native es un compilador de Kotlin a código nativo, la base de Kotlin Multiplatform Mobile.
  • Backend LLVM proporciona generación de código máquina para 13 plataformas objetivo, incluyendo iOS, Android NDK, macOS y Windows.
  • Memory Manager con conteo de referencias funciona sin detener hilos, lo que es crítico para plataformas móviles.
  • Framework iOS se genera automáticamente y se conecta a un proyecto Xcode mediante embedAndSignAppleFrameworkForXcode.
  • Interop con Objective-C y Swift proporciona integración bidireccional con código iOS nativo a través de cinterop y @ObjCName.
  • Rendimiento de inicio de Kotlin/Native es significativamente mayor que la versión JVM: hasta 0.003 segundos en lugar de 0.5–1 segundo.
  • Use Kotlin/Native para iOS, sistemas embebidos y WebAssembly donde JVM no esté disponible o no sea deseable.

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también