Почему Linux systemd по-прежнему вызывает разногласия после всех этих лет

5 февраля 2021 |

Почему Linux systemd по-прежнему вызывает разногласия после всех этих лет

A Linux terminal with green text on a laptop. fatmawati achmad zaenuri / Shutterstock

systemd 10 лет, но чувства к нему в сообществе Linux не смягчились — сейчас это вызывает такие же разногласия, как и прежде. Несмотря на то, что он используется во многих основных дистрибутивах Linux, жесткая оппозиция не смягчилась.

Последовательность загрузки Linux

Когда вы включаете компьютер, оборудование загружается, а затем (в зависимости от типа загрузочного сектора, используемого вашим компьютером) выполняется либо основная загрузочная запись (MBR), либо единый расширяемый интерфейс микропрограмм. (UEFI) запускается. Последнее действие в обоих случаях — запустить ядро ​​Linux.

Ядро загружается в память, распаковывается и инициализируется. Временная файловая система создается в ОЗУ, обычно с помощью утилиты initramfs или initrd. Это позволяет определить и загрузить необходимые драйверы. Это, в свою очередь, позволяет файловой системе пользовательского пространства загружаться и готовиться к созданию среды пользовательского пространства.

Создание среды пользовательского пространства обрабатывается процессом init, который является первым процессом запускается ядром в пользовательском пространстве. Он имеет идентификатор процесса (PID), равный 1. Все остальные процессы являются прямыми или косвенными дочерними процессами процесса init.

До появления systemd основным процессом инициализации по умолчанию была переработка Unix System V. Были доступны и другие варианты, но System V init был стандартным вариантом в большинстве дистрибутивов, не являющихся производными от Berkeley Software Distribution (BSD). Поскольку он пришел непосредственно из System V Unix — духовного предка Linux, многие люди считают его «официальным способом» выполнения init.

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

Многие из этих фоновых процессов продолжают работать после их запуска. Они занимаются такими вещами, как журнал информации о событиях, отслеживают изменения оборудования при вставке или удалении устройств и управляют входами пользователей. Неудивительно, что система инициализации также включает функции для управления службами.

Мы можем использовать ps, чтобы увидеть процесс, имеющий PID 1. Мы будем использовать параметры f (полноформатный список) и p (PID):

ps -fp 1

Мы видим, что процесс с PID 1 — это systemd. Выполнение той же команды в Manjaro Linux дало другой результат. Процесс с PID 1 был идентифицирован как / sbin / init. Беглый просмотр этого файла показывает, что это символическая ссылка на systemd:

ps -fp 1 ls -hl / sbin / init

Использование ppid (родительский процесс ID) с помощью ps, мы можем увидеть, какие процессы были напрямую запущены systemd:

ps -f —ppid 1

Это довольно длинный список, так как вы можете увидеть на изображении ниже.

Альтернативы

Несколько проектов пытались создать альтернативу традиционному System V init. Одна из основных проблем заключается в том, что в System V init все процессы запускаются последовательно, один за другим. Чтобы повысить эффективность последовательности загрузки, многие альтернативные проекты используют параллелизм для одновременного и асинхронного запуска процессов.

Вот некоторая информация о некоторых из них:

  • Upstart: разработан Canonical, он использовался в Ubuntu 9.10, Red Hat, Red Hat Enterprise Linux (RHEL) 6, CentOS 6 и Fedora 9.
  • Runit: работает на FreeBSD и других производных от BSD, macOS и Solaris, а также в системах Linux. Это также система инициализации по умолчанию в Void Linux.
  • s6-linux-init: Эта замена для System V init была разработана, чтобы точно следовать философии Unix, которая часто сводится к звуковой фразе «сделай одно , и делать это хорошо ».

Есть много других, отличающихся функциональностью и дизайном. Однако ни один из них не произвел фурор systemd.

Путь systemd

systemd был выпущен в 2010 году и использовался в Fedora в 2011 году. С тех пор он был принят во многих дистрибутивах. Его разработали Леннарт Поеттеринг и Кей Сиверс, два инженера-программиста в RedHat.

systemd — это гораздо больше, чем замена init. Скорее, это набор из примерно 70 двоичных файлов, которые обрабатывают инициализацию системы, демоны и службы, ведение журналов и журналирование, а также многие другие функции, которые уже выполнялись выделенными модулями в Linux. Большая часть из них не имеет ничего общего с инициализацией системы.

Некоторые из демонов, предоставляемых systemd:

  • systemd-udevd: управляет физическими устройствами.
  • systemd-logind: управляет логинами пользователей.
  • systemd-resolved: обеспечивает разрешение сетевых имен для локальных приложений.
  • systemd-networkd: управляет и обнаруживает сетевые устройства и управляет конфигурациями сети.
  • systemd-tmpfiles: создает, удаляет и очищает изменчивые и временные файлы и каталоги.
  • systemd-localed: управляет настройками языкового стандарта системы.
  • systemd- machined: обнаруживает и отслеживает виртуальные машины и контейнеры.
  • systemd-nspawn: может запускать команду или другой процесс в облегченном контейнере пространства имен, обеспечивая функциональность, аналогичную chroot.

И это только верхушка айсберга, в которой тоже суть дела.systemd уже давно превзошел все, что требуется от системы инициализации, которая, по мнению ее оппонентов, является самим определением ползучести области видимости.

«Это слишком велико. Это слишком много «.

Противники systemd отмечают большой, любопытный набор функций, которые он включает. Все эти функции уже существуют в Linux, и, возможно, некоторые из них нуждаются в обновлении или новом подходе. Однако объединение всех этих функций в систему, которая должна быть системой инициализации, архитектурно озадачивает.

systemd был назван единой точкой отказа для слишком многих критических функций, но это не похоже оправдано. По общему признанию, он бросает философию Unix о создании небольших инструментов, которые работают вместе, вместо больших программ, которые делают все из окна. Хотя systemd не является строго монолитным (он состоит из множества двоичных файлов, а не одного огромного), он включает в себя множество разрозненных инструментов управления и команд под одной крышей.

Хотя он может и не быть монолитным, он большой. Чтобы получить представление о масштабе, мы посчитали строки текста в кодовой базе ядра 5.6.15 и главной ветви systemd репозитория GitHub.

Это была относительно грубая метрика. Он считал строки текста, а не только строки кода. Итак, это включало комментарии, документацию и все остальное. Однако это было сопоставимое сравнение и дало нам простой критерий:

(find ./ -name ‘*. *’ -Print0 | xargs -0 cat) | wc -l

В ядре было почти 28 миллионов (27 784 340, если быть точным) строк текста. Для сравнения, у systemd было 1 349 969, или почти 1,4 миллиона. С нашей беззаботной метрикой размер systemd составляет около 5% от размера ядра, что безумно!

В качестве другого сравнения, количество строк для современной реализации System V init для дистрибутива Arch Linux составило 1721 строку.

Поеттеринг явно не обращает внимания на Институт электротехники и электроники. Инженеры (IEEE) Computer Society, ни стандарт интерфейса портативной операционной системы (POSIX). Фактически, он призвал разработчиков игнорировать POSIX:

«Итак, возьмите себе копию интерфейса программирования Linux, игнорируйте все, что в нем говорится о совместимости с POSIX, и взломайте свое замечательное программное обеспечение для Linux. Это очень успокаивает! »

Были обвинения в том, что systemd — это проект Red Hat, который приносит пользу только Red Hat, но при этом его принудительно распространяют на более широкий мир Linux. Да, он зародился в Red Hat и управляется им. Однако из 1321 участника только небольшая часть работает в Red Hat.

Итак, каковы преимущества Red Hat?

Джим Уайтхерст, президент IBM, который когда-то был генеральным директором из Red Hat, сказал:

«Red Hat рассмотрела множество доступных вариантов и даже использовала Upstart Canonical для Red Hat Enterprise Linux 6. В конечном итоге мы выбрали systemd, потому что это лучшая архитектура, которая обеспечивает расширяемость, простоту, масштабируемость и четко определенные интерфейсы для решения проблем, которые мы видим сегодня и предвидим в будущем ».

Уайтхерст также сказал, что они видели преимущества также во встроенных системах. Red Hat сотрудничает с «крупнейшими производителями встроенных систем в мире, особенно в телекоммуникационной и автомобильной отраслях, где стабильность и надежность являются приоритетом номер один.

Это кажется технически обоснованным. Вы понимаете потребность компании в надежности, и Red Hat небезосновательно заботится о собственных интересах, но следует ли всем остальным последовать ее примеру?

Выпиваете systemd Kool-Aid?

Некоторые противники systemd говорят, что распространители и люди просто слепо следуют примеру Red Hat и берут его на вооружение.

Однако, как и фраза «пить Kool-Aid», это не совсем верно. Эта фраза была придумана в 1978 году после того, как лидер культа Джим Джонс заставил своих более 900 последователей покончить жизнь самоубийством, выпив жидкость со вкусом винограда с добавлением цианида. Эта фраза неверно позорит Kool-Aid. Группа на самом деле выпила Flavor Aid, но Kool-Aid с тех пор попал в грязь.

К тому же дистрибутивы Linux не слепо следуют за Red Hat, они принимают systemd после серьезных размышлений. В списках рассылки Debian бушевали дебаты. Однако в 2014 году сообщество проголосовало за принятие systemd в качестве системы инициализации по умолчанию, но также за поддержку альтернатив.

Debian — важный пример, поскольку он не является производным от RedHat, Fedora или CentOS. Red Hat не применяет управление Debian. У Debian, как и у PID 1, много потомков, включая Ubuntu и его многочисленные дочерние компании.

Решения, принимаемые сообществом Debian, имеют далеко идущие последствия. Они также активно обсуждаются и голосуют за использование метода голосования Кондорсе. Сообществу тоже нелегко сделать такой выбор.

В декабре 2019 года оно снова проголосовало за то, чтобы сосредоточиться на systemd и продолжить изучение альтернатив. В отличие от слепого следования, это на самом деле хрестоматийный пример демократии и свободы выбора на работе.

Ограничения выбора

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

Люди, которые используют Debian, Fedora, CentOS, Ubuntu, Arch, Solus и openSUSE и возражают против принятия systemd, могут подумать, что они вытесняются из использования по своему выбору. Если они будут достаточно твердо относиться к архитектурному выбору, расширению возможностей или пренебрежению POSIX, они могут счесть несостоятельным продолжать использовать этот дистрибутив.

Конечно, существует спектр. С одной стороны, у вас есть люди, которые не понимают проблемы (или даже не волнуют), а с другой — у вас есть страстные противники. Где-то посередине находятся те, кто не любит перемены, но не слишком обеспокоен этим, чтобы покинуть корабль. Но как насчет беженцев-распространителей, которые не могут оставаться в выбранном дистрибутиве из-за своих предпочтений или принципов?

К сожалению, это не так просто, как просто установить ту систему инициализации, которую вы хотите. Не у всех есть техническая возможность сделать это, не говоря уже о трудностях, которые возникают, когда приложения или среды рабочего стола, такие как GNOME, зависят от systemd.

А как насчет перехода на другой дистрибутив?Некоторые, такие как Devuan, появились как несистемные ветки дистрибутивов (в данном случае Debian), которые приняли systemd. Использование Devuan должно быть похоже на использование родительского дистрибутива, но это не относится ко всем форкам, не относящимся к systemd. Например, если вы покинете Fedora и перейдете на AntiX, Gentoo или Slackware, у вас будет совсем другой опыт.

Это никуда не денется

Мне нравится кое-что из того, что делает systemd (простой и стандартизованный контроль механизмы для процессов). Я не понимаю смысла того, что он делает (двоичные журналы). Мне также не нравится кое-что из того, что он делает (переделка домашних папок — кто об этом просил?).

Дистрибутивы, такие как Debian, поступают умно и исследуют альтернативы, чтобы оставить его варианты открытыми. Однако systemd будет использоваться надолго.

Если вы администрируете машины Linux для других, изучите systemd так же, как вы знаете System V init. Таким образом, независимо от того, с чем вы столкнетесь, вы сможете выполнять свои обязанности.

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

Почему Linux systemd по-прежнему вызывает разногласия после всех этих лет

Tags:

Напишите пару строк: