Kotlin/Native — это компилятор Kotlin-кода непосредственно в нативный машинный код, работающий без виртуальной машины. В отличие от JVM-версии, Kotlin/Native использует LLVM-бэкенд для генерации исполняемых файлов под iOS, Android NDK, macOS, Windows, Linux и WebAssembly. Технология является фундаментом Kotlin Multiplatform и обеспечивает выполнение общего кода на платформах, где JVM недоступна. По данным JetBrains, 2025, Kotlin/Native поддерживает 13 целевых платформ и позволяет переиспользовать до 90% кода в KMM-проектах.
Главное
Kotlin/Native — это технология компиляции Kotlin-кода в нативный машинный код, разработанная компанией JetBrains. Основное отличие от Kotlin/JVM заключается в отсутствии необходимости в виртуальной машине — готовый исполняемый файл содержит только машинный код и минимальный рантайм. Это позволяет запускать Kotlin-приложения на устройствах и системах, где JVM не поддерживается, включая iPhone, Apple Watch и встраиваемые системы.
История Kotlin/Native началась с проекта — экспериментального компилятора, который в 2017 году был интегрирован в основную ветку Kotlin. В 2019 году на KotlinConf была анонсирована поддержка iOS как целевой платформы, что стало поворотным моментом для мобильной разработки. С версии Kotlin 1.9.20 компилятор Kotlin/Native достиг стабильности и включён в состав Kotlin Multiplatform по умолчанию.
Ключевая особенность Kotlin/Native — использование общего промежуточного представления IR, которое компилируется в машинный код для каждой платформы отдельно. Это обеспечивает единый фронтенд компиляции для всех бэкендов Kotlin: JVM, JS и Native.
Компиляция Kotlin/Native проходит несколько этапов трансформации. Исходный код на Kotlin сначала преобразуется во внутреннее представление, затем оптимизируется и передаётся в LLVM-бэкенд для генерации машинного кода. Финальный этап — линковка с рантайм-библиотеками и создание исполняемого файла или динамической библиотеки.
Архитектура включает три ключевых компонента: фронтенд (парсинг и проверка типов), IR-генератор (построение промежуточного представления) и LLVM-бэкенд (генерация машинного кода). Эта схема аналогична подходу, используемому в компиляторах Clang для C++ и Rust.
// Kotlin/Native compilation via command line
kotlinc-native hello.kt -o hello -opt
// Build for iOS arm64 via Kotlin Multiplatform
./gradlew :shared:linkDebugFrameworkIosArm64
Для управления памятью Kotlin/Native использует собственный Memory Manager, основанный на подсчёте ссылок с циклическим детектором. Начиная с Kotlin 1.7.20, новый менеджер памяти работает по умолчанию и не требует аннотаций @ThreadLocal или @SharedImmutable. Сборщик мусора работает без остановки потоков, что критически важно для iOS, где система может принудительно завершить приложение при длительном блокировании главного потока.
Процесс компиляции делится на пять этапов: парсинг (разбор исходного кода), семантический анализ (проверка типов и разрешение имён), генерация IR (построение промежуточного представления), оптимизация (упрощение и удаление мёртвого кода) и кодогенерация через LLVM. Каждый этап может выполняться параллельно для разных модулей, что ускоряет сборку крупных проектов.
| Этап | Длительность | Результат |
|---|---|---|
| Парсинг | ~10% времени | AST-дерево исходного кода |
| Семантический анализ | ~20% времени | Типизированное AST |
| Генерация IR | ~15% времени | Kotlin IR (Intermediate Representation) |
| Оптимизация | ~25% времени | Оптимизированный IR |
| LLVM кодогенерация | ~30% времени | Машинный код + исполняемый файл |
Kotlin/Native поддерживает 13 целевых платформ, разделённых на категории. Для мобильной разработки доступны iOS (arm64), Android (arm32, arm64, x86_64) и watchOS. Десктопные платформы включают macOS (x64, arm64), Windows (mingw x64) и Linux (x64, arm64, arm32). Для серверной и встраиваемой разработки доступны WebAssembly и Kotlin/Native на LLVM без ОС (standalone). Каждая платформа требует отдельного фреймворка или библиотеки на выходе.
Для iOS Kotlin/Native генерирует универсальный фреймворк (.framework), который может быть подключён к Xcode-проекту. Для Android NDK создаются нативные библиотеки .so, которые можно вызывать через JNI. Платформа watchOS поддерживается начиная с Kotlin 1.6.0, а tvOS — с версии 1.7.0. Каждая архитектура требует отдельной сборки, но Kotlin Multiplatform автоматизирует этот процесс через Gradle-плагин.
macOS и Linux используются для разработки нативных десктопных приложений на Kotlin с использованием фреймворка Compose Multiplatform. Платформа Windows (MinGW) поддерживается с Kotlin 1.3.70 и позволяет создавать Windows-приложения без установки JVM. Для серверной разработки Kotlin/Native может использоваться в средах, где JVM недоступна, например, в Docker-контейнерах с минимальным образом на основе scratch или Alpine.
| Категория | Платформа | Архитектура |
|---|---|---|
| Мобильные | iOS | arm64, simulator (x64, arm64) |
| Мобильные | Android NDK | arm32, arm64, x86, x86_64 |
| Носимые | watchOS | arm64, simulator (x64) |
| Десктоп | macOS | x64, arm64 |
| Десктоп | Windows | mingw x64 |
| Десктоп | Linux | x64, arm64, arm32 |
iOS является основной целевой платформой Kotlin/Native в контексте KMM. Компилятор создаёт iOS-фреймворк, содержащий весь общий код, который затем подключается к Xcode-проекту. Фреймворк поддерживает как статическую, так и динамическую компоновку. Kotlin/Native генерирует Objective-C-обёртки для Kotlin-классов и функций, обеспечивая прямую интеграцию с кодом на Swift и Objective-C.
Интеграция с iOS требует настройки Xcode для подключения сгенерированного фреймворка. Kotlin Multiplatform автоматизирует этот процесс с помощью embedAndSignAppleFrameworkForXcode задачи, которая запускается из Xcode Build Phases. Для отладки Kotlin/Native поддерживает брейкпоинты в коде общего модуля при запуске приложения на симуляторе iOS.
// Kotlin code compiled into iOS framework
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 с iOS-кодом работает в обе стороны. Kotlin/Native генерирует Objective-C-заголовки для Kotlin-классов, которые автоматически становятся доступны из Swift. Обратная связь обеспечивается с помощью аннотации @ObjCName для экспорта Kotlin-функций под указанным Objective-C-именем. Kotlin-коллекции автоматически конвертируются в NSArray и NSDictionary, а Kotlin-корутины оборачиваются в Combine publishers через библиотеку SKIE. Для работы с iOS-фреймворками из Kotlin используется cinterop — инструмент генерации Kotlin-привязок к Objective-C-заголовкам.
Для начала работы с Kotlin/Native требуется настройка build.gradle.kts с указанием Kotlin Multiplatform плагина и целевых платформ. Рассмотрим минимальную конфигурацию для KMM-проекта с поддержкой iOS и Android.
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")
}
}
}
После настройки сборки можно добавить платформенно-зависимый код. Kotlin/Native предоставляет доступ к iOS-функциям через Kotlin-обёртки. Например, получение UUID устройства на iOS требует вызова NSUUID из Foundation.
import platform.Foundation.NSUUID
fun getDeviceId(): String {
return NSUUID().UUIDString()
}
fun currentTimestampMillis(): Long {
return (platform.Foundation.NSDate().timeIntervalSince1970 * 1000).toLong()
}
Для генерации iOS-фреймворка используется Gradle-задача linkDebugFrameworkIosArm64 или linkReleaseFrameworkIosArm64 для продакшена. После сборки фреймворк располагается в build/bin/iosArm64/debugFramework/. Подключение к Xcode-проекту выполняется через Pods Podfile или добавлением фреймворка в раздел General → Frameworks, Libraries and Embedded Content.
// Build release framework for iOS arm64
./gradlew :shared:linkReleaseFrameworkIosArm64
// Build universal framework x86_64 + arm64
./gradlew :shared:linkReleaseFrameworkIosX64 \
:shared:linkReleaseFrameworkIosArm64
// Create XCFramework for App Store
./gradlew :shared:assembleReleaseXCFramework
Kotlin/Native и Kotlin/JVM различаются по архитектуре, производительности и области применения. Kotlin/JVM компилирует код в байт-код, выполняемый на JVM, что даёт доступ к огромной экосистеме Java-библиотек, но требует установленной виртуальной машины. Kotlin/Native генерирует исполняемый файл без внешних зависимостей, но с более ограниченной экосистемой библиотек.
Производительность стартового времени у Kotlin/Native выше, так как не требуется загрузка JVM. По данным бенчмарков JetBrains, приложение Hello World на Kotlin/Native запускается за 0.003 секунды, в то время как Kotlin/JVM требуется 0.5–1 секунда на загрузку виртуальной машины. Однако размер исполняемого файла Kotlin/Native может быть в 2–3 раза больше из-за включённого рантайма.
| Характеристика | Kotlin/Native | Kotlin/JVM |
|---|---|---|
| Целевые платформы | iOS, macOS, Windows, Linux, WebAssembly, embedded | Серверы, Android, десктоп (JVM) |
| Зависимости | Без рантайма (самодостаточный) | Требуется JVM (JDK/JRE) |
| Стартовое время | ~3 мс | ~500–1000 мс |
| Экосистема | Ограниченная (Kotlin + Interop) | Полная (Kotlin + Java + Android SDK) |
| Размер бинарника | ~1–5 МБ (с рантаймом) | ~100–500 КБ (JAR) |
Выбор между Kotlin/Native и Kotlin/JVM зависит от целевой платформы. Если проект нацелен на iOS или требует минимального потребления ресурсов, Kotlin/Native — единственный вариант. Для Android-разработки Kotlin/JVM остаётся стандартом, хотя Kotlin/Native используется для NDK-компонентов, где нужна нативная производительность. В мультиплатформенных проектах Kotlin Multiplatform комбинирует оба подхода: общий код компилируется через Kotlin/Native для iOS и через Kotlin/JVM для Android.
Часто задаваемые вопросы
Kotlin/Native компилирует код в нативный машинный код без виртуальной машины, а Kotlin/JVM — в байт-код, требующий установленной JVM. Kotlin/Native используется для iOS, встраиваемых систем и WebAssembly, Kotlin/JVM — для Android и серверов.
Да, Kotlin/Native можно использовать как самостоятельный компилятор для создания консольных приложений, нативных плагинов или библиотек для любой поддерживаемой платформы. KMM лишь упрощает организацию мультиплатформенного кода.
Memory Manager Kotlin/Native использует подсчёт ссылок с автоматическим циклическим детектором. Начиная с Kotlin 1.7.20, сборщик мусора не требует аннотаций @ThreadLocal и работает без остановки главного потока iOS.
Через cinterop доступны все iOS-фреймворки: Foundation, UIKit, CoreData, CoreBluetooth, MapKit и сотни других. JetBrains предоставляет готовые привязки для стандартных iOS-библиотек в составе Kotlin/Native.
Для отладки используется Xcode с подключённым Kotlin/Native фреймворком. Брейкпоинты в Kotlin-коде работают при запуске на симуляторе iOS. Для устройства требуется Debug-сборка и профиль разработчика Apple.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также