Linuxのsystemdが何年も経ってもまだ分裂している理由

公開: 2022-01-29
ラップトップ上の緑色のテキストを含むLinux端末。
fatmawati achmad zaenuri / Shutterstock

systemdは10年前のものですが、Linuxコミュニティでのそれに対する感情はまろやかになりませんでした。これまでと同じように、今では分裂しています。 多くの主要なLinuxディストリビューションで使用されていますが、ハードコアな反対は容赦していません。

Linuxブートシーケンス

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

カーネルはメモリにロードされ、それ自体を解凍して初期化します。 一時ファイルシステムは、通常、 initramfsまたはinitrdと呼ばれるユーティリティによってRAMに作成されます。 これにより、必要なドライバーを決定してロードできます。 これにより、ユーザースペースファイルシステムをロードして、ユーザースペース環境を確立する準備をすることができます。

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

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

広告

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

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

psを使用して、PID 1を持つプロセスを確認できますf (フルフォーマットリスト)およびp (PID)オプションを使用します。

 ps -fp 1 

PID1のプロセスがsystemdであることがわかります。 Manjaro Linuxで同じコマンドを実行すると、異なる結果が得られました。 PID 1のプロセスは、 /sbin/initとして識別されました。 そのファイルをざっと見ると、 systemdへのシンボリックリンクであることがわかります。

 ps -fp 1
 ls -hl / sbin / init 

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

 ps -f --ppid 1 

下の画像でわかるように、これはかなり長いリストです。

代替案

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

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

  • Upstart: Canonicalによって開発され、Ubuntu 9.10、Red Hat、Red Hat Enterprise Linux(RHEL)6、CentOS 6、およびFedora9で使用されました。
  • Runit: FreeBSDおよびその他のBSD派生物、macOS、Solaris、およびLinuxシステムで動作します。 これは、VoidLinuxのデフォルトのinitシステムでもあります。
  • s6-linux-init:このSystem V initの代替品は、Unix哲学に厳密に従うように設計されました。これは、多くの場合、「1つのことを実行し、それをうまく実行する」というサウンドバイトに還元されます。
広告

機能やデザインが異なるものは他にもたくさんあります。 しかし、それらのどれも、 systemdが作成した怒りを作成しませんでした。

systemd Way

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

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

systemdが提供するデーモンのいくつかは次のとおりです。

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

そして、それは氷山の一角に過ぎず、問題の核心でもあります。 systemdは長い間、initシステムに必要なものを上回っています。これは、対戦相手によると、スコープクリープの定義そのものです。

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

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

広告

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

モノリシックではないかもしれませんが、それは大きいです。 スケールのアイデアを得るために、カーネル5.6.15コードベースとGitHubリポジトリのsystemdマスターブランチのテキスト行を数えました。

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

 (./ -name '*。*'-print0 | xargs -0 catを検索します)| wc -l

カーネルには、2800万行近く(正確には27,784,340行)のテキストがありました。 対照的に、 systemdは1,349,969、つまり約140万でした。 幸運な指標を使用すると、 systemdはカーネルの約5%のサイズで出力されますが、これはおかしなことです。

別の比較として、ArchLinuxディストリビューション用のSystemVinitの最新の実装の行数は1,721行になりました。

Poetteringは、米国電気電子学会(IEEE)Computer Societyや、Portable Operating System Interface(POSIX)標準を明らかに考慮していません。 実際、彼は開発者にPOSIXを無視するように勧めました。

「それでは、Linuxプログラミングインターフェイスのコピーを入手し、POSIXの互換性について述べられていることをすべて無視して、すばらしいLinuxソフトウェアをハックしてください。 とても安心です!」

広告

systemdはRedHatにのみ利益をもたらすRedHatプロジェクトであるとの非難がありましたが、それでもより広いLinuxの世界に強制的に供給されています。 はい、それはRed Hat内で誕生し、それによって管理および操作されています。 ただし、1,321人の貢献者のうち、RedHatで機能するのはごく一部です。

では、Red Hatのメリットは何ですか?

かつてRedHatのCEOだったIBMの社長であるJimWhitehurstは、次のように述べています。

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

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

これらは技術的に正しい理由のようです。 会社の信頼性の必要性を理解できます。RedHatが自社の利益に気を配るのは不合理ではありませんが、他のすべての人がそれに従わなければなりませんか?

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

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

しかし、「クールエイドを飲む」というフレーズのように、それは正しくありません。 カルトのリーダーであるジム・ジョーンズが、シアン化物を混ぜたブドウ風味の液体を飲むことで、900人以上の信者に自殺を強要した後、1978年に造られました。このフレーズは、クールエイドを誤って恥じています。 グループは実際にフレーバーエイドを飲みましたが、それ以来、クールエイドはそのブラシによって風袋引きされています。

広告

さらに、LinuxディストリビューションはやみくもにRedHatをフォローしているわけではありません。 彼らは真剣な検討の末、 systemdを採用しています。 議論は長い間Debianメーリングリストで激怒しました。 ただし、2014年に、コミュニティはsystemdをデフォルトのinitシステムとして採用することを決定しましたが、代替手段もサポートすることを決定しました。

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

Debianコミュニティによる決定は広範囲にわたるものです。 彼らはまた活発に議論されており、コンドルセの投票方法を使用することに投票しています。 コミュニティもそのような選択を軽くしません。

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

選択の制限

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

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

広告

もちろん、スペクトルがあります。 一方には、問題を理解していない(または気にかけていない)人々がいて、もう一方には、情熱的な反対者がいます。 真ん中のどこかに、変更は好きではないが、船をジャンプするのに十分気になっていない人がいます。 しかし、彼らの好みや原則のために彼らが選んだ配給にとどまることができない配給難民はどうでしょうか?

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

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

どこにも行かない

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

Debianのようなディストリビューションは賢明なことをしていて、そのオプションを開いたままにするための代替案を調査しています。 ただし、 systemdは長期にわたってその中にあります。

広告

他の人のためにLinuxマシンを管理している場合は、System V initを知っているだけでなく、 systemdについても学んでください。 このように、あなたが遭遇するものに関係なく、あなたはあなたの義務を遂行することができるでしょう。

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

関連: SystemdはLinuxホームディレクトリの動作を変更します