systemd とUnix界における鬼子

いまさらながら賛否両論*1のsystemdについての所感。後半はちょっとしたヨタ話。systemd何それって人はスルーで。

systemdって何ですかっていう話は書かないので悪しからず。


個人的な感想

Arch Linux およびUbuntu 15.04 でsystemdを利用したうえでの感想。

サービス管理コマンドとして

この辺は慣れの問題。service コマンドがsystemctl に変わって、コマンド出力がごちゃごちゃと賑やかになって…。まあそれだけの話。

systemctl list-unit-filesとかsystemctl daemon-reloadとかもろもろ覚えられなくてしょっちゅうGoogle先生に泣きついてますけどね。


ログ管理について

ログがバイナリ? おいおいまさかWindowsEclipseJavaの三点セットで育った現代っ子かよ。 それともどこかの計測機器かよ、アスキー変換するのかよって感じですが。
冗談はさておき、このあたりはディストリビューション次第。なぜいちいちjournalctl なんだ? という疑問はあるし、Unix的ではないという意見には同意する。

なぜもっと短いコマンド名にしなかったんだと小一時間…。

サービス管理について

一番のsystemdの利点は、サービス(バックグラウンドで動作するプログラム、いわゆるデーモン)を自動起動させたい時。いわゆる自動起動スクリプトをつくるとき。systemd登場以前の、SysV系だと一種のシェルスクリプト書く必要があった。

ちょうどいいネタがないので、FastLadder の起動・終了スクリプトで。 例えばGentto Linux*2のOpenRCの場合だと、FastLadder の起動・終了スクリプトは適当に書くと40行ぐらいのシェルスクリプトになる。ものによってはもっと複雑になってしまう。

他方、systemdなら大幅に記述量を減らせる。

unit file for unicorn(falstladder)

比較対象。ちょっと起動コマンドが違うけど。

fastladder-unicorn · GitHub

起動コマンドがちょっと違うけど、記述量が半分弱。典型的なデーモンプロセスなら、そんなに難しくない。

たぶんパッケージメンテナ側からしたら断然楽。両方面倒見ろとか言われたらさすがに嫌かもしれないけど。

結論

総論賛成各論反対ですね。systemdのような何かが必要なのは時代の要請なんでしょう。ログがバイナリってのだけはちょっとね。Ubuntuはsyslogに出力される設定になっているのでまあいいですが。起動時間云々は個人的にはどうでもいいです。 そもそも、Arch LinuxGentoo Linuxにしてみれば、初期状態では余計なサービス自体、存在しませんから。

今のところトラブルには遭遇していないので、便利なのは便利かと。コマンドをすぐ忘れるのはともかく。

鬼子について

ここから本題。伝統的なUnixのソフトウェアに対する考え方は、「一つのことを上手くこなすシンプルなプログラムをつくれ」というもの。 このシンプルなプログラムをいろいろと組み合わせて目的を達成する、というのがUnixの哲学思想。

これがUNIXの哲学である。
一つのことを行い、またそれをうまくやるプログラムを書け。
協調して動くプログラムを書け。
標準入出力(テキスト・ストリーム)を扱うプログラムを書け。標準入出力は普遍的インターフェースなのだ。

— M. D. マキルロイ、UNIXの四半世紀

UNIX哲学 - Wikipediaより引用。


ところがこの基本思想に当てはまらない著名なプログラムがいくつか存在する。 典型例はEmacs。一般的な分類はテキストエディタでありながら、「Emacsはエディタ(Editor)ではない、環境(Environment)である」と言われるほど。 ラーメンであれば、まあ「二郎」*3とでもいうべきか。エディタと見せかけてインラインで画像を表示するとか、Webブラウザになったりとか、まさに鬼子。日本鬼子ではなくて、異端児という意味で。

もう一つ、Unix界における代表的鬼子はPerlだと思う。sedawkの組み合わせでは面倒だった課題を解決するために生まれた元祖スクリプト言語。 従来であれば複数のコマンドをシェルスクリプトでつなげて実現していた処理を、ひとつの閉じた世界の中で実現できる。 テキスト処理という観点ではUnix的、なんだけどUnixの哲学から言えば異端。Emacsのように環境となっている。

この文脈だとPythonRubyも鬼子。Unix的ではあるけど、Unix哲学とは少し外れる。なぜかというともはや十分に巨大だから。

Node.jsとか挙げればキリがないけど、これもPerlの落とし子ってことで一括りにしておく。

さて、Unix界に近年稀に見る鬼子が登場した。もちろsystemdである。どうみても鬼子の中のサラブレッド。 SysVinitという既存のソリューションでは上手く対応できない課題を解決しようとして開発されたという点ではPerlに似ている。

やはり、Unix界におけるイノベーションには鬼子が不可欠なのではないかと思う今日この頃*4

systemd と赤い彗星

systemdとかけて、赤い彗星ととく。

してその心は?



(起動速度が)通常3倍


………お後がよろしいようで。すいません、おそらく起動時間30%短縮ぐらいではないでしょうか。どうなんですかねぇ。

解説

systemdは鬼子です。ユーザの本当の望みを歪めて受け止めて、自分ができるなんて。キャスバル兄さんUnixじゃありません」

起動時間短縮云々とか、鬼子つながりで。すいません。これがやりたかっただけです。

dic.nicovideo.jp

いわゆるひとつの、「若さゆえの過ち」ってことで。

最近のRHELについて

正直に言って興味がわかないです。全然来ないんですよ。期待感みたいなものが。

  • NetworkManager
  • systemd
  • firewalld

この3点セット、穿った見方をするなら、LinuxWindows Server 化ですよ。Windows Server の経験のあるユーザがスムーズにRHEL移行できるように、上っ面だけWindowsのようにしてしまおうとしているのではないでしょうか。既存ユーザを蔑ろにして。systemdはともかく、他の2つはちょっとね。 RHELはサーバー用途でしょうに。



そんなRHELは願い下げです。まあRHELも黄昏時なのか。

ではでは。

*1:もうみんな慣れてるのかな?

*2:もちろんGentooでもsystemdは利用できる

*3:あれは二郎という食べ物だとか云々

*4:systemdはLinux用だけど、BSD陣営も似たようなものを作ろうとしているらいいのでひとまとめで