Латиноамериканский Фонд свободного ПО опубликовал полностью свободный вариант ядра Linux 6.12 – Linux-libre 6.12-gnu, очищенный от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем. Кроме того, Linux-libre отключает функции ядра по загрузке внешних несвободных компонентов, не входящих в поставку ядра, и удаляет упоминание об использовании несвободных компонентов из документации.
Для очистки ядра от несвободных частей проектом Linux-libre создан универсальный shell-скрипт, который содержит тысячи шаблонов для определения наличия бинарных вставок и исключения ложных срабатываний. Также доступны для загрузки готовые патчи, созданные на основе использования вышеупомянутого скрипта. Ядро Linux-libre рекомендовано для использования в дистрибутивах, соответствующих критериям Фонда СПО по построению полностью свободных дистрибутивов GNU/Linux. Например, Linux-libre используется в таких дистрибутивах, как Dragora Linux, Trisquel, Dyne:Bolic, gNewSense, Parabola, Musix и Kongoni.
В выпуске Linux-libre 6.12-gnu добавлен код для чистки блобов в драйверах для SoC CPM/QE QMC, беспроводных чипов Realtek 8852BE-VT, bluetooth-адаптеров Amlogic, сетевых адаптеров amcc qt2025, датчиков aw96103/aw96105 и кодеков TI TLV320AIC31XX. Проведена дополнительная чистка блобов в драйверах для xHCI-контроллеров Renesas и Intel ISH (Integrated Sensor Hub) HID. Обновлён код удаления блобов в драйверах и подсистемах MHI PCI host, Adreno 620/621, r8169, Qualcomm q6v5 remoteproc, rtw8852c, rtw8922a, а также в dts-файлах для ARM54-чипов TI PRU и Qualcomm. Прекращена чистка драйверов для беспроводных карт ks7010 и звуковой подсистемы Intel SkyLake, так как данные драйверы были удалены из состава ядра.
Отдельно отмечается выявление в исходных текстах одного из драйверов исполняемого объектного кода, сгенерированного из неопубликованных исходных текстов и встроенного в форме последовательности шестнадцатеричных чисел. Проблемный драйвер явно не называется, но, судя по изменениям, речь про наличие микрокода шейдера в файле gfx_v9_4_3_cleaner_shader.h, входящего в состав драйвера AMDGPU. Первая подобная вставка была выявлена в ядре 6.11 и затем предложена одним из разработчиков к удалению, так как исходные тексты не были предоставлены (возникла ситуация поставки под лицензией GPL программы, доступной только в бинарном виде). Тем не менее, в ядре 6.12 указанный бинарный код был сохранён, а в тот же драйвер была добавлена ещё одна подобная вставка.
Кроме того, в анонсе Linux-libre 6.12 упомянуты ещё два события:
- Для включения в состав ядра предложено исправление, блокирующее драйверам для ноутбков Tuxedo доступ к подсистемам ядра, доступным только для кода под лицензией GPLv2 (EXPORT_SYMBOL_GPL). Возможность блокировки изначально была введена для ограничения связывания проприетарных драйверов с компонентами ядра Linux, экспортируемыми только для модулей под лицензией GPLv2, но успешно обходится через создание модулей-прослоек, транслирующих доступ проприетарного драйвера к необходимым API ядра. В случае с драйверами Tuxedo, ситуация обратная – несмотря не то, что драйверы Tuxedo развиваются отдельной от ядра, они поставляются под лицензией GPLv3, которая с одной стороны не совместима с GPLv2, но с другой стороны отстаивает больше свобод, например, защищает от тивоизации.
Отмечается, что компании Tuxedo давно предлагали сменить лицензию на свои драйверы, но она продолжала поставлять код под лицензией GPLv3 и при этом указывала в коде драйвера макрос ‘MODULE_LICENSE(“GPL”)’ вместо ‘MODULE_LICENSE(“GPL v3”)’ для получения доступа ко всем подсистемам ядра. Компания Tuxedo согласилась с критикой и изменила лицензию на GPLv2+ для части своих драйверов. Изменение применено к драйверам gxtp7380, ite_8291, ite_8291_lb, ite_8297, ite_8297, stk8321, tuxedo_compatibility_check, tuxedo_nb02_nvidia_power_ctrl и tuxedo_tuxi. Более десятка драйверов пока не перелицензированы, так как для смены лицензии на них требуется получение согласия от сторонних разработчиков.
Использование в коде ‘MODULE_LICENSE(“GPL”)’ вместо ‘MODULE_LICENSE(“GPL v3”)’ представитель Tuxedo объяснил отсутствием внятного пояснения в документации на ядро, что маркер “GPL” нельзя использовать для лицензии GPLv3. Также он пояснил, что компания намерена передать свои драйверы в основной состав ядра Linux и для этого ведёт работу по их полному переписыванию под лицензией GPLv2 c учётом требований к компонентам ядра.
- Разработчики ядра обсуждают инициативу по добавлению флага X86_BUG_OLD_MICROCODE, сигнализирующего о том, что в системе используется не самая свежая версия микрокода CPU. При выставлении данного флага систему предлагается рассматривать как имеющую потенциальные неисправленные уязвимости. Попытки уравнять состояние системы с необновлённым микрокодом с ситуацией наличия реальных неисправленных уязвимостей в коде привело к критике со стороны одного из сопровождающих проект Linux-libre.
По мнению представителя Linux-libre, ядро не должно ущемлять право пользователей не устанавливать непроверенные проприетарные прошивки и микрокод на своём собственном устройстве. Речь о наличии уязвимостей предлагается вести в привязке к конкретным исправлениям в определённых версиях прошивок, а не называть уязвимыми любые системы, на которых не установлен самый свежий микрокод, без разбора проявляются ли в данной системе уязвимости и содержит ли свежая прошивка исправления уязвимостей.