Драйвер для видеоускорителя 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 такая возможность отсутствует.
© OpenNet