这一篇把 1.88 和 1.89 一起讲完——它们本来就是一件事的两半:1.88 立起了"插件从哪来"(索引 + 安装 + 信任),1.89 补上它周围那几件事(从哪几个索引来、钥匙被滥用怎么办、装完之后有没有被改过)。
装插件:给个网址就行
你在一份「插件索引」(别人放在网上的一个 JSON 文件)里填地址,就能看到有哪些插件、多大、什么许可、要哪些权限、以及每条权限的理由,然后点安装。
装的过程不马虎:下载 → 核对校验值 → 解包 → 检查清单,全部通过才放进插件目录;任何一步不对就不留半个插件。应用不内置任何"官方索引",信谁由你自己定;只允许 https(本机地址例外,留给自托调试)。
换钥匙会拦你
索引可以声明"这个插件由这把公钥签名"。要说清它证明了什么:它证明"你下到的这个包,和索引里声明的那把钥匙一致",证明不了"发布者是谁"。
真正有用的是装上之后:应用会把钥匙记下来(和 SSH 记 known_hosts 一个思路)。以后同一个插件换了钥匙,就拒绝安装,并把新旧指纹一起摆给你看,由你决定要不要信。就算那份索引被人换掉,也换不掉你已经记下的那把钥匙。
撤回会被记住,离线也拦得住
索引说"这个版本不该再用",应用会记下来,运行和安装两条路都拦——而且拦的是那个版本,作者后来发的修好的新版本不受影响。
同时留了一条出口:你可以选 「仍然使用」。索引的维护者不是你的上司,这一层的作用是让你知道、并且明确表态,而不是替你把插件关掉。表态之后不再拦,但界面上会一直如实标着「你选择继续使用」。
插件能升级了,降级一律拒绝
同 id 再装一次不再是死路:升级、重装都行,而且先备份再动手,装不上就回滚。但明确降级一律拒绝(2.0.0 装回 1.9.9 几乎总是误操作,事后又极难发现)——要降级请先卸载。升级不会冲掉你的启用状态;但如果新版本要的权限变多了,界面会单独摊出「这次新增了哪几项」,在你重新确认之前拒绝运行它。
插件跑在独立进程里
- 取消是真终止:点「取消」是真的把它杀掉,而不是界面不等了、插件还在后台跑完;
- 内存看门狗:常驻内存超过上限直接杀(正常插件几十 MB,拦的是暴走型);
- 环境变量白名单:插件拿不到应用自己的变量——尤其是 token、密钥这类。
1.89 新增:从"一个索引"变成"一组索引"
「从索引安装」面板顶部现在是订阅列表:备注与域名、签名公钥状态、上次检查结果(成功时写明「N 个插件,其中 M 个可更新」)。可以增删订阅,也可以一次检查全部。
设计上仍然克制:它不是商店——没有推荐、没有排序、没有评分、不内置任何官方索引,索引内容永远现场拉。用一份过期的清单去做判断("可更新"、"已撤回")比不判断更糟。订阅只回答"从哪里找插件";取消订阅不会卸载任何东西。
1.89 新增:按发布者密钥撤回——钥匙被滥用时能止损
撤回本来按"插件 + 版本"来。现在还可以按发布者密钥撤:一旦发现某把钥匙被滥用,所有用它签过的插件可以一起被拦下。
1.89 新增:事实清单与内容指纹
事实清单(governance 里唯一能自动化的那块):摆事实、不评分——它告诉你"这个插件是谁签的、什么许可、要什么权限、来源是哪份索引",不替你下结论。
内容指纹:下载时我们会验校验值和发布者签名,但装到盘上之后,那就是你自己的目录了——"它还是当初装下来的那一份吗",此前没有任何东西能回答。现在安装完成时算一次目录内容指纹(只由相对路径与字节决定,改名也算变化),事实清单里分三种情况说清楚:
- 内容与安装时一致(并给出指纹前缀);
- 内容与安装时不同(安装时是什么、现在是什么);
- 没有安装时的指纹可对(这一版之前装的),所以无法判断。
最后这一条必须说出来——否则用户会把它读成"没被改过"。
顺手修的两个"不显眼但会悄悄失效"的问题
- macOS 上读子进程内存不再起
ps(改成系统调用); - Linux 上页大小不再写死 4 KiB——在 16 KiB 页的内核上,内存看门狗本来会少算四倍。
接下来
分发这条链的协议与信任已经立住了;剩下的主要是市场与治理的部分(推荐与排序仍然故意不做)。
想自己托一份索引、或者写插件,可以从仓库的
docs/plugin-api.md与docs/plugin-index.example.json开始看;社区里另有《插件配方(第一批 12 个可直接装的插件)》。
Comments 0
No replies yet — say something.