# 收录政策

FlatPark 收录提供公开、稳定发布 URL 且可打包为 [extra-data](trust.md) 的应用。以下规则适用于应用的收录和持续上架。

## 我们收录的应用

任何在稳定公开 URL 上提供官方预构建 Linux 下载的应用都可以收录：安装程序、`.deb`、`.rpm`、tarball、zip 或 AppImage。软件包新增或更新时，CI 会下载一次文件，记录它的校验和与大小；FlatPark 对结果签名。用户安装时，Flatpak 再从厂商自己的 URL 下载这个文件。FlatPark 自己的存储里只有包在应用外面的一小部分，从不存放应用本身。AppImage 会被离线解包（直接读取其末尾附带的文件系统，绝不执行）。

FlatPark 不从源码构建应用：有官方发布就没有这个必要，而源码构建会让每次更新都占用 CI 时间和存储空间。我们默认的前提是：用户安装一个应用，是因为信任它的开发者。如果某个有需求的应用没有官方 Linux 版本，可以由公开的 `flatpark/<app>-release` 仓库发布一个：严格按上游的构建方式、不做修改、符合上游的许可；软件包把这个发布当作 extra-data，和其他下载一样使用。

**开源应用按 upstream 发布的原样运行。**不向应用进程注入任何代码——没有 `LD_PRELOAD` shim，也不修改或替换任何文件。wrapper 可以设置环境变量或启动参数，也可以补充缺失的库；但如果一个开源应用不注入代码就无法在 sandbox 中工作，应当在 upstream 修复，修复之前不予收录。bug 反馈给上游。**闭源应用**在别无他法时，可以为了让某个功能工作而做适配；适配要经过审核，应用页面会显示出来，应用说明里会直接写明是什么、为什么。

Toolkit 和许可证不会成为收录门槛。**欢迎 Electron 和 Tauri 应用**——registry 中已经提供这两类应用——也**欢迎闭源应用**。只要 upstream 发布 `.deb`、`.rpm`、tarball、zip 或官方安装程序，就可以在这里打包。

## 要求

- 官方构建必须有**稳定、公开的发布 URL**（不得要求登录）。
- 必须有 **AppStream metainfo** 文件（`<id>.metainfo.xml`），其中包含 id、名称、摘要、许可证以及至少一个描述段落。
- **id 必须符合 reverse-DNS 格式**，并与 registry 目录名称一致。
- 使用**当前 runtime 主版本**，与应用目录中的其他应用保持一致。不接受为了规避构建故障而固定旧主版本。
- 使用仍能正常工作的**最严格 `finish-args`**。可选功能**默认不授予权限**：不要添加对应权限，而是在应用描述中记录用于启用权限的 `flatpak override` 命令，让每位用户自行决定。应用正常运行需要的权限保留在 `finish-args` 中，并在 PR 里说明理由。如果应用的主要功能需要，或者不给就要用户做大量 override，宽泛的权限（home、在主机上运行命令）可以在审核后默认授予。
- **提交 PR 前已经测试**：提交者已经构建、安装、启动应用并用过它的主要功能，PR 里如实写明测了什么、没测什么。
- 明确说明应用的**许可证**。

## Vibe-coded 应用

欢迎使用 AI 辅助开发（“vibe coding”）的应用，不做任何特殊对待，无论是加分还是减分。和所有应用一样，看的是它做什么、做得好不好、有没有人需要（有人提需求、报 bug、在用），以及是否在正常开发和发布。star 多少、项目做了多久都无所谓。

在这件事上我们旗帜鲜明。“AI slop”这个标签如今在网上泛滥成灾——Flathub 的 PR 队列里、Reddit 的帖子里，到处都是——它被随手甩到能正常工作的软件上，背后却没有任何审核：没有人构建过它，没有人运行过它，也没有人读过一行 diff。这种条件反射不是质量把关，而是最偷懒的一种“审核”，它对软件本身毫无说明。如果真有什么配得上“slop”这个词，那就是这种随手贴标签的行为本身。

FlatPark 的回应是把标签跳过的工作补上：每项提交都会被实际构建、安装、启动，并按上文公开的标准审核。评判软件包本身，而不是写出它的工具。

我们不仅不排斥这些工具，还公开地使用它们。欢迎——甚至鼓励——用 AI agent 做严格的测试、完善的文档和自动化的维护流程；FlatPark 自己的审核与更新流水线就有 AI 参与。重要的是结果达到了什么标准，而不是键盘前坐的是谁。

## 审核

每项提交都会按照公开的[审核 runbook](../reviewers/review-runbook.md)进行审核（有 AI 辅助）。信任问题的关键在于**你运行的内容来自哪里**，而不是许可证：

- FlatPark 重新打包**未经修改的 upstream 官方构建**：你运行的内容就是厂商自己的产物。向应用进程注入代码：开源应用一律拒绝，闭源应用要经过审核并公开说明。
- 官方构建必须来自真正的 upstream/厂商发布渠道。托管在提交者个人账户或 mirror 上的 binary，以及打包过程中重新构建或打过 patch 的 binary，都会被拒绝。
- 每项下载都按 `sha256` 和大小固定，构建过程无法悄悄替换内容。
- 会触及沙箱之外的权限（在主机上运行命令、整个主机文件系统）必须在 PR 里声明并说明理由，由维护者审核。只有应用功能确实需要时才授予，应用页面会用警告标出。
- 审核会排查所发布内容里明显的恶意行为：驻留、挖矿、反弹 shell、下载并运行未固定的代码。不审计应用的源码。
- **允许 non-FOSS 应用**——是否开源不是审核标准。我们会根据用途而非许可证拒绝盗版、恶意软件、冒充商标或任何无法合法分发的内容。

## 下架

应用在以下情况离开 FlatPark：

- **开发者要求。**开发者的意愿是最终决定：我们会移除应用，不做任何争辩；
- **上游已经停止：**停止开发、删除了仓库，或者官方下载已经消失；
- **某个版本包含恶意内容**或会破坏用户的系统：立即移除（[安全](security.md)）；
- **主要功能在沙箱里无法工作**且修不了。少了部分功能但仍可用的应用可以保留，在应用说明里写明哪些不能用（比如不支持 TUN 模式的代理客户端）。

应用**绝不会**因为它是怎么写出来的、用了什么 toolkit、或者网上有人叫它 slop 而被下架。开发者后来自己上了 Flathub，我们也不会因此下架，除非开发者提出。

下架时，开一个 PR 从 registry 中删除应用目录，写明原因并附上请求或 issue 的链接。合并后应用就从目录中消失，每周的 `delist-prune` 任务会把它的 ref 从仓库中移除。已安装的副本仍可继续使用，直至用户将其卸载。