← Назад к вопросам

Что осталось от линукса в Android

2.2 Middle🔥 61 комментариев
#JVM и память#Архитектура и паттерны#Производительность и оптимизация

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Остатки Linux в современном Android

Несмотря на значительную эволюцию и кастомизацию, Android по-прежнему глубоко укоренён в ядре Linux. Можно сказать, что "от Linux" остался фундамент, но надстроена уникальная экосистема, адаптированная под мобильные устройства с их специфическими требованиями к безопасности, производительности и энергоэффективности.

1. Ядро Linux (Android Kernel Fork)

Это сердце системы, и оно напрямую происходит из upstream-ядра Linux. Google поддерживает долгоживущие ветки (Long Term Supported - LTS), внося тысячи патчей для мобильных устройств.

  • Что осталось: Процессное планирование, управление памятью, драйверная модель, поддержка сетевых протоколов, базовые механизмы безопасности (например, SELinux, который является стандартом для Linux).
  • Что добавлено: Ключевые компоненты, специфичные для Android:
    *   **WakeLocks:** Механизм предотвращения перехода устройства в спящий режим, когда это необходимо приложению.
    *   **Binder (IPC):** Высокооптимизированный механизм межпроцессного взаимодействия, который является центральной нервной системой Android, связывающей системные сервисы и приложения.
    *   **ashmem (Anonymous Shared Memory):** Управление общей памятью, оптимизированное для Android.
    *   **Low Memory Killer (LMK):** Более агрессивный, чем стандартный OOM-killer в Linux, он заранее выгружает неактивные процессы для предотвращения нехватки памяти.

// Пример очень упрощённой структуры драйвера Binder в ядре
static const struct file_operations binder_fops = {
    .owner = THIS_MODULE,
    .poll = binder_poll,
    .unlocked_ioctl = binder_ioctl,
    .mmap = binder_mmap,
    .open = binder_open,
    .flush = binder_flush,
    .release = binder_release,
};

2. Базовая пользовательская среда и утилиты (но сильно урезанная)

Android использует минималистичный набор инструментов, часто отличный от стандартного GNU.

  • Что осталось: Некоторые основные команды (ls, ps, top, ifconfig, netstat, dmesg) доступны через ADB Shell или терминальные приложения. Однако это, как правило, реализации из проекта Toybox или BusyBox, а не полные GNU-утилиты.
  • Что отсутствует: Полноценная среда GNU (библиотека glibc заменена на Bionic C Library), стандартные системные демоны, инструменты разработки (gcc, make), пакетный менеджер (типа apt или yum).

3. Файловая система и структура каталогов

Здесь прослеживается сходство, но с критическими отличиями.

  • Что осталось: Иерархия каталогов Unix (/system, /proc, /sys, /dev, /data). Процессы и устройства представлены как файлы.
  • Что изменено кардинально:
    *   **Нет единого корня для пользователя:** Приложения работают в **песочницах (sandbox)**, каждое имеет свой изолированный каталог внутри `/data/data/` (или `/data/user/` для многопользовательского режима). Это достигается через **namespaces** и **mount namespaces** — технологии, также пришедшие из Linux.
    *   **Роли разделов:** `/system` — только для чтения (образ системы), `/data` — пользовательские данные, `/vendor` — специфичные для производителя компоненты.
    *   **Разграничение прав:** Жёсткая модель прав на основе **SELinux**, где каждому приложению и системному компоненту присваивается строгий контекст безопасности.

4. Модель безопасности: от пользователей Linux к изоляции приложений

Это одна из самых больших трансформаций.

  • В Linux: Многопользовательская система, где каждый пользователь (UID/GID) имеет права на файлы и процессы.
  • В Android: Каждое установленное приложение получает уникальный Linux-идентификатор пользователя (UID) на этапе установки. Таким образом, изоляция на уровне ядра гарантирует, что приложение не может получить доступ к файлам или процессам другого приложения без явного разрешения. Это фундамент песочницы.
# Пример вывода `ps` в Android. Видно, что каждому приложению присвоен свой UID.
USER      PID   PPID  NAME
u0_a101   1234  567   com.example.myapp    # UID: 101000 + id приложения (101)
u0_a102   1235  567   com.example.otherapp # UID: 101000 + id приложения (102)
system    987   1     system_server

5. Стандартные POSIX-вызовы и библиотека Bionic

Android предоставляет среду для нативного кода (C/C++), совместимую на уровне системных вызовов (syscalls) с Linux.

  • Что осталось: Программы могут использовать open(), read(), write(), pthread_create(), socket() и т.д.
  • Что изменено: Стандартная библиотека C — это Bionic, написанная Google для Android. Она легче и быстрее glibc, оптимизирована для работы с медленными flash-накопителями, но имеет неполную POSIX-совместимость.

Заключение

Говорить, что в Android "осталось что-то от Linux", — значит недооценивать глубину связи. Android — это не "линукс-дистрибутив", а специализированная операционная система, использующая модифицированное ядро Linux в качестве своего фундамента. От "классического" Linux-десктопа сохранились:

  1. Ядро (сильно дополненное).
  2. Базовая процессная модель и изоляция через UID (переосмысленная для приложений).
  3. Принцип "всё есть файл" и иерархия ФС (с наложенной моделью песочницы).
  4. Интерфейс системных вызовов для нативного кода.

Вся верхнеуровневая экосистема — ART/Dalvik, фреймворк приложений, системные сервисы (System Server), интенты и Binder IPC — это уникальная надстройка Google, которая и определяет лицо Android, делая его отличным как от desktop Linux, так и от других встраиваемых систем на том же ядре. Linux в Android — это мощный, надёжный и гибкий двигатель, на который установлен совершенно уникальный кузов и салон.