Systemd

systemdはLinuxディストリビューションのシステム管理を担うソフトウェア群。
2010年にRedHat社のエンジニアらにより、UNIX System VやBSDから継承されたSystem V initを置き換えることを目指し開発された。Linux用に設計され、Linux API専用にプログラミングされている。GNU Lesser General Public License (LGPL) version 2.1以降という条件で自由なオープンソースソフトウェアとして公表されている。
著者によるとオペレーティングシステムの「基本的な積木」であると評され、デーモン・ライブラリおよび各種ユーティリティで構成される。
systemdという名前はファイル名の最後尾にdという文字を付けることでデーモンを区別しやすくするというUNIXの慣習を受け継いでいる。また、この名称は言葉遊びの側面もあり、「System D」はフランスの俗語で「状況に迅速に適応し問題を即興で解決する個人の能力」を意味する。ここでの「D」は「débrouille＝なんとかする」の頭文字である。
systemdの設計は自由ソフトウェアコミュニティにおける重要な論争の元となった。systemdのアーキテクチャはUNIX哲学に反しており最終的に相互依存でがんじがらめの塊を作ってしまうと指摘されたのである。しかし、結局、主要なLinuxディストリビューションのほとんどは、systemdをデフォルトのinitシステムとして採用した。

**設計**
Tizenで使われているsystemdのアーキテクチャ。telephony、bootmode、dlogおよびtizen serviceなどのコンポーネントはTizen出身でありsystemdのコンポーネントではない。
統合階層のcgroupsにはsystemdのみがsystemd-nspawnでアクセスできる。
初期のsystemdはLennart PoetteringとKay Sieversによって開発された。彼らはinitデーモンより効率的な仕組みを作ることを意図し、システムのブート中にたくさんの処理を並行または並列に行えるようにし、シェルのオーバーヘッドを減少させるために、依存関係を表現できるようにそのソフトウェアフレームワークを改良したいと思っていた。
Poetteringはsystemdの開発を「決して終了せず決して完成しないが、技術の進歩を追い求める」ことと述べている。2014年5月にPoetteringはさらに進んで、systemdは以下の3つの一般的な機能を提供して「ディストリビューション間の無意味な違い」の統合を目指すものであると定義した:- システムとサービスマネージャ（様々な設定を適用することでシステムとそのサービスを両方管理する）- ソフトウェアプラットフォーム（他のソフトウェアの開発基盤となる）- アプリケーションとLinuxカーネルとの接着剤（カーネルが提供する機能をさらけ出す様々なインタフェースを提供する）
systemdは単なるinitデーモンの名前ではなく、systemd initデーモンに加えjournald、logindおよびnetworkdの各デーモンとそれ以外の多くの低レベルコンポーネントを含む、ソフトウェアバンドル全体を指している。2013年1月、Poetteringはsystemdは1つのプログラムではなく、69個の個別バイナリから成る巨大なソフトウェア一式だと述べた。systemdは統合されたソフトウェアスイートとして、伝統的なinitデーモンが自身の制御の元で実行するシェルスクリプトと協力して制御していた起動過程とランレベルを置き換える。その他にもsystemdは、ユーザーログイン、システムコンソール、デバイスホットプラグ（udevを参照）、計画された実行（cronを置き換える）、ロギング、ホスト名およびロケールを処理することで、Linuxシステムで共通するサービスの多くを統合する。
はinitデーモンのように、systemd自身を含むバックグランドプロセスである全てのデーモンを管理するデーモンである。systemdはブート中に開始される最初のデーモンであり、シャットダウン中に終了される最後のデーモンである。systemdデーモンはユーザー空間のプロセスツリーのルートとなる。最初のプロセス (pid 1) は（親プロセスから分離した）デーモンプロセスが終了した際にSIGCHLDシグナルを受け取るため、UNIXシステムでは特殊な役割を持つ。このため、最初のプロセスはデーモンをモニタリングする目的のために特に適している。systemdはこの領域において、デーモンを自動的に再起動するのではなくデーモンを一度だけ開始してモニタリングをしないという伝統的なアプローチよりも改善しようとしている。
はその起動過程の要素を並行に実行する。それは伝統的な起動過程のシーケンシャルなアプローチよりも高速である。プロセス間通信 (IPC) のため、systemdはUNIXドメインソケットとD-Busを実行しているデーモンから使えるようにする。将来の再呼び出しに備えて、systemd自身の状態をスナップショットに保存することもできる。

**ユニットファイル**
は伝統的に使われるデーモンごとの起動シェルスクリプトを置き換えるため、宣言型言語を使う設定ファイル（これを「ユニットファイル」と言う）に各デーモン用の初期化命令を記録する。ユニットファイルの型にはservice、socket、device、mount、automount、swap、target、path、timer（cronライクなジョブスケジューラとして使用できる）、snapshot、sliceおよびscopeなどがある。

**コアコンポーネントおよびライブラリ**
systemdは統合されたアプローチに従い、起動シェルスクリプト、pm-utils、inetd、acpid、syslog、watchdog、cronおよびMono|atdなどの様々なデーモンやユーティリティの代替も提供する。systemdのコアコンポーネントには以下が含まれる:- systemdはLinuxオペレーティングシステム用のシステムおよびサービスマネージャである。- systemctlはsystemdのシステムおよびサービスマネージャの状態を監視し制御できる。- systemd-analyzeはシステムブートアップパフォーマンス統計を決定し、システムおよびサービスマネージャからの他の状態と追跡情報を回収することために使うことができる。
MACHINECTL
はプロセス識別子 (PID) ではなくLinuxカーネルのcgroupsサブシステムを使うことでプロセスを追跡する。このため、デーモンは2回forkしてもsystemdから逃れることができない。systemdはcgroupsだけを使うのではなく、ソフトウェアコンテナの作成と管理を容易にするユーティリティプログラムであるsystemd-nspawnとmachinectlによりcgroupsを強化する。バージョン205から、systemdはそのLinuxカーネルcgroupsへのAPIであるControlGroupInterfaceも提供する。Linuxカーネルcgroupsはkernfsをサポートするよう改造されており、さらに統一された階層構造をサポートするよう修正中である。

**補助コンポーネント**
systemd一式はLinux initシステムの代替を提供することを第一の目的としているが、それ以外にも以下のコンポーネントを含む追加機能を提供する:
 
 systemd-consoledはユーザーコンソールデーモンを提供し、Linuxカーネルの仮想コンソールサポートをより能力のあるユーザー空間コンポーネントで置き換えようとしている。systemd-consoledのプレビューバージョンは2014年10月にsystemd バージョン217の一部としてリリースされた。
 
 systemd-journaldはイベントロギングを担当するデーモンであり、そのログファイルは追加専用のバイナリファイルである。システム管理者はシステムイベントのログ出力をsystemd-journald、Mono|syslog-ngまたはMono|rsyslogのどれで行うかを決めることができる。
 
 systemd-logindは様々な方法でユーザーログインとシートを管理するデーモンである。これはマルチシートの改善を提供し既に保守されていないConsoleKitを置き換える、統合されたログインマネージャである。XディスプレイマネージャにおいてConsoleKitをlogindに置き換えるのは最小限の移植で済む。これはsystemdバージョン30で統合された。
 
 networkdによりsystemdは様々なネットワーク設定を行うことができる。バージョン209でnetworkdが最初に統合された時、静的に割り当てられたアドレスしかサポートせず、さらにブリッジ設定の基本的なサポートしかなかった。2014年7月に、IPv4ホストのDHCPサーバーやVXLANサポートといった新機能を追加したsystemdバージョン215がリリースされた。
 
 systemd-timedatedはシステム時間、システムタイムゾーン、またはUTCとローカルタイムゾーンシステムクロックとのどちらかの選択といった時間関連設定のコントロールに使えるデーモンである。D-Busでアクセスできる。systemdバージョン30で統合された。
 
 udevはLinuxカーネル用のデバイスマネージャである。udevは/devディレクトリを処理し、さらにデバイスの装着および脱着時におけるファームウェアのロードなどのユーザー空間アクションを全て処理する。2012年4月、udev用のソースツリーがシステムソースツリーにマージされた。
 
 libudevはudevを利用するための標準ライブラリで、これによりサードパーティアプリケーションがudevリソースを照会できる。

**他のソフトウェアとの統合**
systemdとGNOMEデスクトップ環境との相互運用性を向上させるため、systemdの共著者であるLennart PoetteringはThe GNOME Projectに対し、systemdをGNOME 3.2の外部依存にすることを考慮するよう要請した。
2012年11月にThe GNOME Projectは、基本的なGNOME機能はsystemdに依存すべきでないとの結論を出した。しかしGNOME 3.8では当時systemdのみが提供していたlogindと、ConsoleKit APIとのどちらかをコンパイル時に選べるようになった。Ubuntuは独立したlogindを提供したが、ほとんどのLinuxディストリビューションにおいてはsystemdは事実上GNOMEの依存ソフトウェアになった。こうなったのはConsoleKitがもはや保守されている状態ではなく上流ではsystemd-logindの使用を推奨していることが主な理由である。Gentoo Linuxの開発者達もOpenRCをこれらの変化に対応させようとしたが、その実装には多くのバグがあったため、systemdをGNOMEの依存ソフトウェアにした。
GNOMEはさらにlogindを統合した。Mutterはバージョン3.13.2現在、Waylandセッションにおいてlogindを依存ソフトウェアとしている。gnome-sessionをsystemdに置き換える計画があるが、systemdはPID 1として実行されないでさらにgnome-sessionはLinux以外のシステムでも利用できるままである。systemdはLinuxカーネルAPIを大量に使うため、Linuxしかサポートせず他のオペレーティングシステムへの移植は容易ではない。このため、OpenBSDのようなLinux以外のオペレーティングシステムは互換APIを提供する必要がある。
2014年9月のZDNetのインタビューでセオドア・ツォーは、技術的な課題よりも多いsystemdの中央集権型設計哲学をめぐる議論は、Linux生態系の均一化に向かう危険な一般的傾向の兆候であり、オープンソースコミュニティのあちこちを疎外して排斥することで代替プロジェクトの可能性がほとんど残らなくなるという意見を述べた。この中で彼は標準でない設定に対するThe GNOME Projectの姿勢との類似点を見い出した。後にツォーはソーシャルメディアで、2人の重要な開発者の姿勢とGNOME開発者の姿勢とを比較した。

**グラフィカルフロントエンド**
GTK+ベースのsystemd用フロントエンドであるsystemd-uiのスクリーンショット
以下に示すグラフィカルフロントエンドが利用できる:
 SYSTEMD-UISYSTEMD-UIsystemd-ui
 systemadmとしても知られるシンプルなGTK+ベースのsystemd用フロントエンドである。サービスを管理するシンプルなユーザーインタフェースとユーザーからのパスワード要求へのグラフィカルエージェントを提供する。2014年現在、開発の中心がsystemctlやsystemd-analyzeのようなコマンドラインツールへと移ったため、systemadmプログラムはここ数年の間ほとんど開発や保守を受けていない。
 KCMSYSTEMDKCMSYSTEMDKcmsystemd
代替文=KDE SC 4デスクトップ環境用のグラフィカルsystemdフロントエンドを提供する。これはKDEのシステム設定ウインドウに統合されており、設定ファイルのグラフィカルな編集だけではなくsystemdサービスのモニタリングと制御もできる。

**フォークおよび代替実装**
 eudev
 2012年、Gentoo Linuxプロジェクトはsystemdアーキテクチャへの依存を避けるためにudevのフォークを作成した。これによって生まれたフォークはeudevと呼ばれ、systemdなしでudevの機能を利用できる。このプロジェクトの決められた目標は、eudevをLinuxディストリビューションやinitシステムに依存しないようにすることである。
 uselessd
 2014年、uselessdがsystemdの軽量フォークとして作られた。このプロジェクトは他のはっきりとした欠点に対処するだけではなく、initシステムに必要ないと考えられる機能とプログラムを削除し、実装のモジュール性を高め、プラットフォーム間の移植性を改善しようとしている。
 uselessdはmuslとμClibcライブラリをサポートするため組み込みシステムで使えるが、systemdはglibcしかサポートしていない。uselessdはLinux以外のプラットフォームの初期サポートをしようとしている（現在のところ準備状態におけるビルド時のみ）が、systemdプロジェクトはBSDシステムとの互換性を一切保とうとしていない。uselessdプロジェクトは将来のLinuxビルドにおけるアーキテクチャ上のオーバーホールやリファクタリングだけではなく、クロスプラットフォーム互換性のさらなる改善を計画している。
 systembsd
 2014年、OpenBSD用のsystemd代替API実装を提供するための"systembsd" と名付けられたGoogle Summer of Codeプロジェクトが開始された。systembsdプロジェクトの開発者達は元々、LinuxからOpenBSDへの移行を容易にするためにこのプロジェクトを始めた。
 systembsdプロジェクトはinitの代替を提供しないが、とりわけhostnamed、timedated、localedおよびlogindと互換性のあるデーモンをOpenBSDに提供することを狙いとしている。このプロジェクトは新しいsystemdライクな機能を作らず、単なるネイティブOpenBSDシステムのラッパーとして動作するよう意図されている。開発者はsystembsdを基本システムの一部としてではなく、Portsコレクションの一部としてインストールできるようにすることを狙いとしており、「systemdと*BSDは哲学と開発習慣の点で根本的に異なる」と発言している。
 consolekit2
 2014年10月、Xfceの開発者達は依然としてConsoleKitの機能をLinux以外のオペレーティングシステムで保守し利用できるようことを望んでいたため、ConsoleKitをフォークした。ConsoleKit2の主な開発者は長期的には元のリポジトリを復活する可能性を除外していないが、systembsdが成熟するまでConsoleKit2が一時的に必要となると考えている。

**採用および反響**
ほとんどのディストリビューションはデフォルトでsystemdをブートするが、systemd以外のinitシステムを使えるディストリビューションもある。systemd以外のinitシステムに変更する場合は、適切なパッケージをインストールすればよい。DebianのフォークであるDevuanはsystemdを避けるつもりである。

**歴史と論争**
2011年5月、Fedoraはsystemdをデフォルトとして利用できるようにした最初のメジャーLinuxディストリビューションとなった。
2011年7月、Lennart PoetteringはDebianがFreeBSD版 (kFreeBSD) もあるためsystemdの正式採用をためらっていたことを問題とは考えず、「Debian kFreeBSD はおもちゃのOSだ」と発言した。
2012年のインタビューでSlackwareの代表であるPatrick Volkerdingは、systemdアーキテクチャについての不安を述べ、systemdの設計が狭義に定義された機能による相互接続ユーティリティというUNIX哲学に反しているという彼の信念を表明した。2014年8月現在、Slackwareはsystemdのサポートや使用をしていないが、Volkerdingはsystemdへ変更する可能性を否定していない。
2013年10月から2014年の間、Debian Technical Committee内でDebian 8 "jessie" のデフォルトとしてどのinitシステムを使うかを話し合うための長期に渡る議論がDebianメーリングリストで起こり、その結果としてsystemdを選ぶことになった。この議論は広く公開され、この結論に引き続き議論がDebianメーリングリストで続いている。
2013年1月、Lennart PoetteringはThe Biggest Mythsと呼ばれるブログポストでsystemdについての懸念に対処しようとした。systemdをめぐり続いている論争の後の2014年10月、Poetteringは「オープンソースコミュニティはくそったれだらけで、他の誰よりも私が彼らの最もお気に入りの標的になっているのだろう」と不満を漏らした。続けてPoetteringはオープンソースコミュニティの状態をリーナス・トーバルズなどのカーネル開発者のせいにした。
2014年2月Debianの決定がされた後、ubuntuコミュニティのマーク・シャトルワースは2013年10月初期のコメントでsystemdは「非常に侵略的で正当化されることはほぼない」と評したにもかかわらず、systemd実装についてはUbuntuもやり抜くとブログでアナウンスした。
2014年3月、エリック・レイモンドはsystemdの設計目標はミッションクリープでソフトウェアの肥大化の傾向があると言った。2014年4月、リーナス・トーバルズはユーザーやバグレポートに向けてsystemdの中心開発者であるKay Sieversの姿勢についての不安を表明した。
2014年4月後期、systemdの採用に反対する様々な理由を並べたWebサイトを使って、systemdのボイコットキャンペーンが行われた。
2014年4月のInfoWorldで発行された記事で、Paul Veneziaはsystemd論争について書き、この論争をUNIX哲学の破壊と「自分達は何も間違っていないはずだと固く信ずる巨大なエゴ」にあると考えた。この記事はsystemdのアーキテクチャを、幅広い機能範囲で使われ酷評されるMicrosoft Windowsのシステムコンポーネントであるsvchost.exeのアーキテクチャとよく似ていると述べた。
2014年11月、DebianのメンテナーでTechnical CommitteeのメンバーであるJoey Hess、Russ Allbery、イアン・ジャクソンと、systemdパッケージメンテナーであるTollef Fog Heenが自らの地位を辞した。Debianのメンテナーであった3人は全員、通常のメンテナンスを事実上不可能にしてしまうDebianやオープンソースコミュニティ内におけるsystemd統合についての論争に関係する並外れたストレスレベルに身をさらしながら、公開されているDebianメーリングリストや個人ブログで決定を正当化した。
2014年12月、自身を"Veteran Unix Admins"と呼ぶグループがDevuanと呼ばれるDebianのフォークをアナウンスした。この意図はデフォルトでsystemdをインストールしないDebian派生を提供することである。

**脚注**

**注釈**

**出典**

**関連項目**
 BusyBox- launchd- systemd-readahead- オペレーティングシステムサービス管理

**外部リンク**
  Rethinking PID 1
**  #きょうのsystemd: (翻訳)PID 1 を考え直す - ぽぽの備忘録-  systemd: System and Session Manager-  The road forward for systemd (LWN.net)-  systemd's git repository browser-  Interface Portability And Stability Chart- Init systems comparison:  part 1 and  part 2 (LWN.net)-  SysVinit to systemd Cheatsheet- inline- inline- inline- inline- inline