Мейнтейнер ядра Linux забраковал патч для AMDGPU
8 декабря 2016 года компания AMD выложила для скачивания последнюю версию проприетарного драйвера AMDGPU-PRO 16.50 для операционных систем на ядре Linux. Этот драйвер основан на свободном модуле ядра AMDGPU. В нём реализована поддержка DirectGMA для OpenGL и технологии FreeSync, которая в некоторых гибридных и графических процессорах AMD решает проблему коммуникации между процессором и монитором и устраняет разрывы изображения, особенно в играх. AMDGPU-PRO 16.50 поддерживает некоторые модели графических ускорителей GNC 1.0 AMD серии Southern Islands, а именно Radeon R7 M465X, AMD Radeon R7 M370 и AMD Radeon R7 M350. Опубликованы скрипты для установки на RedHat Enterprise Linux 7.3, CentOS 7.3, CentOS 6.8, and SLED/SLES 12 SP2.
Одновременно представитель компании AMD Гарри Уентлэнд (Harry Wentland) обратился в список рассылки разработчиков ядра Linux с предложением включить в ядро скромный патч размером около 100 000 строк кода со слоем аппаратных абстракций. Мейнтейнер ядра Дэйв Эйрли (Dave Airlie) доступно объяснил представителю AMD, почему такой патч не примут в ядро. Хотя мейнтейнер не вспоминал знаменитую фразу Линуса в адрес Nvidia, но многие помнят те слова. AMD тоже отправили в пешее путешествие, пусть и не в такой грубой форме.
Драйвер AMDGPU-PRO 16.50 обеспечивает поддержку OpenGL 4.5, GLX 1.4, OpenCL 1.2, Vulkan 1.0, VDPAU API, а также поддержку Vulkan в игре Dota 2. Он включает в себя основные функции управления графикой и энергосбережением, GPL-совместимый модуль ядра, совместим с технологиями ADF (Atomic Display Framework) и KMS (Kernel Mode Setting).
В новом драйвере реализовали фичи FirePro, такие как EDID Management и 30-битный цвет, поддержку 64-битных версий операционных систем Red Hat Enterprise Linux 7.3, Red Hat Enterprise Linux 6.8, CentOS 7.3, CentOS 6.8, SUSE Linux Enterprise Desktop 12 Service Pack 2, SUSE Linux Enterprise Server 12 Service Pack 2 и Ubuntu 16.04 LTS.
Radeon RX 480 Graphics
Radeon RX 470 Graphics
Radeon RX 460 Graphics
AMD Radeon R9 Fury X Graphics
AMD Radeon R9 Fury Graphics
AMD Radeon R9 Nano Graphics
AMD Radeon R9 390X Graphics
AMD Radeon R9 390 Graphics
AMD Radeon R9 380X Graphics
AMD Radeon R9 380 Graphics
AMD Radeon R9 M395X Graphics
AMD Radeon R9 M385 Graphics
AMD Radeon R9 M380 Graphics
AMD Radeon R9 M270X Graphics
AMD Radeon R9 360 Graphics
AMD Radeon R9 290X Graphics
AMD Radeon R9 290 Graphics
AMD Radeon R9 285 Graphics
AMD Radeon R9 M485X
AMD Radeon R7 M400 Series
AMD Radeon R7 M370
AMD Radeon R7 M350
AMD Radeon R7 260X Graphics
AMD Radeon R7 260 Graphics
AMD Radeon Pro WX-series
AMD FirePro W-Series
AMD FirePro S-Series
Разработчики предупреждают о некоторых известных багах нового драйвера. Например, возможность полного зависания при «горячем» подключении дисплея при включенном компьютере, невозможность определения режима работы (modeset) при «горячем» подключении монитора в Red Hat Enterprise Linux 7.3, а также несовместимость с бенчмарком EnSight 10.
Ссылки на бинарники:
Одновременно с выпуском драйвера представитель компании AMD Гарри Уентлэнд (Harry Wentland) обратился в список рассылки разработчиков ядра с предложением включить в ядро патч для поставляемого в составе ядра Linux модуля AMDGPU, переработав код управления отображением (Display Core) для обеспечения поддержки будущего поколения GPU (uGPU), а также добавив ряд новшеств, таких как средства для организации вывода звука через HDMI и DisplayPort.
Вокруг этого предложения развернулась большая дискуссия. Представителю компании AMD сначала мягко, а потом жёстко объяснили, что такой патч не будут принимать в ядро, потому что AMD пытается вместо использования унифицированного для всех драйверов интерфейса интегрировать свой собственный слой аппаратных абстракций (HAL) для взаимодействия с оборудованием.
Мейнтейнер ядра Дэйв Эйрли объяснил предельно просто: «Никаких HAL. Мы не внедряем слои аппаратных абстракций в ядро. В DRM (Direct Rendering Manager) мы тоже не принимаем такие патчи, если мейнтейнеры не спят. Они могут быть удобными для AMD, но для ядра Linux они не дают никаких преимуществ и затрудняют поддержку кода. Я поддерживаю эту кодовую базу более 10 лет, и за все годы только один раз смерджил патч по полуполитическим причинам (это был exynos), и та штука потребовала немало сил для очистки, и я действительно не хочу соглашаться на такое снова».
Дэйв Эйрли сказал, что однозначно не собирается подрывать доверие Линуса и мерджить в ядро 100 000 строк аппаратных абстракций, и самостоятельно переписывать этот код Эйрли тоже не собирается.
Мейнтейнер выразил надежду, что AMD не будет угрожать оставить последние версии видеокарт AMD без поддержки, если этот HAL не включат в ядро. В этом случае придётся оставить на обочине большое количество пользователей, но Linux переживёт это и будет развиваться дальше, сказал Эйрли: «Ядро больше, чем любой из нас, и у него есть стандарты того, что приемлемо, а что нет». Мейнтейнер порекомендовал коллегам из AMD почитать все треды дискуссии о mac80211, которая была несколько лет назад, когда один разработчик написал собственный слой 80211 внутри своего драйвера.
По мнению Эйрли, если AMD необходимо обеспечить поддержку дополнительной функциональности, такой как FreeSync или новых возможностей HDMI, это следует делать совместно путем расширения существующих интерфейсов, а не придумывать новые уровни абстракции и создавать специфичные для драйвера ioctl. Эйрли упрекнул компанию AMD в том, что она стоит в стороне от графического сообщества, закрывшись в «собственном силосе».
9 декабря 2016 года один из ведущих Linux-разработчиков компании AMD Александер Дойчер (Alexander Deucher) написал большой ответ мейнтейнеру ядра. Он сказал, что в этой дискуссии хорошо проявились причины, по которым многим людям надоело работать с апстримом Linux. Он считает неуместным в технической дискуссии атаковать компанию и её корпоративную культуру. Вероятно, это связано с тем, что сам Дэйв Эйрли сам слишком много времени провёл в изолированном силосе Red Hat (Дэйв занимает должность главного ведущего программиста Red Hat, профиль на LinkedIn).
Представитель AMD сказал, что у них очень маленький коллектив Linux-разработчиков, которые давно работают в этой теме. Они делают всё что могут — драйверы Linux практически не уступают по функциям драйверам под Windows, а что касается универсальных интерфейсов ядра Linux, то с каждым обновлением ядра они всегда ломали несколько драйверов. Если переписывать нынешний HAL от AMD по универсальный интерфейс, то придётся принести в жертву стабильность работы и ограничить функциональность оборудования.
Судя по всему, дискуссия в списке рассылки разработчиков ядра Linux продолжится и сегодня.