Является ли Андроид Линуксом? | автор: Luca | 25 февраля 2011
Категория: GNU/Linux, Google
Является ли Андроид Линуксом? Если да, то в какой мере, а если нет, то почему? Найти ответ на этот одновременно простой и сложный вопрос — одна из целей этой статьи.
Прежде чем делать хоть какие-то выводы, давайте подготовим основу для споров и обсуждения: дадим определения терминов, опишем критерии оценки и опишем текущую ситуацию.
Во первых, что такое Android? Android – это операционная система главным образом для мобильных устройств.
Далее, что такое linux? Одни сразу скажут, что это ядро linux (linux Kernel) и представят надпись, наподобие этой: “linux 2.6.31-14-server”. Другие сразу вспомнят про названия дистрибутивов: Ubuntu, Gentoo, CentOS и т.д., т.е. то, что называют операционной системой.
Секрет в том, что просто слово linux понимается в зависимости от контекста, в котором оно задано. Более конкретные понятия — это linux Kernel (ядро linux) и linux OS (операционная система linux) и по сути они описывают разные вещи.
Что такое linux Kernel? Это компонент операционной системы, который выполняет такие важные функции, как управление памятью, процессами, обеспечение взаимодействия между процессами, доступ к устройствам. Все это происходит на низком уровне, и про уровни еще будет сказано дальше.
Зададим первый вопрос: является ли Android ядром linux? Ответом должно быть что-то, наподобие «Нельзя сравнивать теплое с мягким» или «Как можно сравнивать ядро и операционную систему, это вещи разного порядка».
Использует ли Android ядро linux? Полагаю, что подавляющее большинство людей согласится, что да. Доработанная версия ядра linux является частью операционной системы Android. Доработки касаются в т.ч. управления питанием, безопасности и прочей оптимизации. В конце концов, разработчики Android дорабатывают ядро под свои нужды уже долгое время, а значит должен быть заметен результат. С этой стороны вопрос можно считать закрытым.
Что же такое операционная система вообще и linux OS в частности?
Операционная система — это программное обеспечение, состоящая из программ и данных, которое управляет аппаратными ресурсами и предоставляет основные службы для эффективного исполнения различного прикладного программного обеспечения. Операционная система состоит из ядра (kernel) и совокупности приложений и библиотек (userland), которые используются для взаимодействия с ядром.
Самое время упомянуть уровни и абстракции
История началась, как минимум в 1968 году, когда было опубликовано письмо Эдсгера Дейкстры (1930-2002) о структурном программировании. С тех пор, структура и архитектура являются краеугольным камнем в проектировании информационных систем. Современные системы выглядят, как слоеный пирог. Каждый уровень пирога определяет уровень абстракции (инкапсуляции), который пытается накрыть собой все предшествующие уровни и выступает связкой между нижележащими и вышележащими уровнями, возможно, внося дополнительный функционал.
Построение архитектуры имеет несколько целей. Во первых, упрощается поддержка системы за счет уменьшения взаимосвязей между компонентами. Во вторых, оставив тонкую прослойку для взаимодействия компонент, компоненты можно разрабатывать независимо и разными разработчиками, что очень важно в современном ПО, т.к. сейчас системой, требующей для разработки 10000 человеко-часов никого не удивишь. В третьих, это также защита инвестиций. Наибольшую ценность всегда представляет самый верхний слой, решающий бизнес-задачи. И его пытаются сделать таким, что бы минимизировать переделки при переносе с одного столба слоев на другой. Замечу, что слои не ограничиваются только слоями операционной системы, внутри прикладной программы также существуют слои, которые пытаются скрыть нижележащие слои.
Таким образом, абстракции вовсю царствуют в современных компьютерных (да и не только в компьютерных) системах.
Userland в linux OS
Мысли о том, что пора навести порядок с userland в linux зародились уже достаточно давно и в 2001 году вылились в первую версию linux Standard Base. На текущий момент существует набор спецификаций ISO/IEC 23360-*, а также версия LSB 4.0, вышедшая 11 ноября 2008 г.
Цель LSB — разработать и продвигать набор стандартов, который увеличит совместимость различных дистрибутивов linux и даст возможность запускать приложения на любой совместимой системе. LSB, например, специфицирует такие вещи, как стандартные библиотеки, команды и утилиты, дерево файловой системы (file system hierarchy), уровни выполнения (runlevels) и т.д.
В этом месте можно уверенно сказать, что Android не удовлетворяет LSB, причем по самым ключевым параметрам. Например, в качестве стандартной библиотеки clib используется реализация Bionic
Основной целью использования Bionic в Android являются:
1. Лицензионные ограничения, из-за которых требуется отделить прикладные программы от GPL. Bionic использует лицензию BSD.
2. Меньший размер для оптимизации использования памяти. Bionic требует около 200 кб, что в два раза меньше, чем e glibc.
3. Оптимизация по скорости выполнения: меньший размер кода, более короткие пути исполнения, очень быстрая и компактная реализация pthread.
4. В Bionic встроена поддержка Andoid-специфичных служб, таких как системные свойства (Properties) и протоколирование. Bionic не поддерживает некоторые функции POSIX, например исключения C++ и двухбайтовые символы, т.к. они в Android на этом уровне не нужны, а обеспечиваются уровнем выше.
Архитектура Android и классического linux
Как известно, в Android сделана ставка на использование языка Java и виртуальной машины, а все прикладные программы должны разрабатываться с учетом этой особенности. Предпосылками для этого являются: Java стала распространенным, проверенным, популярным, простым в использовании языком с очень развитой экосистемой (начиная от средств разработки и библиотек, и кончая развитыми средствами сборки типа maven), достаточно быстрые процессоры и большие объемы оперативной памяти.
Соответственно, над linux Kernel, clib и другими библиотеками, виртуальной машиной выстраивается еще один уровень абстракции, который играет ключевую роль при разработке для Android: Application Framework. Он является именно той прослойкой, которая отделяет прикладные программы от нижнего уровня операционной системы и берет обеспечение всех необходимых функций на себя. Иными словами, программист, разрабатывающий на Android не видит и не чувствует, что происходит на низком уровне. Если в один прекрасный момент в Android OS поменяют linux Kernel и clib на что-то другое, никто ничего и не заметит. NDK — средство запуска процессорного кода, существующий в Android, создан для конкретных целей: самодостаточного кода, требующего максимальной производительности. Простой пример — перемножение матриц.
В linux OS прикладные приложения также отделены от низкого уровня системы набором библиотек, а использование linux-специфичных функций полностью на совести разработчика. Именно поэтому, например, MTA Postfix существует не только под linux, но и, например, для FreeBSD.
Стратегия разработки ПО заключается в том, чтобы критичный, системозависимый код загнать в угол и не выпускать оттуда.
Итого, можно сделать вывод, что linux OS и Android имеют заметные различия в userland и в концепции построения и работы приложений, именно поэтому в самом Google явно говорят, что «Android is not linux»
В заключение
При разработке ПО становится нормой рассуждать не в терминах операционных систем, а в терминах платформ и фреймворков. Java, Qt, JavaEE, Django, Symfony и т.п., которые обеспечивают необходимый уровень абстракции.
источник
Прочитано 9513 раз и оставлено 260 комментариев.
Является ли Андроид Линуксом? Если да, то в какой мере, а если нет, то почему? Найти ответ на этот одновременно простой и сложный вопрос — одна из целей этой статьи.
Прежде чем делать хоть какие-то выводы, давайте подготовим основу для споров и обсуждения: дадим определения терминов, опишем критерии оценки и опишем текущую ситуацию.
Во первых, что такое Android? Android – это операционная система главным образом для мобильных устройств.
Далее, что такое linux? Одни сразу скажут, что это ядро linux (linux Kernel) и представят надпись, наподобие этой: “linux 2.6.31-14-server”. Другие сразу вспомнят про названия дистрибутивов: Ubuntu, Gentoo, CentOS и т.д., т.е. то, что называют операционной системой.
Секрет в том, что просто слово linux понимается в зависимости от контекста, в котором оно задано. Более конкретные понятия — это linux Kernel (ядро linux) и linux OS (операционная система linux) и по сути они описывают разные вещи.
Что такое linux Kernel? Это компонент операционной системы, который выполняет такие важные функции, как управление памятью, процессами, обеспечение взаимодействия между процессами, доступ к устройствам. Все это происходит на низком уровне, и про уровни еще будет сказано дальше.
Зададим первый вопрос: является ли Android ядром linux? Ответом должно быть что-то, наподобие «Нельзя сравнивать теплое с мягким» или «Как можно сравнивать ядро и операционную систему, это вещи разного порядка».
Использует ли Android ядро linux? Полагаю, что подавляющее большинство людей согласится, что да. Доработанная версия ядра linux является частью операционной системы Android. Доработки касаются в т.ч. управления питанием, безопасности и прочей оптимизации. В конце концов, разработчики Android дорабатывают ядро под свои нужды уже долгое время, а значит должен быть заметен результат. С этой стороны вопрос можно считать закрытым.
Что же такое операционная система вообще и linux OS в частности?
Операционная система — это программное обеспечение, состоящая из программ и данных, которое управляет аппаратными ресурсами и предоставляет основные службы для эффективного исполнения различного прикладного программного обеспечения. Операционная система состоит из ядра (kernel) и совокупности приложений и библиотек (userland), которые используются для взаимодействия с ядром.
Самое время упомянуть уровни и абстракции
История началась, как минимум в 1968 году, когда было опубликовано письмо Эдсгера Дейкстры (1930-2002) о структурном программировании. С тех пор, структура и архитектура являются краеугольным камнем в проектировании информационных систем. Современные системы выглядят, как слоеный пирог. Каждый уровень пирога определяет уровень абстракции (инкапсуляции), который пытается накрыть собой все предшествующие уровни и выступает связкой между нижележащими и вышележащими уровнями, возможно, внося дополнительный функционал.
Построение архитектуры имеет несколько целей. Во первых, упрощается поддержка системы за счет уменьшения взаимосвязей между компонентами. Во вторых, оставив тонкую прослойку для взаимодействия компонент, компоненты можно разрабатывать независимо и разными разработчиками, что очень важно в современном ПО, т.к. сейчас системой, требующей для разработки 10000 человеко-часов никого не удивишь. В третьих, это также защита инвестиций. Наибольшую ценность всегда представляет самый верхний слой, решающий бизнес-задачи. И его пытаются сделать таким, что бы минимизировать переделки при переносе с одного столба слоев на другой. Замечу, что слои не ограничиваются только слоями операционной системы, внутри прикладной программы также существуют слои, которые пытаются скрыть нижележащие слои.
Таким образом, абстракции вовсю царствуют в современных компьютерных (да и не только в компьютерных) системах.
Userland в linux OS
Мысли о том, что пора навести порядок с userland в linux зародились уже достаточно давно и в 2001 году вылились в первую версию linux Standard Base. На текущий момент существует набор спецификаций ISO/IEC 23360-*, а также версия LSB 4.0, вышедшая 11 ноября 2008 г.
Цель LSB — разработать и продвигать набор стандартов, который увеличит совместимость различных дистрибутивов linux и даст возможность запускать приложения на любой совместимой системе. LSB, например, специфицирует такие вещи, как стандартные библиотеки, команды и утилиты, дерево файловой системы (file system hierarchy), уровни выполнения (runlevels) и т.д.
В этом месте можно уверенно сказать, что Android не удовлетворяет LSB, причем по самым ключевым параметрам. Например, в качестве стандартной библиотеки clib используется реализация Bionic
Основной целью использования Bionic в Android являются:
1. Лицензионные ограничения, из-за которых требуется отделить прикладные программы от GPL. Bionic использует лицензию BSD.
2. Меньший размер для оптимизации использования памяти. Bionic требует около 200 кб, что в два раза меньше, чем e glibc.
3. Оптимизация по скорости выполнения: меньший размер кода, более короткие пути исполнения, очень быстрая и компактная реализация pthread.
4. В Bionic встроена поддержка Andoid-специфичных служб, таких как системные свойства (Properties) и протоколирование. Bionic не поддерживает некоторые функции POSIX, например исключения C++ и двухбайтовые символы, т.к. они в Android на этом уровне не нужны, а обеспечиваются уровнем выше.
Архитектура Android и классического linux
Как известно, в Android сделана ставка на использование языка Java и виртуальной машины, а все прикладные программы должны разрабатываться с учетом этой особенности. Предпосылками для этого являются: Java стала распространенным, проверенным, популярным, простым в использовании языком с очень развитой экосистемой (начиная от средств разработки и библиотек, и кончая развитыми средствами сборки типа maven), достаточно быстрые процессоры и большие объемы оперативной памяти.
Соответственно, над linux Kernel, clib и другими библиотеками, виртуальной машиной выстраивается еще один уровень абстракции, который играет ключевую роль при разработке для Android: Application Framework. Он является именно той прослойкой, которая отделяет прикладные программы от нижнего уровня операционной системы и берет обеспечение всех необходимых функций на себя. Иными словами, программист, разрабатывающий на Android не видит и не чувствует, что происходит на низком уровне. Если в один прекрасный момент в Android OS поменяют linux Kernel и clib на что-то другое, никто ничего и не заметит. NDK — средство запуска процессорного кода, существующий в Android, создан для конкретных целей: самодостаточного кода, требующего максимальной производительности. Простой пример — перемножение матриц.
В linux OS прикладные приложения также отделены от низкого уровня системы набором библиотек, а использование linux-специфичных функций полностью на совести разработчика. Именно поэтому, например, MTA Postfix существует не только под linux, но и, например, для FreeBSD.
Стратегия разработки ПО заключается в том, чтобы критичный, системозависимый код загнать в угол и не выпускать оттуда.
Итого, можно сделать вывод, что linux OS и Android имеют заметные различия в userland и в концепции построения и работы приложений, именно поэтому в самом Google явно говорят, что «Android is not linux»
В заключение
При разработке ПО становится нормой рассуждать не в терминах операционных систем, а в терминах платформ и фреймворков. Java, Qt, JavaEE, Django, Symfony и т.п., которые обеспечивают необходимый уровень абстракции.
источник
ВНИМАНИЕ !
Возможно что-то уже неактуально. Обращайте внимание на даты !
Эта статья опубликована 25 февраля 2011-го года !
Прочитано 9513 раз и оставлено 260 комментариев.
#1.MOP3E