核心用法
wip-license-hook 是一款专注于开源许可证安全监控的 DevOps 工具,通过建立许可证账本(license ledger)机制,为项目提供全生命周期的许可证合规保障。
初始化阶段:wip-license-hook init 扫描项目所有依赖及 fork,记录当前许可证状态,生成 LICENSE-LEDGER.json 作为基准档案。
持续监控:wip-license-hook scan --all 对比依赖现状与账本记录,检测 LICENSE 文件内容、package.json license 字段、SPDX 头信息的变化,识别许可证降级(permissive → restrictive)或恶意删除行为。
门禁管控:wip-license-hook gate --upstream <remote> 在 CI/CD 流程或 git hook 中执行预合并检查,许可证变更时返回非零退出码阻断合并,强制人工介入审核。
可视化报告:wip-license-hook report 生成可读性健康报告,wip-license-hook dashboard 输出静态 HTML 仪表盘,可部署至 GitHub Pages 实现公开合规展示。
MCP 集成:作为 Model Context Protocol 服务器运行,提供 license_scan、license_audit、license_gate、license_ledger 四类工具,支持 AI 助手直接调用。
显著优点
- 主动防御:业界较早针对"license rug-pull"(恶意许可证变更)场景的专项工具,填补供应链安全盲区
- 非侵入式设计:纯扫描观测,永不修改上游代码或自动合并,符合安全审计原则
- 多触点覆盖:支持文件级、元数据级、SPDX 头多级检测,捕捉隐蔽变更
- CI/CD 原生:exit code 设计便于嵌入任意流水线,cron 定时任务支持持续监控
- 透明可审计:账本机制提供完整历史追溯,仪表盘支持公开披露
潜在缺点与局限性
- 非法律工具:明确声明不提供法律建议,复杂许可证解读仍需专业法务介入
- Node.js 生态绑定:主要适配 npm/package.json 项目,其他语言包管理器支持有限
- 依赖网络扫描:需访问上游仓库,离线环境或私有 registry 场景需额外配置
- 误报可能:元数据不一致(如 LICENSE 与 package.json 冲突)可能触发警告级告警
- 新兴项目风险:作者为个人开发者(Parker Todd Brooks),长期维护承诺未经验证
适合人群
- 企业开源治理团队(OSPO)
- 金融/医疗等强合规行业开发者
- 维护大量外部依赖的中大型项目架构师
- 开源项目维护者防范供应链攻击
常规风险
- 供应链延伸风险:工具自身依赖 Node.js/npm 生态,需确保工具链可信
- 账本篡改风险:
LICENSE-LEDGER.json若被恶意修改将丧失基准价值,建议纳入版本控制保护 - 告警疲劳:大规模项目依赖众多,cron 扫描可能产生高频通知,需合理配置告警阈值
- 许可证分类误判:工具内置的"降级"判定规则可能与客户法务标准存在差异