3个版本
0.1.3 | 2022年1月1日 |
---|---|
0.1.1 | 2021年12月10日 |
0.1.0 | 2021年10月6日 |
#590 in Unix API
49KB
577 行
initd
简单、兼容serviced的PID 1实现。 目前正在开发中
是什么?
initd是一个简单的操作系统用户空间init实现。它的任务是执行第一个进程(在*nix世界中称为PID 1)所需进行的至关重要的用户空间设置,并将任何进一步的任务委托给serviced或兼容serviced的替代方案。
initd基于sinit(MIT),而sinit本身是基于Rich Felker的极简init(MIT)在这个EWONTFIX帖子中。他们的许可证文件可以在initd的GitHub仓库中的LICENSE.sinit
和LICENSE.ewontfix
中找到。
initd本身根据MITNFA许可证授权。有关详细信息,请参阅initd的GitHub仓库中的LICENSE
。
在哪里?
到目前为止,initd仅支持Linux系统,尽管如果任何*BSD或类Unix操作系统开发者有兴趣将initd和serviced(或另一个兼容serviced的替代方案)集成到他们的操作系统中,请随时与我联系。
如果任何Linux发行版维护者/开发者正在探索使用initd作为他们的init实现(或已经这样做),请与我联系以被包含在本README中。如果您与我联系,我还可以就如何在发行版中进行适当集成提供建议。
为什么?
在撰写本文时,systemd是大多数流行的Linux发行版(除Android外)使用的占主导地位的init实现。不幸的是,systemd存在明显的功能蔓延,遵循“除了厨房水槽外什么都有”的方法来处理PID 1和系统/服务管理。initd是为了缺少一个适当且简单的Linux init进程而创建的,该进程只关注PID 1应该执行的绝对必要任务。
initd致力于遵循Unix哲学,即"编写只做一件事且做得好的程序",部分通过只进行最基本、但至关重要的用户空间设置,并将其他功能委托给serviced。这可以从initd缺乏复杂的服务依赖管理、网络、设备热插拔管理等特性中看出。其中一些特性可以在其他配套项目中找到(如serviced,initd将其执行委托给)。
initd是用Rust编写的,以减少在非内存安全语言中创建的项目中常见的错误。尽量减少依赖项的数量,直接依赖项(截至本文撰写时)只有:cfg-if
、const_format
、cstr
、nix
和 precisej-printable-errno
。低依赖项数量有助于排除第三方错误并降低编译时间(至少与更大的Rust项目相比)。
如何做到?
每个平台都有不同的基本任务,必须由第一个用户空间进程执行。[平台]中对此有更详细的说明,同时也解释了initd是如何由操作系统执行的。
serviced?
serviced是一个简单而灵活的服务管理系统,应作为runit/runsvdir、systemd的服务管理、sysvinit、openrc等的替代品。它非常灵活,通过适当的生成器,它可以作为上述任何服务管理器的即插即用替代品!
遗憾的是,目前serviced正在私人项目中开发。一旦准备充分,它将被发布并链接到本README中。
注意:随着serviced的发布,将出现initd和serviced之间通信的稳定规范,以便允许出现与serviced兼容程序的其他实现,以及能够正确生成和与stock serviced通信的initd兼容程序。在此之前,任何尝试开发上述兼容程序的人都需要阅读适当的文档以及相关的源代码,以实现兼容性。在规范发布之前,我不保证稳定性。
许可证:MITNFA
依赖项
~2MB
~45K SLoC