🐳 第三章 一切皆插件意味着什么
📄 一句话概括

皆插件说的是没有特权部件,不是没有内核——内核(Cordis)只管加载、卸载、依赖与作用域,不认识任何具体插件,也不给谁开后门。

📝 本节和前面几节的关系

3.7 把口号兑现成了证据,但留了个尾巴:内核呢?这一节回答它——口号的边界在哪。

一、内核管三件事

就这三件。再没有别的了——这个【少】是刻意的。

二、内核不做什么

它不认识任何具体插件:不知道 tool-fs 是读文件的、不知道 persona 是管人格的——它只认【这是一个插件,依赖已满足,可以挂】。

它不给官方插件开后门:官方插件与第三方插件走同一条加载路径(1.3 的老结论,这里补上机制原因)。

对照反例:很多所谓【插件系统】里,官方功能走特权通道——那不叫插件,叫可拆卸的零件。

三、两个类比

DSH 的 Cordis 站在同一个位置:小内核+大生态——内核越小越稳,生态才敢在它上面长。

四、内核小而稳,生态才敢长

算一笔账:monorepo 49 个包、一方插件 100+——内核只占少数几个包,绝大部分体积都是插件与配套。

内核接口若频繁变,插件全得跟着改——生态就没人敢投。所以 1.5 的【接口会变】警告才格外重要:预览期内核也在动,稳定是以后的事。

一句话收束:皆插件的前提,恰恰是一个无特权、守规矩、小而稳的内核。

五、动手 Demo:内核做什么,不做什么

三件职责,每件配一句【不碰什么】:

duties = [
    ("加载与卸载", "按声明把插件挂上、摘下", "不关心插件具体干什么"),
    ("依赖解析", "谁依赖谁,先装谁", "不给任何插件开后门"),
    ("作用域管理", "决定挂宿主还是挂会话平面", "不替会话做决定"),
]
for a, b, c in duties:
    print("  %-6s | 管: %s" % (a, b))
    print("  %-6s | 不碰: %s" % ("", c))
print()
print("  monorepo 49 包, 一方插件 100+; 内核只占少数几个包")

实跑输出:

--------------------------------------------------------------------
内核做什么,不做什么
--------------------------------------------------------------------
  皆插件 ≠ 没内核。内核(Cordis)管的事,一张表说清:

  内核管什么     具体做                         不碰什么
  -------------------------------------------------------------------
  加载与卸载     按声明把插件挂上、摘下         不关心插件具体干什么
  依赖解析       谁依赖谁,先装谁               不给任何插件开后门
  作用域管理     决定挂宿主平面还是会话平面     不替会话做决定
  -------------------------------------------------------------------

  两个类比:操作系统内核不认识你装的应用;浏览器内核不认识你装的扩展。
  DSH 的内核也不认识 tool-fs——它只认【这是一个插件,依赖已满足,可以挂】。

  算一笔账:monorepo 一共 49 个包,一方插件 100+——

    内核(加载/依赖/作用域)    少数几个包
    其余                        几乎全是插件与配套
    官方插件 vs 第三方插件      走同一条加载路径,无特权

  没有特权的内核,才配得上【皆插件】三个字;内核小而稳,生态才敢长。

【不认识任何具体插件】是判断真假插件系统的一把尺子——认识插件的内核,就给特权开了门。 两个类比的共同点:内核只管公共设施——应用与扩展的内容,内核一概不知。 【预览期内核也在动】呼应 1.5:学结构、别背接口,这条纪律在内核上同样适用。

30 秒实验

  1. 在 49 个包的仓库结构里找一找:哪几个包像内核?(提示:名字带 cordis 或 core)
  2. 举一个反例软件:它的【官方功能】有没有走特权通道?
  3. 用一句话给外行解释【小内核大生态】的好处。

常见误区

  1. 错误:皆插件=整个系统全是插件,没有内核。——纠正:必须有内核——只是它无特权、只管装卸与依赖。
  2. 错误:官方插件加载更快、权限更大。——纠正:走同一条加载路径,官方没有任何特权(1.3 的前提在这里兑现)。
  3. 错误:内核这么小,肯定功能不全。——纠正:小是设计目标——公共设施越少越稳,功能全在插件生态里。
自测三问(点开对答案) 1. 内核管哪三件事? —— **加载与卸载、依赖解析、作用域管理**——就这三件,再无其他。 2. 【官方插件无特权】靠什么机制保证? —— **同一条加载路径**:内核不认识任何具体插件,只认声明与依赖。 3. 为什么内核要小? —— **内核小而稳,接口才敢承诺稳定,插件生态才敢在它上面长**。

相关笔记