license: 明确内核 AGPL / SDK MIT 的边界(插件不受 AGPL 传染)

SDK 仓改为 MIT(同批提交 e97cafc)后,核心仓几处「插件静态链接 SDK 故须同许可」
的论述不再成立,一并更正。

## 边界(现在写清楚了)

- **AGPL-3.0-only 覆盖内核与随包内置插件**:homed、internal/、internal/plugins/
  下 18 个内置插件。§13 网络条款照旧适用。
- **MIT 覆盖公开 SDK**:sdk/ 零外部依赖、只依赖 Go 标准库,不引用内核任何代码。
- 因此**外部插件不是本项目的衍生作品**,作者可自行选择许可(含闭源、商业、
  私有),既不必同许可、也不受 §13 约束。

## 改动

- README.md / README_EN.md「许可」章节:改写静态链接那段,写明上述边界与理由
  (决定许可的是被链接的 SDK 代码,而它是 MIT;子进程隔离不再是关键论点)
- README.md / README_EN.md changelog:**按本仓惯例保留历史原文**,在既有更正
  注记区追加一条「许可口径已变更(2026-09-24)」,而不是去改写 v1.2.0 的原文
  —— 避免伪造当时的语境
- site/index.html footer:状态栏拆成「内核许可:AGPL-3.0-only」+「插件 SDK:MIT」
  两行;声明区分「AGPL(内核与其内置插件)」与「SDK 以 MIT 发布,插件不受传染」
- .gitignore:example/ 注释里的计数 20 → 21(实际 10 个示例 ×2 + qq/plugin_test.go;
  规则本身与「有意保留」的说明不变)

验证:go build ./internal/meta/ ./internal/agent/core/ 通过;官网 1440px 无横向溢出、
无控制台错误,footer 许可两行正确渲染(/tmp/lic-footer.png)。
This commit is contained in:
JianFeeeee
2026-09-24 10:55:23 +08:00
parent 11144c62b5
commit 4f3de61d8f
5 changed files with 60 additions and 669 deletions

View File

@ -257,6 +257,11 @@ internal/
> 以下历史条目保留原文以呈现演进,其中两条机制**已在 v1.2.0 移除**:
> 「媒体以 `[<mime> <短digest>] <描述>` 标记参与检索」(描述式索引)与「媒体引用计数式 GC」。
>
> 另有**一处许可口径已变更**(2026-09-24):上面 v1.2.0 条目里的「插件静态链接 SDK 故须同许可」
> **自今日起不成立**。SDK 改以 **MIT** 发布(宽松许可,不继承内核的 AGPL),故外部插件**不是**
> 本项目的衍生作品,作者可自行选择许可(含闭源、商业、私有),亦不受 §13 网络条款约束。
> 原文保留以呈现当时的口径。
>
> 另有**两项性能断言的量纲需要更正**(2026-09-20 实测):
> 「崩溃到恢复 <1s」不成立 —— 崩溃后是**线性退避重启**,即 1s / 2s / 3s(`procRestartBackoff=1s × 第 n 次`),
> 首次重启就要等 1s。且 5 分钟窗口内第 **4** 次崩溃即停止自动重启待人工介入(`procMaxRestarts=3`,判定为 `n > 3`)。
@ -323,8 +328,14 @@ make install # 安装到系统
**通过网络提供服务时也要向使用者提供源码**(§13 Remote Network Interaction)。
即:任何人把改过的 HomeAgent 对外提供网络服务,都必须让该服务的使用者拿到改动后的源码。
插件与本项目通过公开 SDK **静态链接**(SDK 源码会进入插件二进制),因此插件是本项目的
衍生作品,需以相同许可发布;子进程隔离不改变这一点,因为被链接的是 SDK 代码本身。
插件与本项目通过公开 [homeagent-sdk](https://gitcode.com/JianFeeeee/homeagent-sdk) 静态链接
(SDK 源码会进入插件二进制),但那个仓**以 MIT 发布**——MIT 是宽松许可,拿到授权的代码不继承
本项目的 AGPL。因此**外部插件不是本项目的衍生作品**,作者可自行选择许可(含闭源、商业、私有),
既不必同许可、也不受 §13 网络条款约束。第三方插件生态的安全与活跃正建立在这条之上。
边界很清楚:**AGPL 覆盖内核与随包内置插件**(`homed`、`internal/`、`internal/plugins/` 下 18 个内置插件);
**MIT 覆盖公开 SDK**(`sdk/`,`go.mod` 零外部依赖、只依赖 Go 标准库,不引用内核任何代码)。
子进程隔离在这里不重要了——决定许可的是被链接的 SDK 代码本身,而它是 MIT。
### 随包分发的第三方组件