GNOME и будущее поддержки железа

На наших глазах развивается драма, разгоревшаяся после предложения нашего коллеги, Christian Schaller, рекомендовать конечным пользователям использовать LibreOffice вместо AOO. Christian адресовал предложение смотрителям кладбища OpenSource-проектов, Apache Software Foundation, так что история получилась еще смешнее. Драма уже обсуждается коллегами-аналитиками на русскоязычных ресурсах - OpenNET.ru и Linux.org.ru.

По существу вопроса добавить наверное нечего - каждому, кто заглянет в git log обоих проектов, будет все ясно. Но особенно интересна и показательна типичная реакция некоторых коллег-аналитиков - "в вашем %имя_проекта% полно глюков, и документы открываются/сохраняются/отображаются неправильно, но я вам устранить эту ошибку помогать не буду, а буду ждать, пока ею займется кто-то другой". Нам кажется такая позиция неконструктивной и не только чуждой самому духу сообщества открытого ПО, но и серьезно мешающей бизнес-процессу в конкретных компаниях. Как положительный пример отношения к проблемным моментам, хочется обратить внимание на доклад другого нашего коллеги, Bastien Nocera, на недавно прошедшей конференции GUADEC 2015.

Bastien Nocera рассказал о своем опыте запуска Linux на дешевом Windows-планшете и заодно предложил новый способ работы GNOME с новым оборудованием - чтобы было так просто, как и с Android.

Половину своего выступления Bastien рассказывал то, как вообще можно сферически запустить сферический Linux (а потом и GNOME) на новом сферическом устройстве. А вот под конец, он вернулся к началу и изложил события ровно в том порядке, в котором они произошли в реальности (с гораздо меньшим успехом). Но, как он подчеркнул, более успешная версия событий вполне достижима, если внести немного изменений в GNOME.

[Bastien Nocera]

История началась, когда Bastien купил дешевый китаепланшет, и решил поставить туда операционную систему GNOME вместо Windows 8. Главной проблемой был неработающий WiFi. В планшете был чип от Realtek, и Bastien даже сумел получить к нему исходники от компании, но они были в ужасном состоянии.

Скорее всего исходники были от драйвера для Android, но с мэйнстримовым Linux-ядром они не работали. Покопавшись в исходниках он обнаружил, что они забиты бесполезным мусором - тестами, кодом для препродакшен-версий оборудования, и т.д. В драйвере был даже какой-то код для USB, т.к. wifi был физически подключен к материнской плате через USB. В конечном итоге, с помощью других программистов, среди которых были и наши коллеги, он сумел выкинуть лишнее, и кодовая база уменьшилась в 20 раз.

Затем они привели его в состоянии пригодности для работы со стандартным ядром. Это заняло время, но все заработало, и после того, как получившийся код был выложен на GitHub on начал работу над следующей задачей. Следующим он добился работоспособности USB On-The-Go, что позволило подключиться к планшету через USB. Это, в свою очередь, позволило ему использовать Android Debug Bridge (adb), чтобы контролировать и мониторить процесс загрузки. Для этого пришлось поправить adb-демон, чтобы он работал с glibc и systemd, вместо Bionic и init из Android. Пропатченный adb он также выложил на GitHub.

Тут уже он настроил "EFI mixed mode" (загрузка 64-битного ядра 32-битным firmware), а позже он заменил загрузчик на GRUB, настроил Secure Boot shim, и запустил инсталлятор Fedora, чтобы установить полноценную 64-битную Linux-систему. ADB позволяет загружать пакеты на планшет, так что с поддержкой его в GNOME, разработчики могли бы создавать приложения xdg-app с помощью GNOME Builder на рабочих машинах, загружать их по USB на планшеты и тут же тестировать. Никаких эмуляторов, симуляторов, и не нужно было бы.

Тут то Nocera и остановился, чтобы сообщить, что лишь половина этого всего случилась в реальности. Ну, пока так. Действительно, ему удалось запустить WiFi с помощью Larry Finger. И его работа над ADB и EFI mixed mode тоже существует, хотя не все патчи готовы к включению в апстрим.

То, что он рассказывал, это то, что бы он хотел от GNOME в ближайшее время, и что ему хотелось бы обсудить. Все кусочки уже в наличии - xdg-app может создавать образы, которые, как и apk-файлы для Android, разработчик мог бы попробовать установить и потестировать. GNOME Builder хорошо бы, чтобы умел создавать пакеты xdg-app, и было бы здорово интегрировать его с adb.

Тут есть и другие проблемы, некоторые совсем не относятся к GNOME. Windows 8 не поддерживает USB On-The-Go, и поэтому даже если system-on-chip, используемый в планшете, поддерживает USB OTG, производитель может не присоединить его к материнской плате. Одной из альтернатив был бы кабель USB host-to-host - они дешевы, но потребуется некоторая работа, чтобы они надежно работали c Linux-десктопами. Внутри таких коннекторов используются дешевые сетевые адаптеры USB, между которым находится Ethernet-хаб, поэтому поддержка их потребует разработки драйверов.

Гораздо большей проблемой может стать то, что EFI mixed mode пока не полностью подерживается в Linux. Действительно, уже можно загрузить 64-битный Linux на 32-битном UEFI, но когда драйверы начинают обращаться к UEFI, тогда начинаются проблемы. Ну и проблема еще в том, что дешевые планшеты меняются очень быстро, и поддерживать большое количество моделей будет непросто. Но если на планшет можно установить старую версию Windows, то скорее всего легко получится запустить и Linux.

Nocera закончил выступление объявив, что претензии не принимаются. Он сказал, что сожалеет, что ему пришлось приврать в первой части доклада, когда он рассказывал про идеализированный сценарий, скрыв, что еще необходимо много работы. Но именно такая поддержка оборудования, это именно то, что нужно для распространения GNOME. Мобильные устройства никуда не уйдут, и т.к. у Android есть захватывающая история о том, как каждый желающий может подключить UBS-кабель, и начать разрабатывать ПО, которое можно сразу же запустить на любом планшете или телефоне, то GNOME стоило бы обеспечить такой же уровень поддержки.


Хотелось бы обратить внимание, как энергично Bastien решал проблемы, с которыми сталкивался. Конечно, не каждому суждено доработать драйвер для Wi-Fi (даже с помощью старших товарищей), но имеет смысл при возникновении проблемы проконсультироваться с upstream-разработчиками. Скажем, открыть заявку в Bugzilla.