Компания NVIDIA открыла код видеодрайверов для ядра Linux

Компания NVIDIA объявила об открытии исходных текстов всех модулей ядра, поставляемых в своём наборе проприетарных видеодрайверов. Код открыт под лицензиями MIT и GPLv2. Возможность сборки модулей обеспечена для архитектур x86_64 и aarch64 на системах с ядром Linux 3.10 и более новыми выпусками. Прошивки и используемые в пространстве пользователя библиотеки, такие как стеки CUDA, OpenGL и Vulkan, остаются проприетарными.

Ожидается, что публикация кода приведёт к существенному повышению удобства работы с GPU NVIDIA в Linux-системах, усилит интеграцию с операционной системой, упростит поставку драйверов и отладку проблем. О формировании пакетов на основе открытых модулей уже заявили разработчики Ubuntu и SUSE. Наличие открытых модулей также упростит интеграцию драйверов NVIDIA с системами на базе нестандартных кастомизированных сборок ядра Linux. Для NVIDIA открытие кода поможет повысить качество и безопасность Linux-драйверов за счёт более тесного взаимодействия с сообществом и возможности стороннего рецензирования изменений и проведения независимого аудита.

Отмечается, что представленная открытая кодовая база одновременно применяется при формировании проприетарных драйверов, в частности используется в опубликованной сегодня бета-ветке 515.43.04. При этом первичным является закрытый репозиторий, а предложенная открытая кодовая база будет обновляться для каждого выпуска проприетарных драйверов в форме слепка после определённой обработки и чистки. История отдельных изменений не предоставляется, только общий коммит для каждой версии драйвера (в настоящий момент опубликован код модулей для драйвера 515.43.04).

Тем не менее, представителям сообщества предоставлена возможность отправки pull-запросов для продвижения своих исправлений и изменений в код модулей, но эти изменения не будут отражаться в виде отдельных изменений в открытом репозитории, а будут вначале интегрироваться в основной закрытый репозиторий и только потом переноситься с остальными изменениями в открытый. Для участия в разработке требуется подписание соглашение о передаче компании NVIDIA имущественных прав на передаваемый код (Contributor License Agreement).

Код модулей ядра разделён на две части: общие компоненты не привязанные к операционной системе и прослойка для взаимодействия с ядром Linux. Для сокращения времени установки общие компоненты как и раньше поставляются в проприетарных драйверах NVIDIA в форме уже собранного бинарного файла, а прослойка собирается на каждой системе с учётом текущей версии ядра и имеющихся настроек. Предлагаются следующие модули ядра: nvidia.ko, nvidia-drm.ko (Direct Rendering Manager), nvidia-modeset.ko и nvidia-uvm.ko (Unified Video Memory).

Поддержка серии GeForce и GPU для рабочих станций отмечена как имеющая уровень качества альфа-версии, но для специализированных GPU на базе архитектур NVIDIA Turing и NVIDIA Ampere, применяемых в датацентрах для ускорения обработки информации и параллельных вычислений (CUDA), обеспечена полная поддержка, полностью протестированная и пригодная для применения в рабочих проектах (открытый код уже готов заменить проприетарные драйверы). Стабилизацию поддержки GeForce и GPU для рабочих станций планируют осуществить в следующих выпусках. В конечном счёте уровень стабильности открытой кодовой базы будет доведён до состояния проприетарных драйверов.

В текущем виде включение опубликованных модулей в основной состав ядра невозможно, так как они не соответствуют требованиям ядра к стилю кодирования и соглашениям по архитектуре, но компания NVIDIA намерена совместно Canonical, Red Hat и SUSE заняться решением этого вопроса и стабилизацией программных интерфейсов драйверов. Кроме того, опубликованный код может использоваться для улучшения входящего в ядро открытого драйвера Nouveau, в котором используются те же прошивки к GPU, что и в проприетарном драйвере.

Источник: http://www.opennet.ru/opennews/art.shtml?num=57175