Ядро Android написано на языке C с небольшими вставками ассемблера для архитектурно-зависимого кода — это прямое следствие того, что в основе системы лежит ядро Linux. Никаких Java, Kotlin или C++ в самом ядре нет: эти языки относятся к более высоким уровням платформы. Понимание этого разделения важно, если вы изучаете устройство Android, планируете собирать кастомное ядро или просто хотите разобраться, как устроена система на вашем смартфоне.
Путаница возникает из-за того, что словом «Android» называют сразу несколько вещей: ядро, системные библиотеки, среду выполнения приложений и сами приложения. Каждый слой написан на своём стеке технологий, и ниже мы разберём их по отдельности — от ассемблерных вставок в загрузчике до Kotlin в пользовательских программах.
Ядро Linux как фундамент Android
Android не создавался с нуля — Google взяла за основу ядро Linux и адаптировала его под мобильные устройства. Изначально Android использовал сильно модифицированную версию Linux, а позже Google перешёл к модели Android Common Kernels (ACK), где изменения стараются синхронизировать с основной веткой Linux.
Ядро отвечает за самые низкоуровневые задачи: управление процессами и памятью, работу с драйверами устройств, файловыми системами и сетевым стеком. Именно поэтому выбор языка здесь был предопределён — Linux исторически написан на C, и переписывать миллионы строк кода на другой язык никто не собирался.
- 📱 Управление процессами и планировщик задач
- 🔋 Управление питанием и энергосбережение
- 💾 Работа с памятью и файловыми системами
- 🔌 Драйверы оборудования: дисплей, камера, модем
- 🌐 Сетевой стек: Wi-Fi, Bluetooth, мобильная связь
Почему именно C и ассемблер
Язык C стал стандартом для операционных систем ещё в 1970-е годы, и причины этого актуальны до сих пор. Он даёт прямой доступ к памяти и аппаратным регистрам, компилируется в очень эффективный машинный код и при этом остаётся переносимым между архитектурами — от ARM до x86.
Ассемблер в ядре занимает крошечную долю кода, но без него не обойтись. На нём пишутся участки, которые невозможно выразить на C: самая первая стадия загрузки процессора, переключение контекста между процессами, обработчики прерываний и работа с особыми инструкциями процессора. Для каждой поддерживаемой архитектуры существует свой набор таких вставок.
⚠️ Внимание: не путайте язык ядра с языком приложений. То, что приложения для Android пишут на Java или Kotlin, никак не означает, что само ядро системы написано на этих языках — это разные уровни платформы.
Стоит отметить, что в последние годы в ядре Linux появилась экспериментальная поддержка языка Rust, и Google активно участвует в этом направлении. Однако на момент написания статьи основная масса кода ядра Android по-прежнему остаётся C-кодом; Rust рассматривается как способ безопаснее писать новые драйверы и модули.
Чем Android-ядро отличается от обычного Linux
Хотя база общая, Google добавила в ядро ряд специфических компонентов, которых нет в «десктопном» Linux. Эти патчи нужны для мобильных сценариев: агрессивного энергосбережения, быстрого обмена данными между процессами и изоляции приложений.
| Компонент | Назначение | Язык реализации |
|---|---|---|
| Binder | Межпроцессное взаимодействие (IPC) | C |
| Low Memory Killer | Завершение фоновых процессов при нехватке ОЗУ | C |
| ASHMEM | Разделяемая память между процессами | C |
| Wakelocks | Управление режимами сна процессора | C |
| Logger | Системный журнал (logcat на уровне ядра) | C |
Ключевой среди них — Binder: практически всё взаимодействие приложений с системой (запуск активностей, доступ к сервисам, передача данных) идёт через этот драйвер. Без него архитектура Android в привычном виде просто не работала бы.
Что такое GKI
Начиная с Android 11, Google внедряет модель Generic Kernel Image (GKI) — единое универсальное ядро для всех устройств, к которому производители подключают свои драйверы как модули. Это упрощает обновления безопасности и уменьшает фрагментацию ядер между устройствами.
Остальные слои платформы: HAL, библиотеки, рантайм
Над ядром располагаются слои, где набор языков заметно шире. Здесь уже встречаются C++, Java и Kotlin, и именно они формируют большую часть того, что пользователь называет «андроидом».
- ⚙️ HAL (Hardware Abstraction Layer) — прослойка между ядром и системой, пишется на C/C++
- 📚 Нативные библиотеки (OpenGL, SQLite, SSL) — C и C++
- ☕ Android Runtime (ART) — среда выполнения приложений, ядро рантайма написано на C++
- 🧩 Системный фреймворк и приложения — Java и Kotlin
Таким образом, если вы откроете исходный код AOSP (Android Open Source Project), то увидите смесь языков: C доминирует в ядре, C++ — в системных службах и рантайме, а Java и Kotlin — в фреймворке и приложениях. Ядро — единственный крупный слой, где Java и Kotlin отсутствуют полностью.
Как проверить версию ядра на своём устройстве
Посмотреть, какое именно ядро используется на вашем смартфоне, можно прямо в настройках. Откройте Настройки → О телефоне и найдите строку Версия ядра — там будет указана версия Linux и дата сборки. Точное расположение пункта зависит от оболочки производителя, поэтому при необходимости сверьтесь с документацией вашей модели.
Если на устройстве включён режим разработчика и установлен терминал, версию можно узнать командой:
uname -a
Эта команда покажет версию ядра, архитектуру процессора и строку сборки. Учтите, что версия ядра не совпадает с версией Android: например, устройства на разных версиях системы могут использовать одно и то же базовое ядро Linux, и наоборот.
☑️ Что можно узнать о ядре своего устройства
⚠️ Внимание: установка сторонних (кастомных) ядер требует разблокированного загрузчика и рут-доступа, а ошибка при прошивке способна вывести устройство из строя. Если у вас нет опыта таких операций, ограничьтесь просмотром информации о ядре — это полностью безопасно.
Сборка ядра Android из исходников
Исходный код ядра Android открыт: производители обязаны публиковать его по условиям лицензии GPL, под которой распространяется Linux. Google размещает общие ветки в репозиториях AOSP, а вендоры вроде Samsung или Xiaomi выкладывают код для своих моделей на собственных порталах.
Для сборки потребуется компьютер на Linux, кросс-компилятор под нужную архитектуру (обычно AArch64 для современных смартфонов) и конфигурация ядра конкретного устройства. Процесс напоминает сборку обычного Linux-ядра, но с Android-специфичными патчами и defconfig-файлами. Это задача для опытных пользователей: неправильная конфигурация приведёт к нерабочему образу.
Часто задаваемые вопросы
Ядро Android написано на Java?
Нет. Ядро написано на C с ассемблерными вставками, поскольку основано на Linux. Java и Kotlin используются только на уровне фреймворка и приложений, которые работают поверх ядра.
Чем ядро Android отличается от ядра обычного Linux?
Android-ядро содержит дополнительные компоненты: Binder для межпроцессного взаимодействия, механизмы энергосбережения (wakelocks), Low Memory Killer и другие патчи, нужные для мобильных устройств. Базовая часть при этом общая с Linux.
Можно ли обновить ядро на смартфоне отдельно от системы?
На устройствах с поддержкой GKI обновления безопасности ядра могут приходить через системные обновления производителя. Самостоятельная замена ядра возможна только с разблокированным загрузчиком и связана с риском повредить устройство.
Почему для ядра не выбрали C++ или другой язык?
Ядро Linux исторически написано на C: этот язык даёт предсказуемый низкоуровневый контроль над памятью и оборудованием без накладных расходов. Переписывание миллионов строк проверенного кода на другой язык неоправданно сложно и рискованно.
Правда ли, что в ядро добавляют Rust?
Да, в ядре Linux ведётся работа по поддержке Rust для написания новых драйверов, и Google участвует в этой инициативе. Однако основная масса кода ядра остаётся на C, и полной замены языка в обозримой перспективе не ожидается.