Почему systemd в Linux все еще вызывает разногласия после всех этих лет
Опубликовано: 2022-01-29systemd исполнилось 10 лет, но отношение к нему в сообществе Linux не смягчилось — сейчас оно вызывает такие же разногласия, как и прежде. Хотя он используется во многих основных дистрибутивах Linux, ярая оппозиция не уступила.
Последовательность загрузки Linux
Когда вы включаете компьютер, аппаратное обеспечение загружается, а затем (в зависимости от типа загрузочного сектора, используемого вашим компьютером) либо выполняется основная загрузочная запись (MBR), либо запускается унифицированный расширяемый интерфейс встроенного ПО (UEFI). Последним действием обоих из них является запуск ядра Linux.
Ядро загружается в память, распаковывается и инициализируется. Временная файловая система создается в оперативной памяти, обычно с помощью утилиты initramfs
или initrd
. Это позволяет определить и загрузить необходимые драйверы. Это, в свою очередь, позволяет файловой системе пользовательского пространства загрузиться и подготовиться к установке среды пользовательского пространства.
Созданием среды пользовательского пространства занимается процесс init, который является первым процессом, запущенным ядром в пользовательском пространстве. Его идентификатор процесса (PID) равен 1. Все остальные процессы являются либо прямыми, либо косвенными дочерними элементами процесса инициализации.
До systemd
основным процессом инициализации по умолчанию была переработка процесса инициализации Unix System V. Были и другие доступные варианты, но инициализация System V была стандартной опцией в большинстве дистрибутивов, производных от Berkeley Software Distribution (BSD). Поскольку он пришел непосредственно из System V Unix — духовного предка Linux — многие люди считают его «официальным способом» выполнить его.
Процесс инициализации запускает все демоны и службы, необходимые для полноценной интерактивной работы операционной системы. Эти демоны управляют такими вещами, как сетевой стек, включают другое оборудование внутри вашего компьютера и обеспечивают загрузочный экран.
Многие из этих фоновых процессов продолжают работать после запуска. Они выполняют такие функции, как регистрация информации о событиях, отслеживание изменений оборудования при установке или удалении устройств и управление входом пользователей в систему. Неудивительно, что система инициализации также включает функции для управления службами.
Мы можем использовать ps
, чтобы увидеть процесс с PID 1. Мы будем использовать опции f
(полный формат) и p
(PID):
пс-фп 1
Мы видим, что процесс с PID 1 — это systemd
. Выполнение той же команды в Manjaro Linux дало другой результат. Процесс с PID 1 был идентифицирован как /sbin/init
. Беглый взгляд на этот файл показывает, что это символическая ссылка на systemd
:
пс-фп 1
ls -hl /sbin/инит
Используя параметр ppid
(идентификатор родительского процесса) с ps
, мы можем увидеть, какие процессы были запущены непосредственно systemd
:
ps -f --ppid 1
Это довольно длинный список, как вы можете видеть на изображении ниже.
Альтернативы
Несколько проектов пытались создать альтернативу традиционному System V init. Одна из основных проблем заключается в том, что при инициализации System V все процессы запускаются последовательно, один за другим. Чтобы повысить эффективность последовательности загрузки, многие альтернативные проекты используют параллелизм для одновременного и асинхронного запуска процессов.
Вот некоторая информация о некоторых из них:
- 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
был выпущен в 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 ) | туалет -л
В ядре было почти 28 миллионов (27 784 340, если быть точным) строк текста. Напротив, у systemd
было 1 349 969, или почти 1,4 миллиона. С нашей беспечной метрикой размер systemd
составляет около 5 процентов от размера ядра, что безумие!
В качестве другого сравнения, количество строк для современной реализации System V init для дистрибутива Arch Linux составило 1721 строку.
Поэттеринг явно не уважает компьютерное общество Института инженеров по электротехнике и электронике (IEEE) и стандарт интерфейса переносимых операционных систем (POSIX). На самом деле он призывал разработчиков игнорировать POSIX:
«Итак, купите себе экземпляр The Linux Programming Interface, игнорируйте все, что там говорится о совместимости с 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. К Debian не применяется управление Red Hat. И у Debian, как и у PID 1, есть много потомков, включая Ubuntu и множество ее ответвлений.
Решения, принимаемые сообществом Debian, имеют далеко идущие последствия. Они также активно обсуждаются и голосуются по методу Кондорсе. Сообщество также не делает такой выбор легкомысленно.
В декабре 2019 года он снова проголосовал за то, чтобы продолжать уделять внимание systemd
и продолжать изучать альтернативы. В отличие от слепого следования, это на самом деле хрестоматийный пример демократии и свободы выбора на работе.
Ограничения выбора
Обычно вы не можете выбирать, использовать ли systemd
с конкретным дистрибутивом Linux. Скорее, дистрибутивы сами выбирают, хотят ли они его использовать, и вы можете выбрать, какой дистрибутив Linux вы предпочитаете. Возможно, любимый вами дистрибутив Linux перешел на systemd
. Подобно любимому музыканту, который меняет жанры, это может раздражать.
Люди, которые используют Debian, Fedora, CentOS, Ubuntu, Arch, Solus и openSUSE и возражают против принятия systemd
, могут чувствовать, что их лишают возможности использовать выбранный ими дистрибутив. Если они будут достаточно сильно настроены по поводу любого архитектурного выбора, расширения области действия или игнорирования POSIX, они могут счесть несостоятельным продолжать использовать этот дистрибутив.
Конечно, есть спектр. С одной стороны, у вас есть люди, которые не понимают проблемы (или даже не заботятся), а с другой стороны, у вас есть страстные противники. Где-то посередине находятся те, кому не нравятся перемены, но они не беспокоятся о них настолько, чтобы сбежать с корабля. А как быть с беженцами по распределению, которые не могут остаться на выбранном распределении в силу своих предпочтений или принципов?
К сожалению, это не так просто, как просто установить любую систему инициализации, которую вы хотите. Не у всех есть для этого технические возможности, не говоря уже о трудностях, возникающих, когда приложения или среды рабочего стола, такие как GNOME, зависят от systemd
.
Как насчет перехода на другой дистрибутив? Некоторые, такие как systemd
, появились как несистемные ответвления дистрибутивов (в данном случае Debian), которые приняли systemd
. Использование Devuan должно быть похоже на родительский дистрибутив, но это не относится ко всем форкам, отличным от systemd
. Например, если вы покинете Fedora и перейдете на AntiX, Gentoo или Slackware, у вас будет совсем другой опыт.
Это никуда не денется
Мне нравится кое-что из того, что делает systemd
(простые и стандартизированные механизмы управления процессами). Я не понимаю смысла того, что он делает (двоичные журналы). Мне также не нравятся некоторые из его действий (обновление домашних папок — кто просил об этом?).
Такие дистрибутивы, как Debian, делают умные вещи и изучают альтернативы, чтобы оставить свои возможности открытыми. Тем не менее, systemd
в этом надолго.
Если вы администрируете Linux-машины для других, изучите systemd
так же хорошо, как вы знаете System V init. Таким образом, независимо от того, с чем вы столкнетесь, вы сможете выполнять свои обязанности.
Просто использовать Linux дома? Если это так, выберите дистрибутив, который соответствует вашим техническим потребностям и дополняет вашу идеологию Linux.
СВЯЗАННЫЕ: Systemd изменит работу вашего домашнего каталога Linux