На самом деле дистрибутивы Linux бесперспективны не только по вине ядра, но и по вине крайне ненадёжных репозиториев. Но этой проблеме подвержены не только Линуксы, о чём уже говорилось в другой статье.
Так что сейчас поговорим именно про ядро Linux.
Почему производители оборудование разрабатывают драйверы в первую очередь для Windows и очень неохотно берутся за разработку под Linux? Опять злая корпорация всем заплатила и вставляет палки в колёса, чтобы не было конкурентов? Звучит сомнительно.
Давайте посмотрим на результаты тестов совместимости VirtualBox с Windows 10 и разнообразными Линуксами. Этот тест примечателен тем, что виртуальная машина зависит от ядра операционной системы, как драйверы видеокарт и прочего оборудования. Потому любая поломка совместимости отражается на работоспособности.
Вероятно, некоторые уже догадались, почему операционные системы на основе ядра Linux становятся мёртвыми сразу после рождения. Хотя есть ещё одна причина такому положению дел: репозитории, на которые завязаны операционные системы семейства Linux. Но этот уровень уже ближе к пользователю, а не ядру.
Если говорить про сам Linux и принципы его создателя, то становится очевидно, почему всё так, а не иначе. Наверняка многие слышали о том, как Линус Торвальдс плохо отзывался о компании NVIDIA. Мол, компания не хочет раскрывать свои драйверы для видеокарт и не помогает разработчикам открытых драйверов. Собственно, а почему она должна всё раскрывать и всем помогать?
Линуксоиды очень любят цитировать отношение создателя ядра Linux к компании NVIDIA в попытках оправдать вечно несостоятельные видеокарты AMD Radeon. Но действительно ли это проблема NVIDIA? Или это просто перекладывание ответственности на посторонних?
Результаты тестов совместимости VirtualBox с разными ядрами Linux однозначно говорят, что виновато ядро, в котором постоянно ломают совместимость. И ладно, если бы ломали между мажорными версиями, например, 5.x и 6.x, но совместимость ломается и в минорных версиях ядра. Драйвер, прекрасно работающий с Linux 6.6, может даже не установиться с Linux 6.8. И такое происходит постоянно.
Это грубое проявление неуважения к производителям разнообразного оборудования. Пока будут доработаны драйверы, разработчики ядра Linux успеют ещё раз десять поломать совместимость. И придётся ещё больше вкладывать ресурсов в разработку и постоянное переписывание кода, подстраиваясь под Linux. Оно надо производителям? Далеко не у каждого есть штат умных и умелых специалистов с массой ресурсов, как у NVIDIA, чтобы по 12 лет переписывать драйверы для «дряхлого пингвина».
Примечательно в этой всей ситуации то, что вину за все проблемы у линуксоидов принято перекладывать на кого угодно, но не Linux. Мало того, производителям нужно постоянно пересобирать пакеты, так ещё и виноватым делают самих производителей за все проблемы и даже пользователей. Стоит ли говорить, что далеко не каждый захочет поддерживать такую токсичную и проблемную систему, не уважающую чужое время и труды?
А что ядро может без драйверов оборудования? Да ничего не может. Оборудование просто не будет правильно работать. При этом разработчики Linux по сей день продолжают относиться к производителям крайне неуважительно. Это очень мягко говоря. Поломанная совместимость в каждом минорном выпуске Linux — одно из проявлений недружелюбности и неуважения к окружающему миру. Это не какой-то маленький проект от условного Васи из Интернета, а целое ядро для операционных систем.
NVIDIA делает поистине огромную и ресурсоёмкую работу, поддерживая Linux качественными драйверами на протяжении десятилетий. Я не знаю ни одну другую компанию, у которой были бы ресурсы на такое. Многие просто сдались и бросили всё на произвол, как, например, AMD.
О каком развитии может идти речь, если люди не заинтересованы в активной поддержке Linux из-за разработчиков ядра оного, крайне неуважительно относящихся к труду и интересам окружающих?
Как начинающий производитель какого-нибудь периферийного или внутреннего устройства для ПК со своими уникальными особенностями, я бы даже не посмотрел в сторону Linux при написании драйверов, ибо спустя пару минорных версий написанный драйвер перестанет работать по вине разработчиков ядра, в очередной раз сломавших совместимость.
Можно ли решить эту проблему нестабильности, просто оставшись на старой версии Linux? Теоретически можно, Но практически это невозможно, потому что старое ядро не получится нормально запустить на новом оборудовании из-за какой-нибудь кривой строчки кода или отсутствия подходящего драйвера. Даже самого простого. Это нужно брать ядро и переделывать, постоянно затрачивая массу ресурсов на это дело, получая в итоге очередную «тыкву».
Да и про зависимости забывать не стоит. Некоторые линуксоидные системные компоненты могут потребовать новое ядро.
Linux — монолитное ядро со всеми вытекающими проблемами. По-хорошему в ядре должны быть только базовые драйверы оборудования, позволяющие операционной системе нормально запуститься, чтобы пользователь уже установил полноценные драйверы для своего оборудования. Но в Линукс пихают всё подряд, потому что это монолит, и работает оно соответствующе.
То, что к Линуксу прикрутили модули костылями, не делает его чем-то лучше. Оно всё равно остаётся монолитным ядром. Разрабатывать новые монолитные творения еще в 1980-х годах было глупостью, не говоря уже про 1990-е годы. Последствия мы все прекрасно видим сейчас: что ни выпуск, то поломанная совместимость с драйверами разнообразного оборудования.
Впрочем, сам Линус Торвальдс как-то говорил, если верить найденным источникам, что регрессионное тестирование — это что-то ненужное. Тестирование, как раз необходимое для выявления разнообразных проблем после выпуска обновлений.
Проект Mesa3D является очень ярким примером того, что происходит, если впустить в проект «программистов» из всяких AMD и забить на регрессионное тестирование.
Отличный проект в прошлом. Буквально спасение в некоторых ситуациях, когда нужно что-то протестировать, используя программный рендер. Превратился во что-то кривое и поломанное, непригодное для полноценного использования.
Думаете, они исправляют созданные проблемы со временем? Драйвер llvmpipe, насколько мне известно, до сих пор поломан. С 2021 года. А исправляя другие проблемы, они просто создают десяток новых. Mesa 24.2.8 — одна из таких проблемных версий проекта. Знаю, потому что она встроена по умолчанию в дистрибутиве Chimbalix 24.8. Предыдущая версия Mesa 24.2.2 работала при этом без серьёзных косяков. Хотя в Mesa 25.0.7 исправили очередную из множества регрессий, но проект всё равно так и остаётся поломанным до ужаса. С момента, как AMD приложила к нему руки.
Хотя пример с Mesa3D и не относиться напрямую к ядру Linux, но демонстрирует наглядно, к чему приводит отсутствие нормального регрессионного тестирования. Тот же баг 12309 в ядре Linux до сих пор портит жизнь людям. Кто-то напортачил в коде и уже больше 10 лет это не исправляется.
Раздули кэши до неадекватных размеров, что у пользователей постоянно теряются данные, болтающиеся гигабайтами где-то в оперативной памяти внутри кэшей, вместо того, чтобы быть записанными сразу же, насколько это возможно. Костылями обмазались, в том числе костылём под названием Файл подкачки. Оно всё вместе вроде как маскирует баг ядра до поры до времени, но не устраняет в корне.
То, что в каждом минорном выпуске ломается совместимость с драйверами оборудования, а серьёзные баги десятилетиями не исправляются, а то и новые добавляются, сложно объяснить простой некомпетентностью.
Можно понять сломанную совместимость между мажорными версиями ядра 5.х и 6.х. Это нормально. Но когда ломают совместимость буквально в каждой второстепенной версии — это уже грубое неуважение к труду других людей и производителей оборудования.
Благодарю за внимание. Больше интересных статей – в блоге Hard-Workshop.