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

Однако за без малого двадцать лет наблюдения и пользования «Линуксом» лично я не припомню раскола более страшного, чем тот, что образовался сегодня. По одну сторону встали приверженцы традиционных UNIX-ценностей, по другую — те, кто считает, что настала пора распрощаться с устаревшим философским наследием, оставленным отцами-основателями. И всё это — конфликт init против systemd.

Чтобы читателю, далёкому от технических нюансов, было понятней, о чём речь, стоит сделать краткий экскурс в недра Linux. Самым важным компонентом этой системы считается Ядро: набор функций, которыми пользуются программы, чтобы управлять компьютером и общаться с человеком. Однако прежде чем какая-то работа вообще начнётся, необходимо привести машину в работоспособное состояние, т.е. провести инициализацию. Этим в UNIX занимается процесс с говорящим за себя названием init. Несколько упрощая можно сказать, что «Линуксу» init достался в наследство от всамделишной UNIX System V. В процессе инициализации последовательно выполняются важные проверки, запускаются необходимые системные процессы, а потом и приложения, непосредственно взаимодействующие с пользователем. Когда же работа завершена, именно init выключает компьютер. Такой вот незаметный, но чрезвычайно важный процесс, соперничающий, можно сказать, с самим ядром системы!

Работай Архимед в Linux, он мог бы сказать и так: «Пустите в консоль и я переверну мир!».
Работай Архимед в Linux, он мог бы сказать и так: «Пустите в консоль и я переверну мир!».

Необходимо также знать, что классический инициализатор построен в полном соответствии с философией UNIX. Помните эти правила, сформулированные ещё Томпсоном и Ричи? Составлять сложное из готовых простых «кубиков», не изобретать велосипед — вот к чему они сводятся, если быть кратким. Linux, как прямая наследница UNIX, и есть набор таких кубиков, каждый из которых делает всего одно дело, зато делает его хорошо. Мощь этой операционной системы (её надёжность, защищённость, удобство, функциональность) произрастает не из способностей какой-то одной — суперинтеллектуальной, суперфункциональной — программы, а из взаимодействия тех самых маленьких примитивных компонент, которые просты, а потому понятны, общаются на едином «языке» в форме обычного текста, хорошо отлажены, взаимозаменяемы, могут соединяться друг с дружкой бесконечное число раз. Так же и init собран из кубиков, связанных простыми скриптами.

Подавляющее большинство разработчиков Linux и сегодня придерживаются UNIX-философии. Но не все. «Старики» брюзжат: всё чаще молодёжь вместо того, чтобы опираться на готовые «кубики», пытается решать давно решённые задачи самостоятельно и выдаёт страдающие ожирением программы типа «всё в одном». А общепризнанным лидером этой волны «велосипедов 2.0» стал демон systemd — улучшенная замена init.

Изначально systemd задумывался как более быстрая и элегантная альтернатива классическому инициализатору: скорость достигается за счёт параллельного (а не последовательного) запуска процессов, «элегантность» же проистекает из более «высокоуровневой», «дружелюбной к пользователю» архитектуры (например, скрипты здесь заменены конфигурационными файлами). Это была не первая попытка такого рода, но именно она получила наибольшую поддержку разработчиков и публики. Однако за пять лет существования systemd набрал ровно столько же и врагов!

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

Насчёт «простоты» UNIX, впрочем, тоже есть разные мнения.
Насчёт «простоты» UNIX, впрочем, тоже есть разные мнения.

Init был набором элементарных скриптов, которые можно читать и править в любом текстовом редакторе; systemd — непрозрачная аморфная масса, даже для чтения конфигурационных файлов и логов которой требуются специальные инструменты, внутреннюю работу которой почти невозможно проконтролировать. Баги при таком подходе, естественно, множатся экспоненциально (кто сказал «небезопасно»?), а манера руководителей проекта игнорировать их (и подавлять инакомыслие) вывела из себя даже Линуса Торвальдса. Который нынче весной почти буквально отправил одного из ключевых девелоперов systemd на три буквы: мол, пока не научитесь нормально реагировать на жалобы, принимать от вас ничего не стану.

Впрочем, мнение Линуса и других «пуристов-староверов» (Эрика Реймонда, например) — не истина в последней инстанции. Очень многие в Linux-сообществе считают systemd достаточно интересным проектом, чтобы в нём поучаствовать и его плодами воспользоваться. Так что Linux-вселенная раскололась на две части. Авторы одних программных продуктов и дистрибутивов уже решили опереться на systemd: на него завязан GNOME, перешла Fedora, Arch Linux, отчасти Debian, планирует Ubuntu, минувшим летом мигрировала Red Hat (Леннарт Поттеринг, основатель systemd, кстати, там работает). Но Slackware, Gentoo, CRUX не перешли. И число противников systemd отнюдь не уменьшается со временем.

UNIX-way-2

Повторюсь, само по себе бурление мозгов в Linux-сообществе — явление привычное, естественное. Однако в случае с демоном инициализации результат раскола обещает быть крайне тяжёлым. Особенность здесь в том, что systemd не только начинает, поддерживает и заканчивает работу системы, но и пытается оказывать влияние на приложения, так что дистрибутивы с таким инициализатором могут оказаться несовместимыми с дистрибутивами, которые его не приняли.

В лучшем случае варианты Linux, не принявшие systemd, выделятся в особую категорию, увы, немногочисленную (ведь большинство популярных дистро на systemd уже перешли). В худшем — исчезнут вовсе, а их пользователи покинут лагерь Linux, променяв его, например, на FreeBSD. Где философию UNIX пока ещё помнят и ценят.