Android всегда был Linux-проектом, но со временем он стал развиваться по собственному сценарию и его код не включался в главную ветку Linux. Теперь же, и раньше, чем этого ожидал Линус Торвальдс, основатель и ведущий разработчик Linux, код Android официально вернулся в стандартную ветку Linux.
Разделение Linux и Android на отдельные ветви началось осенью 2010 г. Патрик Брэди, инженер Google, заявил, что Android — это не Linux. Но это никогда не было правдой, Android всегда была Linux-проектом.
Впрочем, в это же время Google начала развивать Android в направлении, не совместимом с основной веткой ядра Linux. По словам Грега Кроа-Хартмана, разработчика стабильной ветки ядра Linux для Linux Foundation и главы Linux Driver Project, код ядра Android — это больше чем несколько нестандартных драйверов, лежащих в папке drivers/staging/android: “Чтобы получить рабочую Android-систему, вам понадобятся новый тип блокировки, который они разработали, и специальные процедуры ядра системы, для работы с их моделью безопасности. Чтобы написать драйвер для аппаратного обеспечения, который будет работать в Android, вам необходимо правильно использовать новую блокировку и интегрироваться в их местами странную модель безопасности. И кроме того, там используются совершенно иные методы работы с буфером кадров”. Все это негативно воспринималось в среде Android-разработчиков.
Разногласия возникли по разным причинам. С одной стороны, Android-разработчики из Google стали использовать собственные методы оптимизации энергопотребления с помощью WakeLocks. С другой — Android-программисты были настолько заняты работой над различными элементами Android-устройств, что у них не оставалось времени на координацию действий с разработчиками ядра Linux, заявил Крис ДиБона, технический директор Google по работе с ПО с открытым кодом.
Как следствие возникла ожесточенная дискуссия среди разработчиков по поводу того, каким образом следует обеспечить поддержку специфического Android-кода в Linux. В результате Торвальдс исключил драйверы Android из основной ветки ядра Linux в конце 2009 г.
Несмотря на эти разногласия и появившиеся в марте 2011 г. слухи о том, что на разработчиков Android могут подать в суд разработчики Linux за нарушение открытого лицензионного соглашения GNU второй версии (GPLv2), никакой опасности не было. Как в свое время сказал сам Линус, заявления о том, что Android нарушает положения GPL, не являются правдой: “Мы всегда ясно давали понять, что пользовательские программы, использующие системные вызовы при обращении к ядру не должны рассматриваться как производные от ядра продукты (т. е. не подпадают под требования лицензии GPL), и это справедливо для библиотек, подобных glibc, которые используют заголовочные файлы”.
Впрочем, как объяснил прошлой осенью Торвальдс, “несмотря на то, что работы по объединению остается еще много… в конечном итоге Android и Linux вернутся к общему ядру, но произойдет это не раньше ближайших четырех или пяти лет”. Кроа-Хартман в то же время добавил, что одна из проблем заключается в том, что команда разработчиков Android в Google очень мала и их ресурсы ограничены: “В длительной перспективе им будет выгоднее работать с нами”. Торвальдс затем добавил: “Мы всего лишь работали в разных направлениях некоторое время, но в долгосрочной перспективе обе стороны объединят усилия, за это я не переживаю”.
В итоге объединение пошло быстрее, чем ожидалось. На встрече разработчиков ядра в конце октября 2011 г. в Праге они “согласились с тем, что большая часть кода ядра Android должна быть включена в основную ветку”. Для обеспечения данного процесса был создан проект Android Mainlining.
События продолжили развиваться гораздо быстрее, чем кто-либо мог предположить. К декабрю Кроа-Хартман уже мог написать: “К моменту выхода ядра версии 3.3 большая часть кода Android будет включена в основную ветку, но осталось еще много работы по обеспечению качественной интеграции элементов ядра и пользовательского пространства, которая будет наиболее удобна для сообщества. Это займет некоторое время, но я не думаю, что тут возникнут какие-либо серьезные проблемы”. Он был прав.
Сегодня у вас есть возможность компилировать Android-код в Linux 3.3 и система загрузится. Впрочем, как предупреждал Кроа-Хартман, WakeLocks еще не входит в основную ветку ядра, но все равно может работать. По всем основным параметрам Android и Linux снова объединились в одну операционную систему.