Поиск по сайту:

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


systemd исполнилось 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 ) параметры:

ps -fp 1

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

ps -fp 1
ls -hl /sbin/init

Используя параметр 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 — это гораздо больше, чем замена инициализации. Скорее, это набор примерно из 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) и стандарт интерфейса переносимых операционных систем (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.

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

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

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

Такие дистрибутивы, как Debian, делают умные вещи и изучают альтернативы, чтобы оставить свои возможности открытыми. Тем не менее, systemd здесь надолго.

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

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