Драйвер для видеоускорителя Broadcom VideoCore оказался не так открыт, как кажется

Дэвид Эйрли (David Airlie), один из наиболее активных разработчиков X.Org, выступил с критикой открытого вчера драйвера для видеоускорителя Broadcom VideoCore. Как известно, изначально драйвер был разделён на две части: работающий на уровне ядра модуль и набор библиотек для непосредственного взаимодействия с GPU. Функции модуля, работающего на уровне ядра, сводятся к организации обмена сообщениями между GPU и работающим на уровне пользователя кодом, который до вчерашнего дня распространялся в бинарном виде.

Дэвид Эйрли обратил внимание на то, что даже при открытии пользовательских компонентов драйвера его нельзя рассматривать полностью открытым, так как он очень сильно привязан к загружаемой в GPU прошивке, которая по прежнему остаётся закрытой. В отличие от видеокарт AMD и NVIDIA, в которых тоже практикуется загрузка микрокода, в случае чипов Broadcom на стороне GPU выполняется подобие операционной системы, на стороне которой реализованы многие компоненты, обычно работающие на стороне драйвера. Например, поддержка OpenGL ES реализована целиком на стороне бинарной прошивки GPU. Открытые компоненты по сути являются реализацией RPC-интерфейса для обращения к прошивке.

Таким образом, код открытых пользовательских компонентов драйвера мало что меняет, так как он является лишь высокоуровневой прослойкой для трансляции обращений к бинарной прошивке, выполняемой на стороне GPU. Подобная схема не позволяет независимым разработчикам как-либо повлиять на работу графической подсистемы, например, невозможно внести свои улучшения в реализацию OpenGL ES, добавить новые расширения и даже исправить ошибки. Кроме того, такой подход не даёт возможности написать драйвер Mesa/Gallium для Broadcom VideoCore.

Являясь мейнтейнером DRM-подсистемы ядра Linux Дэвид Эйрли также заявил, что открытый Broadcom модуль ядра Linux не может быть принят в состав основного ядра Linux, даже несмотря на то, что он распространяется под лицензий GPL. Проблема в том, что драйвер остаётся зависим от проприетарной прошивки и не может рассматриваться как самодостаточный. Дэвид привёл образный пример, указав на то, что драйвер Broadcom напоминает драйвер для Ethernet-карты, у которой весь TCP/IP-стек реализован на уровне прошивки. Подобный подход хорош с точки зрения снятия нагрузки с CPU, но ставит разработчиков в тупик, как только возникает необходимость самостоятельно исправить ошибки или доработать функциональность.

По мнению Дэвида ключевым фактором открытия кода является предоставление другим людям возможности внесения улучшения в выполняемые кодом функции, в случае с драйвером Broadcom такая возможность отсутствует. Тем не менее, тема является довольно скользкой, например, подобные претензии можно выдвинуть и против ранее не вызывавших нареканий открытых драйверов, задействующих средства аппаратной акселерации кодирования и декодирования видео, использующих средства ускорения разбора TCP-пакетов или обращающихся к средствам акселерации криптографических операций.