На чем написано ядро Android: языки, архитектура и особенности

Ядро 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 отсутствуют полностью.

📊 Какой аспект устройства Android вам интереснее всего?
Ядро и драйверы
Системные библиотеки и HAL
Среда выполнения ART
Разработка приложений

Как проверить версию ядра на своём устройстве

Посмотреть, какое именно ядро используется на вашем смартфоне, можно прямо в настройках. Откройте Настройки → О телефоне и найдите строку Версия ядра — там будет указана версия Linux и дата сборки. Точное расположение пункта зависит от оболочки производителя, поэтому при необходимости сверьтесь с документацией вашей модели.

Если на устройстве включён режим разработчика и установлен терминал, версию можно узнать командой:

uname -a

Эта команда покажет версию ядра, архитектуру процессора и строку сборки. Учтите, что версия ядра не совпадает с версией Android: например, устройства на разных версиях системы могут использовать одно и то же базовое ядро Linux, и наоборот.

☑️ Что можно узнать о ядре своего устройства

Выполнено: 0 / 4
⚠️ Внимание: установка сторонних (кастомных) ядер требует разблокированного загрузчика и рут-доступа, а ошибка при прошивке способна вывести устройство из строя. Если у вас нет опыта таких операций, ограничьтесь просмотром информации о ядре — это полностью безопасно.

Сборка ядра 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, и полной замены языка в обозримой перспективе не ожидается.