У цій статті ми розглянемо взаємозв’язок між операційною системою Android та Linux, порівняємо їх схожі риси та відмінності, а також відповімо на головне питання: “Android — це Linux?”.
Що таке Linux?
Коли хтось вимовляє слово “Linux”, він може мати на увазі:
Ядро Linux. Невелика, але суттєва частина операційної системи, яка відповідає за взаємодію з апаратним забезпеченням пристрою, обслуговування решти системи та виконання таких завдань, як управління процесором та пам’яттю пристрою. Ядро Linux, подібно будь-якому іншому ядру, може функціонувати лише як частина більшої операційної системи. Неможливо мати операційну систему, що складається виключно з ядра. Оскільки Android є повноцінною операційною системою, то в цьому контексті ми одразу можемо зробити висновок, що Android не є Linux.
Дистрибутив Linux. Це операційна система, яка містить ядро Linux та додаткове програмне забезпечення: різні утиліти, бібліотеки, оточення робочого столу, браузери, текстові редактори, музичні плеєри тощо. Навіть якщо це додаткове програмне забезпечення було розроблено спеціально для роботи разом із ядром Linux, воно не є частиною ядра Linux. При обговоренні операційних систем, що використовують ядро Linux, терміни “дистрибутив” та “операційна система” часто є взаємозамінні. Будь-хто може взяти ядро Linux, додати своє власне програмне забезпечення та створити повноцінну операційну систему. Нині існує величезна кількість різних дистрибутивів Linux.
GNU/Linux. Більшість дистрибутивів Linux є поєднанням ядра Linux і програмного забезпечення GNU, що змусило деяких людей стверджувати, що всі повинні називати дистрибутиви Linux терміном “GNU/Linux”.
Що таке Android?
Android — це проєкт, створений для задоволення потреб у мобільній операційній системі з відкритим вихідним кодом. Спочатку розробка велася компанією Android, Inc. Згодом проєкт перекупила компанія Google. Оскільки Android є операційною системою, то до її складу входить ядро, драйвери та програмне забезпечення простору користувача.
Хоча навколо терміна “Android” і близько немає такої плутанини, як у випадку з “Linux”, все ж таки існують два різновиди операційної системи Android:
Проєкт Android з відкритим вихідним кодом (скор. “AOSP” від англ. “Android Open Source Project”), в якому Google надає користувачам вихідний код Android. Хоча цей вихідний код дійсно можна використовувати для створення функціонуючої операційної системи, встановивши її на смартфон або планшет, ми не отримаємо того функціоналу, який більшість користувачів мають від свого поточного Android-пристрою; насамперед це стосується мобільних сервісів Google (скор. “GMS” від англ. “Google Mobile Services”).
AOSP зі значною кількості пропрієтарного коду (наприклад, GMS від Google або TouchWiz від Samsung). Операційна система Android, яка присутня на вашому смартфоні або планшеті, по суті є саме цим різновидом Android.
Більшість аргументів “за” або “проти” класифікації Android як Linux застосовуються до обох версій Android, але є кілька випадків, коли відповідь залежить від того, чи ви визначаєте Android як AOSP чи як операційну систему, яка поставляється з вашим смартфоном чи планшетом.
Android та ядро Linux
Насправді є лише один аргумент на користь класифікації Android як Linux: кожен смартфон або планшет з ОС Android містить ядро Linux. Ви навіть можете побачити, яка версія ядра встановлена на вашому пристрої, відкривши “Налаштування” та перейшовши до розділу “Система” > “Про телефон” > “Відомості про ПЗ”:

Однак Android — це не просто ядро Linux; це повністю функціональна операційна система, яка містить додаткові бібліотеки, графічний інтерфейс, додатки та багато іншого. Отже, варто уточнити наше питання: “Чи є Android дистрибутивом Linux?”.
Чому Android не є Linux?
Android не використовує стандартне ядро Linux
Щоб створити операційну систему, що відповідає унікальним потребам мобільних пристроїв, команда Android внесла ряд змін в ядро Linux, включно з доданням спеціалізованих бібліотек, API та утиліт, які здебільшого є похідними від операційних систем сімейства BSD або написані з нуля спеціально для Android.
Ядро Linux випущено під ліцензією GNU GPL v2.0, тому будь-хто може вільно змінювати його вихідний код, що й успішно робиться при створенні дистрибутивів Linux. Коли справа доходить до питання про те, наскільки радикально Android змінила ядро Linux, Embedded Linux wiki приходить до висновку, що кількість змін, внесених командою Android, “не дуже велика і відповідає порядку змін, які зазвичай вносяться в ядро Linux розробниками ПЗ для вбудованих систем”.
Android не містить ПЗ та бібліотек GNU
Якщо ви згодні з тим, що програмне забезпечення GNU є визначальною характеристикою дистрибутиву Linux настільки, що ми всі повинні називати дистрибутиви Linux терміном “GNU/Linux”, то Android жодним чином не може бути дистрибутивом Linux. Android включає дуже мало програмного забезпечення GNU. Зокрема, команда Android, замість використання бібліотеки GNU C (glibc), розробила кастомну бібліотеку під назвою Bionic.
Навіть якщо ви не погоджуєтесь з тим, що дистрибутив Linux повинен включати програмне забезпечення GNU, все одно не можна заперечувати той факт, що відсутність GNU сильно відрізняє Android від більшості дистрибутивів Linux.
Ви не можете запускати програми Linux на Android та навпаки
Якщо навмання вибрати декілька дистрибутивів Linux, то, швидше за все, єдиним загальним програмним компонентом у них буде ядро Linux. По факту, Android має так мало спільного з іншими дистрибутивами Linux, що на ньому неможливо запускати звичайні програми Linux.
Правильним є зворотне твердження: для додатків Android потрібні бібліотеки Android, спеціалізоване оточення, а також ряд інших програм, які доступні тільки в Android, тому за замовчуванням ви не можете запускати Android-програми на платформі, відмінній від Android.
Операційні системи на базі Android для запуску програм використовують спеціальну віртуальну машину, відому як Dalvik. Програми для Android пишуться мовою програмування Java (або іншою підтримуваною платформою Android) і компілюються в спеціальний проміжний байт-код, призначений для виконання в Dalvik. Сама ж віртуальна машина Dalvik оптимізована для максимально ефективної роботи на мобільних пристроях, які зазвичай оснащені повільними процесорами.
На відміну від Android, Linux не містить віртуальної машини Dalvik і тому не може запускати програми для Android. Віртуальну машину Dalvik та інше програмне забезпечення Android не можна просто перенести в систему Linux — доведеться зробити велику роботу, щоб програми Android виводилися у вікно на стандартному робочому столі Linux.
Примітка: BlueStacks та інші емулятори програм для Android намагаються зробити це для Windows та macOS. Вони запускають Android на віртуальній машині, що дозволяє запускати додатки для Android (зі зниженням продуктивності) на робочому столі. Однак ці рішення виявилися не дуже популярними.
Android — це продукт Google
Google може зробити вихідний код базової системи Android загальнодоступним через AOSP, але наступний реліз AOSP розробляється в приватному порядку. Фактично, на сайті AOSP чітко зазначено, що “Google зберігає відповідальність за стратегічний напрямок Android як платформи та продукту”.
Крім того, хоча розробники, які не є співробітниками Google, можуть робити свій внесок в AOSP в різних обсягах, офіційний сайт AOSP чітко вказує, що керівники проєктів, як правило, є співробітниками Google. Ще один нюанс полягає в тому, що Google має права на назву та логотип Android, тому, навіть якщо ви створите операційну систему на основі коду AOSP, вам доведеться зв’язатися з Google, якщо ви захочете опублікувати свою роботу, включивши в її назву слово “Android”.
У той час як деякі дистрибутиви Linux дійсно мають тісні зв’язки з певними компаніями (наприклад, Canonical та Ubuntu або Red Hat та Fedora), для більшості дистрибутивів Linux незвично, коли розробка ведеться приватно лише однією організацією.
Дебати щодо статусу Android як “ОС з відкритим вихідним кодом”
Попри рекомендації Фонду вільного програмного забезпечення (скор. “FSF” від англ. “Free Software Foundation”) розробникам видалити все не вільно поширюване програмне забезпечення зі своїх дистрибутивів Linux, не має суворого правила, згідно з яким дистрибутивам Linux заборонено містити такого роду (пропрієтарне) ПЗ. Насправді багато дистрибутивів включають скомпільовані вендором двійкові файли драйверів, також відомі як BLOB-об’єкти, тому виникає питання: “Наскільки відкритий Android у порівнянні з “типовим” дистрибутивом Linux?”.
Хоча багато шанувальників ПЗ з відкритим вихідним кодом погодилися б з тим, що AOSP далекий від ідеального проєкту з відкритим вихідним кодом, його код знаходиться у вільному доступі для внесення іншими розробниками змін та поширення.
Однак перш ніж базова версія AOSP стане повноцінним Android, до неї додасться велика кількість пропрієтарного коду, і це незалежно від того, чи вибираєте ви пристрій з “чистим Android” (Nexus або Pixel) чи пристрій з модифікаціями від виробника.
Хоч багато дистрибутивів Linux містять власний код, термін “Linux” тісно пов’язаний з програмним забезпеченням з відкритим вихідним кодом, а весь пропрієтарний код користувацької частини Android перетворює цю ОС на більш закриту систему, ніж “типовий” дистрибутив Linux.
Відсутність можливості кастомізації Android
Хоча, як правило, досить легко змінити дистрибутив Linux на рівні операційної системи, за замовчуванням власники Android не можуть отримати доступ до базової операційної системи на своєму смартфоні або планшеті, а чутливі розділи ОС надійно заблоковані.
Короткий екскурс до операційних систем
Операційні системи дозволяють взаємодіяти з апаратною частиною комп’ютера за допомогою прикладного програмного забезпечення.
Основні функції типової сучасної операційної системи:
Керування пам’яттю та контроль її використання додатками.
Керування використанням обчислювальної потужності додатками.
Керування файловими системами та жорсткими дисками (HDD та SSD).
Надання інтерфейсу для створення драйверів пристроїв (щоб мати можливість додавати в систему нове обладнання).
Надання графічного інтерфейсу для взаємодії з програмним забезпеченням.
Робота служб, які запускають такі програми, як: HTTP-сервери, FTP-сервери, SSH-сервери тощо.
Для виконання вищезазначених функцій в операційній системі зазвичай виділяють такі основні частини:
Ядро — складається з планувальника, менеджера ресурсів та попередньо завантажених драйверів обладнання.
Шар апаратних абстракцій (скор. “HAL” від англ. “Hardware Abstraction Layer”) — шар абстрагування, реалізований у програмному забезпеченні, що дозволяє взаємодіяти з інструкціями високорівневих мов програмування з апаратним забезпеченням.
Графічний інтерфейс користувача (скор. “GUI” від англ. “Graphical User Interface”) — система засобів, що дозволяє користувачу взаємодіяти з програмним та апаратним забезпеченням комп’ютера.
Утиліти, бібліотеки та фреймворки, які спільно використовуються всіма службами та програмами.
Служби та додатки кінцевих користувачів.
Перераховані вище частини можна умовно розділити на дві області, в яких вони працюють:
Простір користувача (або “користувацький простір”) — частини оперативної пам’яті, що витісняються. В них працюють звичайні програми, бібліотеки, служби та програми кінцевих користувачів.
Простір ядра — це область оперативної пам’яті з підвищеними привілеями, в якій розміщені драйвери ядра та апаратних пристроїв. Звичайним програмам та додаткам доступ до цієї області пам’яті заборонено.
Примітка: Графічний інтерфейс користувача, залежно від архітектури операційної системи, може належати або простору користувача (як у Linux), або простору ядра (як у Windows).
Відмінності між Android та Linux
Розглянемо загальні відмінності між Android та Linux:
| Android | Linux | |
| Тип ПЗ | Операційна система. | Ядро. |
| Канал передавання даних | Оптимізовано під мобільні мережі. | Оптимізовано під Ethernet та Wi-Fi. |
| Причини створення | Зробити мобільні пристрої “розумними”, конкуренція з iOS. | Дослідницькі цілі в області розробки ПЗ, а також бажання створити вільне програмне забезпечення з відкритим вихідним кодом. |
| Спосіб монетизації | Просування продуктів Google, щомісячна оплата сервісів та винагороди з комісії від продажу додатків/фільмів/книг та іншого в Google Play. | Більшість дистрибутивів підтримуються спільнотою та некомерційними організаціями. Основним джерелом прибутку комерційних організацій є платна технічна підтримка для корпоративних клієнтів. |
| Тип ліцензії | Apache License. | GNU GPL v2.0. |
| Основний тип пристроїв | Смартфони, планшети. | Персональні комп’ютери та сервери. |
| Простота використання | Простий у використанні. | Складність варіюється в залежності від вибраного дистрибутиву. Але варто відзначити, що початкова складність у рази більша за складність використання Android. |
| Розробник та підтримка | Google. | Комерційні та некомерційні компанії та організації, спільноти розробників-ентузіастів по всьому світу. |
Тепер розглянемо технічні відмінності між Android та Linux:
| Android | Linux | |
| Архітектура процесора | ARM. | x86 та x64. |
| Простір користувача | Android Runtime (модифікований Java Runtime Environment) та бібліотеки Core. | Переважно GNU та X Window System. |
| Оптимізація ядра | Оптимізовано на знижене споживання енергії. | Баланс між продуктивністю та енергоспоживанням. |
| Доступ до термінала (shell) | Зазвичай заблокований, необхідно отримати доступ до root, щоб мати можливість взаємодіяти з терміналом. | Доступ “з коробки”, оскільки термінал є надзвичайно важливою частиною Linux-дистрибутивів. |
| Основа GUI | Google SurfaceFlinger поверх OpenGL. | Більшість дистрибутивів використовують GUI на основі X Window System. |
| Основні архітектурні елементи | Тільки ядро, HAL і відмінний від GNU простір користувача та власне оточення робочого столу. | Ядро, HAL, простір користувача GNU (додатки) та шар інтерфейсу користувача (оточення робочого столу). |
| Драйвери обладнання | Майже всі драйвери є пропрієтарними. | Більшість драйверів постачаються з відкритим вихідним кодом. |
| Завантажувач | Простий завантажувач, який виконує необхідний мінімум і передає керування ядру. | Стандартизовані завантажувачі, подібно до GRUB2, з можливістю кастомізації. |
| BIOS/EFI | Відсутня на пристроях ARM. | Стандарт для всіх материнських плат x86/x64. |
| Бібліотека C | Полегшений варіант стандартної бібліотеки — Bionic. | Бібліотека GNU C (glibc). |
Висновки
Отже, повертаючись до нашого питання: “Чи є Android дистрибутивом Linux?”. Зрештою, все залежить від того, що ви вкладаєте в це поняття. Якщо ви згодні з тим, що ми всі повинні називати дистрибутиви Linux терміном “GNU/Linux”, а не “Linux”, то відповідь негативна, оскільки Android включає дуже мало програмного забезпечення GNU.
Якщо ви визначаєте “дистрибутив Linux” як операційну систему, що включає ядро Linux і задовольняє одному або декільком додатковим критеріям, то знову ж таки відповідь, швидше за все, буде негативною. Хоча кожен смартфон і планшет на базі Android включає ядро Linux, ОС Android повністю не відповідає жодній з інших характеристик, які зазвичай асоціюються з дистрибутивами Linux. Наприклад, Android явно є продуктом однієї компанії, він несумісний зі звичайними додатками Linux, і, хоча вихідні коди AOSP є відкритими, версія Android, яка встановлена на комерційних пристроях, здається значно закритішою, ніж можна було б очікувати від дистрибутиву Linux, завдяки включенню великої кількості пропрієтарного коду.
Однак, якщо для вас дистрибутив Linux — це операційна система, яка базується на ядрі Linux, то Android є дистрибутивом Linux. Це може бути незвичайний, вузькоспеціалізований дистрибутив, але це такий же дистрибутив, як Ubuntu, Fedora, Debian та будь-яка інша операційна система, яка базується на ядрі Linux.

Дякую за таку потужну статтю на тему порівняння сучасних Linux дистрибутивів та Android