样本 - openwork (different-ai/openwork) 23.2k★ 能力分发层,DCO + evals + worlds - orca (stablyai/orca) 58.8k★ 并行编排外壳,5000 issue 实为团队自开任务板 - maka (apache/maka) 4.4k★ 执行记录层,Apache 孵化但无正式 release 档案 - 三份五维档案填完,risk.claim_vs_reality 均已核实到证据 - ipollowork 象限坐标从占位 9/9/9/9 校准为 8/7/7/7(与新样本同一标尺) 文章 - 新增横评文《四个 Agent 工作台的路线分野:把「多引擎中立」拆开看》(emlog id=99) - 总纲文回填四项目矩阵 + 双视图象限图 (emlog id=98) 镜像 - gitinbox/maka 已推送(public,source-only 快照 12 MB) - openwork(291MB) / orca(671MB) 受 50KB/s 带宽约束,档案标 mode: pending 规则 - license-tiers.yaml 新增「目录切分许可」降级流程(OpenWork 判例: 排除 ee/ 后为纯 MIT → public,完整镜像 → private) - registry.yaml openwork 可见性改 public + mirror_excludes: ["ee/"] 脚本修复 - _common.py 新增 upsert_block:手工整块覆盖 ecosystem 删掉 metrics 时能自愈 - mirror_sync.sh:SOURCE_ONLY 未初始化(set -u 下偶发炸); 浅仓推送被服务端拒绝 → 自动 --unshallow,失败降级快照; 量体积前先 repack(此前新 commit 全是 loose object,恒打印 0 MB) - build_matrix.py:成熟度长文本移出表格(新增 maturity_level 短标签); 象限图标签靠右时翻转到左侧防溢出;SVG 加 max-width 防窄屏溢出; 文章索引改为自动生成(原先手抄,横评文发了索引里却没有) - publish_emlog.py:ID 回写按「有无同名档案」分流, 00-* 跨项目文章落到 articles/<id>.meta.yaml(此前 ID 无处可写)
123 lines
5.5 KiB
YAML
123 lines
5.5 KiB
YAML
# ============================================================
|
||
# 许可证成色分级 → 镜像可见性规则
|
||
# ------------------------------------------------------------
|
||
# 这是新增项目时的**第一判断项**:先定级,再决定源码镜像能不能公开。
|
||
# 定错级的代价:L3 项目被公开镜像,等于替对方做了一次未经授权的公开分发。
|
||
#
|
||
# 判定顺序自上而下,命中即停。
|
||
# ============================================================
|
||
|
||
tiers:
|
||
|
||
- level: L1
|
||
label: 完全开源
|
||
redistributable: true
|
||
visibility: public
|
||
match_spdx:
|
||
- MIT
|
||
- Apache-2.0
|
||
- BSD-2-Clause
|
||
- BSD-3-Clause
|
||
- ISC
|
||
- MPL-2.0
|
||
- GPL-2.0
|
||
- GPL-3.0
|
||
- LGPL-3.0
|
||
- Unlicense
|
||
note: "可自由镜像与再分发,保留原许可证声明即可。"
|
||
|
||
- level: L2
|
||
label: 有限开源
|
||
redistributable: true
|
||
visibility: public
|
||
match_spdx:
|
||
- AGPL-3.0
|
||
- SSPL-1.0
|
||
- BUSL-1.1
|
||
- Elastic-2.0
|
||
note: "有附加限制(网络使用即触发开源义务、或限制商业化托管)。可公开镜像,但档案中必须记录限制条款。"
|
||
|
||
- level: L3
|
||
label: 源码可得 · 非开源
|
||
redistributable: false
|
||
visibility: private
|
||
match_spdx:
|
||
- NOASSERTION
|
||
- OTHER
|
||
- LicenseRef-scanned
|
||
note: |
|
||
SPDX 无法识别的自定义许可,典型为 source-available。
|
||
必须人工读 LICENSE 原文确认,再决定是否归 L3 或 L4。
|
||
判为 L3 时镜像**一律私有**,仅作个人代码级研究,不构成公开分发。
|
||
|
||
- level: L4
|
||
label: 不可得
|
||
redistributable: false
|
||
visibility: none
|
||
match_spdx:
|
||
- ""
|
||
- null
|
||
note: "无 LICENSE 文件或明确 proprietary。不镜像,档案里只留仓库链接与 commit 快照。"
|
||
|
||
# ---------- 人工复核触发条件 ----------
|
||
# 命中以下任一情形,脚本必须停下来要求人工确认,不得自动定级:
|
||
manual_review_triggers:
|
||
- "SPDX 为 NOASSERTION 且 LICENSE 文件超过 200 行(条款复杂,容易漏掉分发限制)"
|
||
- "同一仓库存在多个 LICENSE 文件(如 LICENSE + LICENSES/ 目录,可能混合许可)"
|
||
- "README 自称 open source 但 SPDX 不是 OSI 认证标识(名实不符,需显式记录)"
|
||
- "LICENSE 中出现 SaaS / hosting / white-label / marketplace / resale 任一关键词"
|
||
|
||
# ---------- 混合许可的降级规则 ----------
|
||
# 自动定级只认 SPDX 标识,无法识别「目录切分许可」这类混合形态。
|
||
# 遇到需人工复核的仓库,按此流程处理:
|
||
mixed_license_procedure:
|
||
- "定位受限目录:读根目录 LICENSE 与各子目录 LICENSE,找出采用非 OSI 许可的路径"
|
||
- "评估剩余部分:确认排除受限目录后,其余内容是否为单一 OSI 许可"
|
||
- "若成立 -> 镜像时排除受限目录,可见性按剩余部分的许可定级(通常可 public)"
|
||
- "若不成立 -> 整仓按最严格的那个许可定级(通常 L3 / private)"
|
||
- "必须在档案 mirror.sync_note 与仓库内 MIRROR-NOTE.md 写明:排除了什么、为什么、如何恢复完整镜像"
|
||
|
||
# 补这条规则的缘由(注意:这是独立顶层键,不能写进上面的列表里——
|
||
# YAML 不允许序列与映射键同级混用,写进去会直接让整份 schema 解析失败)
|
||
mixed_license_note: |
|
||
这条规则是 2026-09-01 处理 different-ai/openwork 时补上的。
|
||
自动定级把它判成 L3/private,但人工复核后发现 ee/ 之外是纯 MIT,
|
||
排除 ee/ 后完全可以公开镜像——同一个仓库,两种正确答案,
|
||
取决于镜像是否包含受限目录。没有这条规则就会做出过度保守的误判。
|
||
|
||
# ---------- 已定级样本(供后续同类项目参照) ----------
|
||
precedents:
|
||
- repo: Devin-AXIS/iPolloWork
|
||
level: L3
|
||
visibility: private
|
||
license_name: "iPolloWork Source Available License 1.0"
|
||
decided_at: 2026-09-01
|
||
reason: |
|
||
条款原文要求:任何售卖、转售、收费服务、SaaS、托管、白标、市场分发或
|
||
面向客户的使用,无论个人还是企业,均需事先书面授权;且面向用户的前端
|
||
必须保留 iPolloWork 名称、Logo 与产品归属。公开镜像落入「托管/市场分发」
|
||
的解释空间,故设为私有。
|
||
|
||
- repo: different-ai/openwork
|
||
level: L3
|
||
visibility: public
|
||
decided_at: 2026-09-01
|
||
manual_review: true
|
||
trigger_hit:
|
||
- "同一仓库存在多个 LICENSE 文件(LICENSE + ee/LICENSE)"
|
||
- "README 自称 open source 但 SPDX 为 NOASSERTION"
|
||
- "ee/LICENSE 含 production / subscription / resale 关键词"
|
||
license_name: "目录切分许可:ee/ 之外 MIT;ee/ 为 OpenWork EE License"
|
||
reason: |
|
||
根目录 LICENSE(36 行)声明 ee/ 之外的部分为 MIT;
|
||
ee/LICENSE(72 行)为 OpenWork EE License,要求生产使用需订阅,
|
||
仅 5 人以下组织、30 天评估、开发测试三种情形豁免,
|
||
且每个 ee/ 版本公开发布满两年后自动追加 MIT 授权。
|
||
**排除 ee/ 目录后,镜像内容为纯 MIT,可公开分发**;
|
||
若完整镜像(含 ee/)则必须私有。
|
||
mirror_strategy: "镜像时排除 ee/ -> public;完整镜像 -> private"
|
||
lesson: |
|
||
这是「自动定级过度保守」的典型案例:SPDX=NOASSERTION 直接判 L3/private
|
||
是安全的默认值,但对目录切分许可仓库会误伤。
|
||
已据此补充 mixed_license_procedure 规则。
|