В чем различия между ядром RHEL и другими дистрибутивами?

Вопрос или проблема

В настоящее время я работаю в месте, которое использует RHEL с версии 4. Насколько мне известно, никогда не было конкретной технической причины для выбора этого дистрибутива. Это было «корпоративное» распределение, и вокруг него существует некий имидж, что вы сможете обратиться к кому-то в случае возникновения проблем.

Тем не менее, за все годы использования RHEL и лицензии «самоподдержки», помощь никогда не приходила. Кроме того, способ использования операционной системы на объектах клиентов действительно очень прост. Более того, некоторые клиенты даже извлекли старые диски RHEL6 и 7, потому что им ужасно не нравится быть связанными с Gnome, и все программное обеспечение KDE, которым они наслаждались, внезапно исчезло. С учетом всех этих вещей, RHEL начинает приносить гораздо больше проблем, чем стоит. Аргументы вроде «стабильности» и другие подобные термины сложно количественно оценить, в основном потому, что у меня нет проблем со стабильностью и на других основных дистрибутивах.

С этим, однако, мой вопрос. Я осведомлён, что ядро, используемое для RHEL, не такое же, как широко доступное, и что RHEL официально поддерживает только ядра, скомпилированные ими. Однако какие реальные изменения в него вносятся, чтобы оправдать наличие своей версии? Есть ли драйверы или какие-то другие функции, доступные здесь, которых нет в общедоступных версиях ядер, или в том, что вы компилируете сами?

Это не полный ответ на ваш вопрос,
особенно поскольку я не знаю много о RHEL,
но я считаю, что это дает хороший контекст для “других”,
к которым относится ваш вопрос.
Этот ответ не ограничивается ядром;
это то, как ответить на вопрос о “Upstream” против “Debian” для любого пакета.
Надеюсь, это будет полезно.

Что касается упаковки Debian (или Ubuntu, или производных),
будь то ядро или что-то другое,
вы можете использовать apt source <package>
для изучения источников того, что именно установлено на вашем компьютере.

$ apt source linux-5.10.226
$ ls
linux_5.10.226.orig.tar.xz      <-- Upstream, чистые источники
linux_5.10.225-1.debian.tar.xz  <-- Изменения, специфичные для Debian
linux_5.10.226-1.dsc            <-- Индекс того, что в исходном пакете
linux-5.10.226/                 <-- Извлеченные и скомпилированные все компоненты

Первое, что мы можем сделать, это изучить формат:

$ cat debian/source/format
3.0 (quilt)

3.0 (quilt) (в отличие от native) означает, что
этот пакет использует исходный tarball, и Debian накладывает патчи сверху.
Это соответствует найденным нами файлам.

Мы также можем увидеть, откуда пришел исходный файл.
debian/watch может быть полезен для этого.
Он определяет схему для uscan, чтобы скачать и проверить оригинальный tarball,
или проверить наличие более новых версий и загрузить их.

$ cat debian/watch
# Найдите первый не-rc tarball, связанный с kernel.org.
version=3
opts="pgpmode=mangle, pgpsigurlmangle=s|\.xz$|.sign|, decompress" \
https://www.kernel.org/ .*/linux-([0-9.]+).tar.xz debian uupdate

Далее мы можем собрать это с помощью dpkg-buildpackage.
Один из первых шагов, предпринятых этим инструментом, – это выполнение dpkg-source -b,
который выполняет хэш (MD5?) всего, что находится вне каталога debian/,
и затем сравнивает это с тем, что ожидает от чистого извлечения *.orig.tar.xz.
Если он обнаруживает любые изменения, то прерывает процесс.
Это гарантирует, что мы не загрязнили исходный код Upstream.

Следующее, что делает dpkg-source -b, это использование quilt для применения всех патчей, найденных в debian/patches/series:

$ cat debian/patches/series
debian/gitignore.patch

# Отключение функций, испорченных исключением файлов Upstream
debian/dfsg/arch-powerpc-platforms-8xx-ucode-disable.patch
debian/dfsg/drivers-media-dvb-dvb-usb-af9005-disable.patch
debian/dfsg/vs6624-disable.patch
debian/dfsg/drivers-net-appletalk-cops.patch
debian/dfsg/video-remove-nvidiafb-and-rivafb.patch
debian/dfsg/documentation-fix-broken-link-to-cipso-draft.patch

# Изменения для поддержки системы сборки пакетов
debian/version.patch
debian/uname-version-timestamp.patch
debian/kernelvariables.patch
debian/ia64-hardcode-arch-script-output.patch
...

В этом конкретном пакете файл series содержит 146 строк с 107 патчами. Эти патчи описывают различия между выпуском Debian и пакетом Upstream.

Если мы изучим один из патчей (выбранный произвольно),
мы увидим, что это формат unified-diff с заголовком dep3.
На самом деле это git-commit, выбранный из дерева ядра Upstream,
он был написан сотрудником Red Hat,
и был интегрирован в это выпуск ядра для решения проблемы CVE.

From: Miklos Szeredi <m>
Date: Mon, 14 Dec 2020 15:26:13 +0100
Subject: vfs: переместить вызов cap_convert_nscap() в vfs_setxattr()
Origin: https://git.kernel.org/linus/7c03e2cda4a584cadc398e8f6641ca9988a39d52
Bug-Debian-Security: https://security-tracker.debian.org/tracker/CVE-2021-3493

cap_convert_nscap() выполняет проверку разрешений, а также преобразование
значения xattr условно в зависимости от user-ns файловой системы.

Это необходимо для overlayfs и, вероятно, для других слоистых файловых систем (ecryptfs) и это
то, что vfs_foo() и должно делать.

Signed-off-by: Miklos Szeredi <>
Acked-by: James Morris <>
---
 fs/xattr.c                 | 17 +++++++++++------
 include/linux/capability.h |  2 +-
 security/commoncap.c       |  3 +--
 3 files changed, 13 insertions(+), 9 deletions(-)

diff --git a/fs/xattr.c b/fs/xattr.c
index cd7a563e8bcd..fd57153b1f61 100644
--- a/fs/xattr.c
+++ b/fs/xattr.c
@@ -276,8 +276,16 @@ vfs_setxattr(struct dentry *dentry, const char *name, const void *value,
 {
    struct inode *inode = dentry->d_inode;
    struct inode *delegated_inode = NULL;
+   const void  *orig_value = value;
    int error;

+   if (size && strcmp(name, XATTR_NAME_CAPS) == 0) {
+       error = cap_convert_nscap(dentry, &value, size);
+       if (error < 0)
+           return error;
+       size = error;
+   }
+
 retry_deleg:
    inode_lock(inode);
    error = __vfs_setxattr_locked(dentry, name, value, size, flags,
@@ -289,6 +297,9 @@ vfs_setxattr(struct dentry *dentry, const char *name, const void *value,
        if (!error)
            goto retry_deleg;
    }
+   if (value != orig_value)
+       kfree(value);
+
    return error;
 }
 EXPORT_SYMBOL_GPL(vfs_setxattr);
...

Если я посмотрю на другой, этот предназначен для решения проблемы, которая была поднята в Kali Linux.

$ cat -p debian/patches/features/x86/intel-iommu-add-kconfig-option-to-exclude-igpu-by-default.patch 
From: Ben Hutchings <>
Date: Wed, 21 Aug 2019 00:32:16 +0100
Subject: intel-iommu: Добавить опцию Kconfig для исключения iGPU по умолчанию
Bug-Debian: https://bugs.debian.org/935270
Bug-Kali: https://bugs.kali.org/view.php?id=5644

Существует еще прошивка для ноутбуков, которая влияет на встроенный GPU за спиной
операционной системы и не упоминает об этом в таблице RMRR.
Включение IOMMU для всех устройств вызывает сбой.

Замените CONFIG_INTEL_IOMMU_DEFAULT_ON на выбор из трех вариантов,
соответствующий "включено", "выключено" и "включено, intgpu_off".

Signed-off-by: Ben Hutchings <>
---
--- a/drivers/iommu/intel/Kconfig
+++ b/drivers/iommu/intel/Kconfig
@@ -45,14 +45,28 @@ config INTEL_IOMMU_SVM
      для доступа к ресурсам DMA через адресное пространство процесса
      с помощью идентификатора адресного пространства процесса (PASID).

-config INTEL_IOMMU_DEFAULT_ON
-   def_bool y
-   prompt "Включить устройства Intel DMA Remapping по умолчанию"
-   зависит от INTEL_IOMMU
+if INTEL_IOMMU
+
+choice
+   prompt "Статус по умолчанию для устройств Intel DMA Remapping"
+   default INTEL_IOMMU_DEFAULT_ON
...

Еще одной важной частью является файл debian/rules,
который определяет любые определения конфигурации.
Часто это включает определения стиля autoconf или -DCMAKE_....
Это может включать компоненты,
или определять другие поведения, указанные проектом Upstream.

Так что если вы хотите знать разницу
между любым пакетом Upstream (ядро или другой)
и выпуском Debian,
вы можете просто изучить исходный пакет таким образом.

  • Официальное ядро Linux не имеет стабильного API/ABI, и RedHat на самом деле предоставляет его. Это позволяет предприятиям/людям использовать RHEL с их собственными сторонними (как открытыми, так и закрытыми) драйверами более десяти лет, не опасаясь, что что-то может сломаться. RedHat делает это, придерживаясь одной версии ядра на протяжении всего времени выпуска одной RHEL. То есть RHEL 9 поставляется с ядром 5.14.0, и это будет единственная версия ядра на протяжении всех 10 или около того лет этого выпуска RHEL.
  • Официальное ядро Linux имеет очень неполное покрытие QA/QC, если вообще есть. RedHat тратит кучу денег на то, чтобы убедиться, что все работает и нет регрессий.
  • С официальным ядром очень трудно получить какую-либо поддержку. Кучи регрессий решаются годами или вообще не решаются. Для поддерживаемого/квалифицированного оборудования RedHat на самом деле предлагает поддержку и может выпускать исправления.

Ядро RedHat не без своих недостатков:

  • Это корпоративное ядро и в основном подходит для серверов. Его не рекомендуется использовать на совершенно новых ноутбуках и настольных компьютерах, которым требуется последний код ядра.
  • RedHat не всегда исправляет уязвимости безопасности так быстро, как это делает upstream.

Теперь давайте обратим внимание на комментарии и голосования вниз:

  • Существует ядро 4.19.322, которое почти полностью состоит из исправлений ошибок, их несколько тысяч.
  • В то время как у Microsoft есть обширная программа (WHQL) для тестирования драйверов, их функций, производительности и стабильности, ничего подобного не существует для всего ядра Linux. Коммиты объединяются, если они компилируются и не ломают критические вещи сразу.
  • Некоторые компании и люди действительно компилируют ядро, убеждаясь, что оно работает, но физически невозможно протестировать, например, все драйверы, когда у вас есть соответствующее оборудование. Например, Intel автоматизирует тестирование i915, iwlwifi и других их драйверов. Google также это делает, но объем охвата не известен, во-вторых, Google, как и RedHat, придерживается одной версии ядра достаточно долго.
  • Некоторые люди регулярно тестируют ядро на регрессии производительности, но это не согласованный единый регулярный подход, а нечто очень фрагментарное и эпизодическое, например, Phoronix.
  • Теперь перейдем к более современным примерам: драйвер amdgpu для Linux 6.11 имеет 53 поданных ошибок/регрессий: https://gitlab.freedesktop.org/drm/amd/-/issues/?sort=created_date&state=all&search=6.11
  • Ядро Linux имеет нулевую (подразумеваемую) внутреннюю совместимость API и ABI. https://www.kernel.org/doc/Documentation/process/stable-api-nonsense.rst https://news.ycombinator.com/item?id=21243406 Модули, скомпилированные, например, для ядра 6.11.3, не будут работать с ядром 6.11.4. Существуют хаки для обхода этой проблемы, но это неподдерживаемые хаки. Не путайте это с системными вызовами, то есть пользовательскими API, которые предоставляет ядро.

Ответ или решение

Различия между ядром RHEL и ядрами других дистрибутивов Linux

Red Hat Enterprise Linux (RHEL) с каждым выпуском обеспечивает мощный и надежный ядро, которое служит основой для многокомпонентных систем в корпоративной среде. Однако RHEL отличается от других дистрибутивов Linux, таких как Ubuntu, Debian и Arch, по нескольким ключевым аспектам. Давайте подробно рассмотрим эти различия.

1. Статус и поддержка ядра

Ядро RHEL: Каждая версия RHEL нацелена на долгосрочную поддержку (LTS). Например, RHEL 9 использует ядро 5.14.0, которое будет оставаться единственной версией в течение всего срока жизни RHEL 9. Это важно для бизнес-клиентов, которые зависят от стабильности и предсказуемости своих систем.

Ядра других дистрибутивов: Дистрибутивы, такие как Debian или Arch, часто предлагают более новые версии ядра и более частые обновления. Это может привести к проблемам совместимости, если пользовательское программное обеспечение и драйвера не поддерживаются в новых версиях ядра.

2. Тестирование и качество

Качество и тестирование в RHEL: Red Hat проводит обширные тестирования и обеспечивают высокое качество собственного ядра. Это означает, что в RHEL обнаруживаются и исправляются многие ошибки и уязвимости до того, как они окажутся в производственной среде.

Ядра внешних дистрибутивов: Официальное ядро Linux имеет ограниченное покрытие QA/QC. Редко проводятся такие же обширные тестирования, как это делает Red Hat. Кроме того, из-за отсутствия строгой системы тестирования и сертификации, пользователи могут сталкиваться с регрессиями и новыми ошибками.

3. Драйвера

Ядро RHEL: Red Hat предоставляет поддержку для множества драйверов, специально проверенных и сертифицированных для работы с RHEL. Это позволяет использовать как открытые, так и закрытые драйвера с минимальными рисками несовместимости. Зачастую пользователи могут не беспокоиться о поломках системы при обновлении ядра.

Ядра других дистрибутивов: В других дистрибутивах может быть меньше контроля за качеством драйверов, а новые версии могут содержать регрессии или проблемы с совместимостью. Это может привести к необходимости ручной настройки, что не всегда удобно для конечных пользователей.

4. Обновления безопасности

Безопасность в RHEL: Red Hat предоставляет своевременные обновления безопасности для своего ядра. Важно отметить, что эти патчи могут быть выпущены не так быстро, как в официальном ядре, но они тщательно протестированы на предмет совместимости с существующими системами.

Безопасность других дистрибутивов: Другие дистрибутивы могут выпускать обновления безопасности быстрее, однако они не всегда могут быть протестированы на стабильность. Это делает выбор более рискованным для пользователей, работающих в чувствительных к ошибкам средах.

5. Поддержка сообщества vs. бизнес-поддержка

Поддержка Red Hat: Используя RHEL, пользователи могут рассчитывать на профессиональную поддержку от Red Hat. Однако важно отметить ваш опыт с "самостоятельной поддержкой", который может не всегда обеспечивать своевременные решения проблем.

Сообщество других дистрибутивов: В дистрибутивах, таких как Debian и Ubuntu, поддержка в основном основана на сообществах. Это может быть альтернативой для пользователей, которые могут справляться с некоторыми техническими проблемами самостоятельно и не требуют коммерческой поддержки.

Заключение

RHEL действительно представляет собой дистрибутив, ориентированный на бизнес и стабильность. Однако для пользователей, которым необходимы новые функции, более частые обновления и легкость в управлении, другие дистрибутивы могут предложить лучшее решение. Сравнение RHEL с другими дистрибьюторами подчеркивает важность выбора операционной системы в зависимости от потребностей вашей организации. Визуализация данных, связанных с изменениями в ядре, может помочь принять обоснованное решение о переходе на другой дистрибутив или продолжении работы с RHEL.

Оцените материал
Добавить комментарий

Капча загружается...