技術ノート Linux Linux の systemd が何年も経っても意見が分かれる理由

Linux の systemd が何年も経っても意見が分かれる理由

systemd は誕生してから 10 年が経ちますが、Linux コミュニティ内での systemd に対する感情はまだ和らいでいません。今もかつてないほど意見が分かれています。多くの主要な Linux ディストリビューションで使用されていますが、筋金入りの反対派の勢いは衰えていません。

Linux のブート シーケンス

コンピューターの電源を入れると、ハードウェアが起動し、(コンピューターが使用する ブート セクター の種類に応じて) マスター ブート レコード (MBR) が実行されるか、 Unified Extensible Firmware Interface (UEFI) が実行されます。これらの両方の最後のアクションは、 Linux カーネル を起動することです。

カーネルはメモリにロードされ、カーネル自体を解凍して初期化します。 一時ファイル システムは 、通常は と呼ばれるユーティリティによって RAM に作成されます。

 initramfs

または

initrd

。これにより、必要なドライバーを決定してロードできるようになります。これにより、ユーザー空間ファイル システムがロードされ、ユーザー空間環境を確立する準備ができるようになります。

ユーザー空間環境の作成は、ユーザー空間でカーネルによって起動される最初のプロセスである init プロセスによって処理されます。 プロセス ID (PID) は 1 です。他のすべてのプロセスは、init プロセスの直接または間接的な子です。

systemd する前は、init プロセスのデフォルトの主流は Unix System V init を再加工したものでした。他にも選択肢はありましたが、 Berkeley Software Distribution (BSD) 以外のほとんどの派生ディストリビューションでは System V init が標準オプションでした。これは、Linux の精神的な祖先である System V Unix から直接来たものであるため、多くの人がこれを init を実行する「公式の方法」と考えています。

init プロセスは、オペレーティング システムを意味のある対話型の方法で動作させるために必要なすべての デーモン とサービスを開始します。これらのデーモンは、ネットワーク スタックなどを処理し、コンピュータ内の他のハードウェアを有効にし、ブート画面を提供します。

これらのバックグラウンド プロセスの多くは、開始後も実行され続けます。イベント情報のログ記録、デバイスの挿入または取り外し時のハードウェアの変更の監視、ユーザー ログインの管理などを行います。当然のことながら、init システムにはサービスを管理する機能も含まれています。

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

ps ppid (親プロセス ID) オプションを使用すると、どのプロセスが systemd によって直接起動されたかを確認できます。

 ps -f --ppid 1

以下の画像からわかるように、これは非常に長いリストです。

なぜ Linux の systemd は何年も経っても意見が分かれるのか

代替案

いくつかのプロジェクトが、従来の System V init に代わるものを作成しようと試みてきました。主な問題の 1 つは、System V init では、すべてのプロセスが順番にシリアルに開始されることです。ブート シーケンスの効率を向上させるために、多くの代替プロジェクトでは並列処理を使用してプロセスを同時かつ非同期に開始します。

これらのいくつかに関する情報は次のとおりです。

  • 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 のデフォルトの init システムでもあります。
  • s6-linux-init : System V init に代わるこの機能は、 Unix の哲学 に厳密に従うように設計されています。Unix の哲学は、多くの場合「1 つのことを実行して、それをうまく実行する」というサウンドバイトに要約されます。

他にも機能やデザインが異なるものが多数ございます。しかし、 systemd ほどの 騒ぎを引き起こした 人はいませんでした。

なぜ Linux の systemd は何年も経っても意見が分かれるのか

システムのやり方

systemd 2010 年にリリースされ、2011 年に Fedora で使用されました。それ以来、多くのディストリビューションで採用されています。これは、RedHat の 2 人のソフトウェア エンジニアである Lennart Poettering Kay Sievers によって開発されました。

systemd init の置き換え以上のものです。むしろ、これは、システムの初期化、デーモンとサービス、ロギングとジャーナリング、および Linux の専用モジュールによってすでに処理されていた他の多くの機能を処理する、約 70 個のバイナリのスイートです。これらの大部分はシステムの初期化とは何の関係もありません。

systemd によって提供されるデーモンの一部は次のとおりです。

  • systemd-udevd: 物理デバイスを管理します。
  • systemd-logind: ユーザーのログインを管理します。
  • systemd-resolved: ローカル アプリケーションにネットワーク名解決を提供します。
  • systemd-networkd : ネットワークデバイスの管理と検出、およびネットワーク構成の管理を行います。
  • systemd-tmpfiles: 揮発性ファイルと一時ファイルとディレクトリを作成、削除、クリーンアップします。
  • systemd-localed: システムのロケール設定を管理します。
  • systemd-machined: 仮想マシンとコンテナーを検出および監視します。
  • systemd-nspawn: 軽量名前空間コンテナーでコマンドまたはその他のプロセスを起動でき、 chroot と同様の機能を提供します。

そしてそれは氷山の一角であり、問​​題の核心でもある。 systemd とっくの昔に init システムに必要なものを上回っていますが、反対派によれば、これはまさにスコープ クリープの定義です。

なぜ Linux の systemd は何年も経っても意見が分かれるのか

「大きすぎます。やりすぎます。」

systemd の反対者は、systemd が包含する大規模で奇妙な機能の組み合わせを指摘しています。これらの機能はすべて Linux にすでに存在しており、おそらく、そのうちのいくつかは更新または新しいアプローチが必要でした。ただし、このすべての機能を init システムであるべきものにバンドルすることは、アーキテクチャ的に不可解です。

systemd 、あまりにも多くの重要な機能の単一障害点であると言われていますが、これは正当化されないようです。確かに、これは、窓の外ですべてを実行する大きなソフトウェアの代わりに、連携して動作する小さなツールを作成するという Unix の哲学 を投げ捨てています。 systemd 厳密にはモノリシックではありません (単一の巨大なバイナリではなく、多数のバイナリで構成されています) が、1 つの傘下に多数の異種の管理ツールとコマンドが含まれています。

一枚岩ではないかもしれないが、それは大きい。規模を把握するために、カーネル 5.6.15 コードベースと GitHub リポジトリの systemd master ブランチ内のテキストの行数を数えました。

これは比較的大雑把な指標でした。コード行だけでなくテキスト行もカウントしました。したがって、これにはコメント、ドキュメント、その他すべてが含まれます。ただし、これは同等の比較であり、次のような簡単な基準を与えてくれました。

 ( find ./ -name '*.*' -print0 | xargs -0 cat ) |トイレ -l

カーネルには約 2,800 万 (正確には 27,784,340) 行のテキストがありました。対照的に、 systemd 1,349,969、つまり 140 万近くありました。私たちの幸運なメトリクスでは、 systemd サイズはカーネルの約 5% であることがわかりますが、これはとんでもないことです。

別の比較として、Arch Linux ディストリビューション用の System V init の最新の実装の行数は 1,721 行でした。

ポエタリング氏は明らかに 、電気電子学会 (IEEE) コンピュータ協会 ポータブル オペレーティング システム インターフェイス (POSIX) 標準を考慮していません。実際、彼は 開発者に POSIX を無視するよう勧めました

「それで、『The Linux Programming Interface』のコピーを入手して、POSIX 互換性について書かれていることをすべて無視して、素晴らしい Linux ソフトウェアをハックしてください。これでかなり安心できます。」

systemd Red Hat に利益をもたらすだけの Red Hat プロジェクトであるにもかかわらず、より広い Linux 世界に強制的に提供されているという非難があります。はい、それは Red Hat 内で誕生し、Red Hat によって管理され、運営されています。ただし、1,321 人の貢献者のうち、Red Hat で働いているのはほんの一部です。

では、Red Hat にとってのメリットは何でしょうか?

IBMの社長であり、 かつてRed HatのCEOを 務めた ジム・ホワイトハースト氏 は次のように述べています。

「Red Hat は利用可能な多くのオプションを検討し、Canonical の Red Hat Enterprise Linux 6 用 Upstart も使用しました。最終的に systemd を選択したのは、これが拡張性、シンプルさ、スケーラビリティ、そして我々が見ている問題に対処するための明確に定義されたインターフェイスを提供する最良のアーキテクチャであるためです。」今日も、そして将来も予測してください。」

ホワイトハースト氏は、組み込みシステムにもメリットがあると考えていると述べた。 Red Hat は「世界最大の組み込みベンダー、特に安定性と信頼性が最大の関心事である通信および自動車業界」と提携しています。

これらは技術的に妥当な理由のように思えます。企業が信頼性を求めるのは理解できますし、Red Hat が自社の利益を追求するのは不合理ではありませんが、他の企業もそれに従うべきでしょうか?

なぜ Linux の systemd は何年も経っても意見が分かれるのか

systemd クールエイドを飲んでいますか?

systemd の反対者の中には、ディストリビューションと人々が Red Hat の先導を盲目的に追従し、それを採用しているだけだと言う人もいます。

しかし、「クールエイドを飲む」という言葉があるように、それは完全に正しくありません。 1978年、 カルト指導者ジム・ジョーンズ が900人以上の信者にシアン化物を混ぜたブドウ風味の液体を飲んで自殺を強要したことを受けて造られた言葉で、クールエイドを不当に辱めるものである。グループは実際にフレーバーエイドを飲みましたが、クールエイドはそれ以来ずっとそのブラシで汚され続けています。

さらに、Linux ディストリビューションは盲目的に Red Hat に従っているわけではありません。彼らは真剣に検討した結果、 systemd を採用しています。この議論は Debian メーリング リストで長い間激化しました。しかし、2014 年にコミュニティは、デフォルトの init システムとして systemd を採用する 一方で、代替システムもサポートすることを 投票しました。

Debian は、RedHat、Fedora、または CentOS から派生したものではないため、重要な例です。 Red Hat から Debian に適用される制御はありません。そして、Debian には、PID 1 と同様に、Ubuntu とその多くのスピンオフを含む多くの子孫があります。

Debian コミュニティによる決定は広範囲に及びます。また、これらは精力的に議論され、 コンドルセ投票方法 の使用について投票されています。コミュニティも軽々しくそのような選択をするわけではありません。

2019 年 12 月にも、引き続き systemd に焦点を当て 、代替案を模索し続けることに再度投票しました。盲目的に従うこととは反対に、これは実際に職場における民主主義と選択の自由の教科書的な例です。

なぜ Linux の systemd は何年も経っても意見が分かれるのか

選択の限界

通常、特定の Linux ディストリビューションで systemd を使用するかどうかを選択することはできません。むしろ、ディストリビューション自体がそれを使用するかどうかを選択し、ユーザーはどの Linux ディストリビューションを好むかを選択できます。もしかしたら、あなたが愛用している Linux ディストリビューションが systemd に切り替わったかもしれません。お気に入りのミュージシャンがジャンルを変えるのと同じように、これは不快になる可能性があります。

Debian、 Fedora CentOS Ubuntu Arch Solus openSUSE を使用していて systemd の採用に反対している人は、自分が選んだディストリビューションの使用を締め出されていると感じるかもしれません。アーキテクチャ上の選択、スコープのクリープ、または POSIX の無視のいずれかについて強く感じている場合、そのディストリビューションを使い続けるのは耐えられないと感じるかもしれません。

もちろんスペクトルはあります。一方には問題を理解していない(あるいは関心さえ持っていない)人々がいて、もう一方には熱烈な反対者がいます。その中間には、変化は好まないが、変化を気にするほどではない人がいます。しかし、好みや主義のために選択したディストリビューションに留まることのできないディストリビューション難民はどうなるでしょうか?

残念ながら、必要な init システムをインストールするほど簡単ではありません。誰もがそれを行う技術的能力を持っているわけではありません。アプリケーションやデスクトップ環境 (GNOME など) が systemd に依存している 場合に問題が発生することは気にする必要はありません。

別のディストリビューションに移行する場合はどうすればよいでしょうか? Devuan のように、 systemd を採用したディストリビューション (この場合は Debian) の非 systemd フォークとして登場したものもあります。 Devuan の使用は親ディストリビューションと同様である必要がありますが、すべての非 systemd フォークには当てはまりません。たとえば、Fedora を離れて、 AntiX Gentoo 、または Slackware に移行すると、まったく異なるエクスペリエンスが得られることになります。

なぜ Linux の systemd は何年も経っても意見が分かれるのか

どこにも進まない

私は systemd の機能のいくつか (プロセスのシンプルで標準化された制御メカニズム) が好きです。一部の動作 (バイナリ ログ) の理論的根拠がわかりません。また、私はその機能のいくつか ( ホーム フォルダーの刷新 — 誰がそんなことを要求したのでしょうか?) も嫌いです。

Debian のようなディストリビューションは賢明な行動をとっており、選択肢を開いたままにするために代替手段を調査しています。ただし、 systemd 長期にわたって使用されます。

他人の Linux マシンを管理している場合は、System V init を理解しているだけでなく、 systemd についても学習してください。そうすれば、どんな状況に遭遇しても、任務を遂行できるでしょう。

自宅で Linux を使用するだけですか?その場合は、技術的なニーズを満たし、Linux のイデオロギーを補完するディストリビューションを選択してください。

「 Linux の systemd が何年も経っても意見が分かれる理由」に関するベスト動画選定!

これで安心‼Linuxのセキュリティー対策 ~ずんだもんのLinux「使ってみた」第6回~
【Linux 入門】パーミッションを超ざっくり解説!【何となく理解するIT】