СоХабр закрыт.

С 13.05.2019 изменения постов больше не отслеживаются, и новые посты не сохраняются.

| сохранено

H Почему systemd — это плохо? в черновиках Из песочницы

Это перевод текста с сайта boycottsystemd.org.

Вокруг systemd уже несколько лет ходят «холивары». Systemd пришел к нам на замену System V Init в Linux. Есть как сторонники systemd, так и его противники. Давайте рассмотрим, чем же так плох systemd:

1. Systemd нарушает философию Unix «Делать одну вещь и при этом хорошо», представляя просто сложный набор малосвязных бинарников. Его зона ответственности давно уже выросла за рамки системы инициализации и начинает распространяться на управление питанием, устройствами, точками монтирования, cron-ом, шифровнием диска, API сокетов, журналами (syslog), конфигурацией сети, управлением сессиям, предчтение(readahead), определение разделов, регистрация контейнеров [виртуализация], управление именем хоста-временем-локалью, mDNS/DNS-SD, консоли Linux и прочие штуки — все в одном. На повестке дня — дальнейшее расширение systemd и его внедрение в среду GNU/Linux было выяснено во время «2014 GNOME Asia talk». Дайте нам KISS.

2. Журналы systemd (для journald) сохраняются в очень сложном бинарном формате и могут быть запрошены только journalctl. Это делает журналы потенциально повреждаемыми и они не имеют ACID-совместимых транзакций. Вы бы не хотели, чтобы с системными журналами что-то произошло. Совет от systemd разрабов? Забейте. Единственный путь создать традиционные логи — это запустить syslogd как rsyslog вместе с journald. Так же там есть встроенный HTTP сервер. QR коды тоже можно отдавать через него, с помощью libqrencode.

3. Так как systemd очень завязан на API ядра Linux, разные версии systemd несовместимы с разными ядрами и портируемость бессмысленно снижена в разных компонентах. Это политика изолирования [systemd], которая, конечно же, вгоняет экосистему Linux в свою собственную клетку, работая как препятствие в разработке портируемого ПО как с Linux, так и Unix-деривативами. Так же это пораждает трудности с бекпортированием изменений в системой длительной поддержки.

4. udev и dbus становятся обязательными зависимостями. По факту, udev был влит в ветку systemd очень давно. Интеграция менеджера «device node»( который был частью Linux ядра) — это нелегкое решение. Здесь высокая политическая подоплека (имеется в виду политика разработчиков) и много пакетов, зависящих от udev, стали зависимы от systemd, несмотря на форки вроде eudev. Начиная с systemd-209 разработчики ввели собственный нестандартный и малодокументированный sd-bus API, который замещает некоторые задачи libdbus. Далее они решили перенести udev на этот новый транспорт, заменили Netlink и сделали udev наглухо привязанным к systemd демоном. Эффект, конечно, значителен.

5. systemd представляет хелпер который снимает coredump-ы (дампы ядра) и перенаправляет их либо в /var/lib/systemd/coredump либо в journal, где они должны быть запрошены через coredumpctl. Последнее, причем — было поведением по умолчанию и его похоже вернут. Это означает, что пользователей и админов держат за идиотов, но более важно, в основе своей склонная к повреждениям природа логов journald превращает это в серьезную помеху и безответственный выбор при дизайне системы. Также это может создать усложнения в многопользовательских средах в плане привелегий.

6. Размер systemd (видимо, в файлах и мегабайтах — прим.пер.) превращает его в большую «единственную точку отказа». На момент написания systemd имел 9 отчетов CVE (уязвимости) с начала внедрения в марте 2010. Вроде и не много, но его всепроникающая (в плане ответственности за компоненты) и важная суть может стать лакомым кусочком для взломщиков, так как его широта поменьше чем ядро, но настолько же критично по последствиям (прим. пер. — по мне так это уже лицемерие и лукавство.)

7. systemd имеет вирусный характер, его расширения добавляют новые API, но продолжая зависеть именно от его инициализации. Его охват функциональности и расползание как зависимость по куче пакетов означает, что мейнтейнеры дистрибутивов будут обязаны вынуждать переход или сносить напрочь (старое). Например, GNOME обычно использует компоненты systemd вроде logind и поддержка не-systemd систем становится сложной. Под Wayland GNOME использует logind который снова заставляет использовать systemd. Все больше мейнтейнеров прописывают в зависимости systemd по этой причине. Быстрый рост в принятии в такие дистрибутивы, как Debian, Arch Linux, Ubuntu, Fedora, openSUSE показывает, что многие пытаются запрыгнуть в уходящий поезд, иногда бездумно (может тут не точно перевел). Например, странно, что от него зависят Weston compositor, Polkit, upower, udisks2, PackageKit, и тп. Так же ничего особо не дает то, что systemd не хочет запускаться под пользователем.

8. systemd запускает (clusters — теснится, толпится — прим. пер.) себя под PID 1, вместо того чтоб работать как отдельный гипервизор процессов. Так как он контролирует кучу компонентов, существует тьма вариантов, в которых он может помереть (закрашиться) и отправить в небытие всю систему (см. выше про точку отказа). Мы так же отмечаем, что чтобы снизить надобности перезагрузки, systemd предоставляет механизм для перезапуска systemctl в реальном времени. Но если с ним чего не так, то система опять идет крахом. Так же есть разные пути, как это может произойти, включая невозможность прочитать предыдущее несовместимое состояние. Это, похоже, другой пример SPOF (одна точка отказа) и ненужном бремени в и так уже критичном комноненте (init).

9. systemd разработан с glibc-в-уме и не особо поддерживает другие libc-ы. В общем, идея разрабов systemd в стандартной libc библиотеке — та, что баг-в-баг повторит glibc.

10. Сложная «душевная» организация systemd (метафора пер.) делает очень сложной расширение за пределами его собственных рамок (среды) разработки. В то время, как запустить шел скрипт из файлов модулей как-то можно, весьма сложно написать реализацию поведения, которая идет из коробки, с учетом всех этих крутых фич. Много пользователей чаще хотят написать сложные программы, которые прямо взаимодействуют с API systemd, или даже модифицировать (его исходники). Кто-то может побеспокоиться о большом количестве путей в коде в критичной для системы программе, включая возможность того что systemd не синхронизируется с шиной сообщений при загрузке и зависнет. Это противоположно традиционному иниту, который определяем и предсказуем по архитектуре.

11. В конечном счете, распространение systemd символично чуть больше чем просто systemd. Оно показывает радикальный сдвиг в мышлении сообщества Linux. И не обязательно позитивном. Это сдвиг по большей части оринтирован на десктоп, ограничивает выбор, изоляционистский, велосипедостройный и просто огромно-антипаттерный. Если ваша задача потворствовать наименьшему делителю, делайте это. Но мы посмотрим в какую-то другую сторону.

12. systemd вообще похоже не знает что за хренью он хочет быть. Он иногда описан как «system daemon» или как «базовый блок в пространстве пользователя чтобы сделать ОС», оба термина слишком неоднозначны. Он поглощает функциональность которая пренадлежала util-linux, беспроводным инструментам (wireless tools), syslog и прочим проектам. У него нет четкого направления, кроме как причуды самих же разработчиков. Что забавно, несмотря на цели по стандартизации дистрибутивов Linux, у него нет четкого стандарта и он по сути просто катится, как перекати-поле.

комментарии (26)

+1
+2 –1
Disasm ,  
Предлагаю поставить «перевод» и ссылку на boycottsystemd.org/
+2
Meklon ,  
Вроде из песочницы не вариант оформлять как перевод.
+5
flexoadm ,   * (был изменён)
Все кончится тем, что опять появится куча форков, c systemd и без него. ((
–21
+1 –22
Disasm ,  
И выживут те, которые с systemd
+4
+5 –1
flexoadm ,   * (был изменён)
И ms и фряху и кого только не хоронили и ничего, живут и здравствуют. Так же и тут, жить будут и те и другие, просто опять вместо консолидации сил сообщества побьются на два лагеря и каждый будет пилить то что ему по душе плюясь в сторону других.
–8
+3 –11
tyderh ,   * (был изменён)
Мне (и не только мне: boycottlinux.org/) все это очень напоминает критику, которая обрушилась на Линуса, когда он опубликовал своё ядро.

Тем временем systemd (как и Linux в свое время) стремительно набирает популярность, доказывая свою эффективность и валидность, решая большое количество неисправленнных и неисправимых в других инитах проблем.

Вот, кстати, еще одна ссылка: Самые серьезные мифы о systemd

Скрытый текст
systemd — не инит. Вообще, чем дальше, тем больше systemd напоминает мини-BSD — некое едино разрабатываемое ядро операционной системы. Только, в отличие от *BSD, не ставится задача сделать универсальную ОС, а только центральную системную часть с минимально необходимым прикладным уровнем, который уже по потребностям заменяется на «внешние» пакеты. Десктоп стоит дома и втыкается в роутер — накой ему ntpd и networkmanager? Ноут, аки блудница, мечется от одного вайфая к другому — а тут в дело входит NM. Нужен бэкап хомяка раз в день — хватит и таймеров системд, сервер с кучей регламентных задач — а тут уж полноценный крон нужен. И т.д. и т.п.
–7
+3 –10
sledopit ,  
Ну вот, понапишут всяких минусов про systemd, Леннарт начитается этой фигни и постит про замечательное опен сорс сообщество, которое деньги на хитмана собирает :)
зы. Как бы я не относился к systemd, но в некоторых моментах про сообщество он чертовски прав.
+6
spanasik ,  
Сначала он натягивает сообщество, а потом возмущается, что идёт ответная реакция.
–1
sledopit ,  
Ну я как бы не утверждаю, что негатив возник на пустом месте. Но сбор на киллера, вы серьёзно?
+2
spanasik ,  
Я бы не стал обвинять всё сообщество в сборе денег на киллера. Часть не является целым, по определению.

Что, кстати, в случае с systemd не работает. Он, как часть, хочет быть неотъемлемым элементом целого, против чего как раз и выступают многие.
+5
JiLiZART ,   * (был изменён)
Интересно, почему основной разработчик systemd сам этого не видит? Почему не вступить в диалог и не обсудить все?
+10
hungry_ewok ,  
/me включает жизненный цинизм и вспоминает старую байку про сантехника который устроился в организацию, переделал всю сантехнику так, что разобраться в переделанном мог только он, и уволился. А через месяц устроился обратно, но уже на заметно бОльшую зарплату. Потому что только он мог в этом разобраться и поддерживать…
0
JiLiZART ,  
Хорошая байка, но в таком коде и сам программист через пару месяцев не разберется, если так сделает.
0
hungry_ewok ,  
Ну, байка иллюстрирует сам принцип.
А так — код, конечно, может быть и читаемым и понятным, но пилить аналог такой всепорникающей и многогранной утилиты, на которую завязана куча сторонних сервисов и поддерживать его в актуальном состояниии к фичам оригинала по определению будет способна только одна большая команда. Которая есть только у редхата. Соответственно — рх становится де-факто монополистом и законодателем мод, что всегда приятно и выгодно.
+1
+3 –2
tyderh ,  
Например, GNOME обычно использует компоненты systemd вроде logind и поддержка не-systemd систем становится сложной.

Они используют эти компоненты, потому что иначе им бы пришлось писать свой велосипед. И вообще, ситуация с единственной альтернативой logind очень и очень печальна. Так же считает и разработчик KDE:

Да, kwin_wayland использует интерфейсы logind DBus. Не потому, что мы хотим «зависеть от systemd» или по любой другой $злой причине, просто logind очень хорошо решает проблемы, которые перед нами возникают, и никакой другой проект не способен этого сделать. Не нравится logind? Отлично, сделайте подобный интерфейс и kwin_wayland обязательно его используйте. Или предоставьте и поддерживайте патчи, отучающие kwin_wayland от использования logind.
+40
WraithOW ,  
Эм, т.е. вы сейчас взяли чужой комментарий, добавили туда заглавных букв, запятых (удалив при этом пару нужных), и запостили как свою статью?
Щикарно.
+4
ZeroBit ,  
Также лучше при копипастинге читать статью, чтобы исправить орфографические ошибки, если уж «спелчикен» не работает. Я про
пораждает
из п.3.
+2
mapron ,  
Да, справедливости ради, я этот коммент писал в спешке, в блокноте, не перечитывал вообще после перевода, не проверял спеллчеком =) Ибо коммент, чего и заморачиваться сильно. Но досадно, да, что такие тупые ошибки допустил.
+9
MaximChistov ,  
Помнил же, что где-то видел это, не мог только вспомнить где…
В бан за воровство отправлять надо имхо
+5
ruikarikun ,  
Мне вообще казалось, что я всё это в виде статьи читал уже, а это был комментарий оказывается.
+3
mapron ,  
Ой, не заметил Ваш комментарий, да, написал ниже, и досадно и радостно одновременно.
+12
mapron ,   * (был изменён)
Это мой комменарий был =(
Спасибо конечно, за вычистку и редактуру, я очень признателен, но легкая обида присутствует.
–2
+3 –5
tangro ,   * (был изменён)
Перефразируем весь этот опус: «Автомобиль — это плохо. Вот лошадь — это хорошо. На лошадях ездили наши отцы, деды. Лошадь, она простая — покормил, напоил и катайся! А автомобиль сложный, шумный, бензин ему какой-то нужный. Ну да, ездит быстро, но как там внутри всё сложно! И куда к нему прицепить подковы? Как разводить „племенные“ автомобили? А что станет с кучерами и конюхами вы подумали? Мы — против автомобилей!»
+2
demimurych ,  
Не вполне.
В случае автомобилей и лошадей присутствует ретроградство. Автомобили это прогресс — альтернатив эквивалентным им не было. Как ты не подковывай лошадь она эффективнее автомобиля быть не может.
В случае системд альтернатив много, и альтернативных направлений развития так же.
+1
hungry_ewok ,  
Неправильное сравнение.
Меняется автомобиль на автомобиль.
Но если в старом агрегаты были отдельными и поддавались ремонту и замене при помощи логики и такой-то матери, то в новом все глянцево-красиво-молодежно но для замены лампочки в фаре надо разобрать полдвижка, потому что все-в-одном. При этом конструкторы не собираются останавливаться на достигнутом…
+9
mapron ,  
Да, если бы автор убрал все мои разговорные словечки и поправил стилистику, например
«systemd вообще похоже не знает что за хренью он хочет быть.»
на
«systemd, похоже, не знает, что за вещью он хочет быть.»
и прочие места, то я бы воспринял это с благодарностью. А так много косяков сохранено…