openSUSE/cavil
GitHub: openSUSE/cavil
Cavil 是一个专为 openSUSE 和 SUSE 打造的自动化法律审查与 SBOM 生成系统,帮助开发团队在软件构建流程中高效识别和评估开源许可证合规风险。
Stars: 62 | Forks: 7
# [](https://github.com/openSUSE/cavil/actions) [](https://coveralls.io/github/openSUSE/cavil?branch=master)

Cavil 是一个法律审查和软件物料清单(SBOM)系统,用于
openSUSE Tumbleweed、openSUSE Leap 以及 SUSE Linux Enterprise 的开发。
## 功能特性
* 适用于 RPM、DEB、Tarball 及多种其他软件包格式的源代码法律审查系统
* 高性能源代码扫描器,支持递归解压几乎所有归档格式
* 28,000 个经过精心策划的模式,覆盖 2000 种许可证组合和 500 个不同的 SPDX 表达式
* 软件物料清单(SBOM)支持,可生成 SPDX 2.3 报告
* 律师对每个模式匹配结果进行法律风险评估
* 人工审查,支持审批/驳回工作流,并可基于风险进行可选的自动审批
* 可选支持机器学习模型对模式匹配结果进行分类
* [MCP](https://modelcontextprotocol.io/) 支持,可集成到 AI 辅助的法律审查工作流中
* REST API,可集成到现有的源代码管理系统中
* 通过机器人与 [Open Build Service](https://github.com/openSUSE/openSUSE-release-tools) 和 [Gitea](https://github.com/openSUSE/cavil-gitea) 集成
* OpenID Connect(OAuth 2.0)身份认证
**重要提示**:请注意,Cavil 使用的大部分数据由律师精心策划,但生成的报告不构成法律建议,不对其正确性做任何保证!

## 组件
本发行版包含系统的两个主要组件。一个是 [Mojolicious](https://mojolicious.org) Web
应用程序,律师可借此高效审查软件包内容;另一个是 [Minion](https://metacpan.org/pod/Minion)
后台任务,用于处理和索引软件包,生成易于理解的许可证报告。
此外,本发行版还包含 SUSE 律师创建的大量经过精心策划的许可证模式集合。目前该集合包含超过 20,000 个涵盖所有已知开源许可证的模式。
将 OBS 连接到 Cavil 最简单的方式是使用
[openSUSE Release Tools](https://github.com/openSUSE/openSUSE-release-tools) 仓库中的 `legal-auto.py` 机器人。
但你也可以直接上传 tarball 进行分析。
## AI
强烈建议将 Cavil 与用于文本分类的机器学习模型结合使用。因为用于识别法律关键词簇(代码片段)的模式匹配系统假阳性率约为 80%。即使是一个简单的模型也能识别出其中几乎所有的误报。
[openSUSE HuggingFace org](https://huggingface.co/openSUSE) 拥有专门针对此任务微调的一系列模型,
例如 `Cavil-Qwen3.5-4B`。
### Llama.cpp
这些模型的推荐部署方式是使用 [llama.cpp](https://github.com/ggml-org/llama.cpp) 服务器。
```
$ llama-server Cavil-Qwen3.5-4B.f16.gguf --host localhost --port 5000 --api-key TOKEN
```
只需启动服务器,然后在 `cavil.conf` 中添加如下 `classifier` 配置段。
```
classifier => {
type => 'llama_cpp',
url => 'http://localhost:5000',
token => 'TOKEN'
}
```
### 旧版方案
此外,我们还有两种旧版分类器 API 的实现:
1. https://github.com/kraih/Character-level-cnn-pytorch/
2. https://github.com/kraih/llm-lawyer
## 快速入门
开始使用 Cavil 最简单的方式是使用附带的搭建脚本快速搭建开发环境。你只需要一个空的 PostgreSQL 数据库(已激活 `pgcrypto` 扩展)以及以下依赖:
```
$ sudo zypper in -C postgresql-server postgresql-contrib 'rubygem(sass)'
$ sudo zypper in -C perl-Mojolicious perl-Mojolicious-Plugin-Webpack \
perl-Mojo-Pg perl-Minion perl-File-Unpack perl-Cpanel-JSON-XS \
perl-Spooky-Patterns-XS perl-Mojolicious-Plugin-OAuth2 perl-Mojo-JWT \
perl-BSD-Resource perl-Term-ProgressBar perl-Text-Glob perl-IPC-Run \
perl-Try-Tiny perl-MCP git git-lfs
$ npm i
$ npm run build
```
然后使用以下命令搭建和拆除开发环境:
```
$ perl staging/start.pl postgresql://tester:testing@/test
...
$ CAVIL_CONF=staging/do_not_commit/cavil.conf morbo script/cavil
...
$ CAVIL_CONF=staging/do_not_commit/cavil.conf script/cavil minion worker
...
$ perl staging/stop.pl
...
```
`morbo` 开发 Web 服务器将在 `http://127.0.0.1:3000` 上提供 Web 应用程序。
`script/cavil minion worker` 将启动处理后台任务的任务队列。
## 文档
更多信息请参阅附带的[文档](/docs)。
标签:AI辅助审查, DEB包, Gitea集成, MCP, Minion, Mojo, Mojolicious, OAuth, Open Build Service, OpenID Connect, openSUSE, openSUSE Leap, openSUSE Tumbleweed, REST API, RPM, SBOM, SPDX, SUSE Linux, 开源合规, 归档解压缩, 机器学习风险分类, 法律审查, 测试用例, 源代码扫描, 硬件无关, 许可证识别, 跌倒检测, 软件物料清单