Niobium
Niobium 根据一份经过签名的发布描述来安装、更新、修复和卸载桌面软件。你把一次发布描述为数据,Niobium 将它打包并签名,再由一个小巧的原生 setup 可执行文件以事务方式应用:无论在任何时刻崩溃,机器上要么是旧版本,要么是新版本,绝不会是两者的混合。
Niobium 目前为 0.1 版本,尚未做出任何兼容性承诺。哪些内容已经验证、哪些尚未验证,统一列在一个页面上:状态与平台。
- 清单是数据,绝不是代码。 没有安装脚本、shell 命令或
exec字段。 - 期望状态,而非执行步骤。 你声明应该安装什么,由 Niobium 规划步骤。
- 安装程序负责部署,应用负责迁移。 数据库升级等业务逻辑通过 App Bootstrap 在你的应用中运行。
- 权限是封闭的能力集合。 提权助手只接受一组固定的、带类型的文件与系统集成操作。
- 安装是事务化的。 崩溃后的恢复只会到达旧版本或新版本。
- 没有运行时扩展。 安装程序不加载插件、钩子或自定义库。
一次发布的流程
Section titled “一次发布的流程”- 描述。 在你自己的构建产物旁边,编写一个
product.json清单,并为每个组件编写一个component.json。 - 打包并签名。
nbpack把每个组件变成不可变的tar.zst制品,组合出发布清单,并将其签名写入一个 TUF 仓库。你的build.zig通过 Niobium 构建 API 驱动这一过程。 - 发布并安装。 通过 HTTP 提供仓库,或者以离线包的形式分发。用户运行
setup,它会验证签名,并以事务方式应用这次发布。
教程:第一次发布 用示例产品完整走一遍这三个步骤。
它适合你吗?
Section titled “它适合你吗?”以下情况 Niobium 可能适合:
- 你为 macOS、Windows 或 Linux 发布原生桌面软件,并希望在这些平台上使用同一种安装模型;
- 你希望安装和更新不会停留在只应用了一半的状态;
- 你希望发布授权(谁可以发布什么、回滚保护)与应用版本相互独立;
- 你能用 Zig 0.17 从源码构建:Niobium 不提供预构建的二进制文件。
以下情况 Niobium 不适合:
- 你需要安装时脚本或自定义动作:框架在设计上就拒绝它们;
- 你需要其封闭集合之外的能力(快捷方式、文件关联、服务、应用注册、受管文件);
- 你现在就需要可用于生产环境的安装程序:Windows 和 Linux 上的真实系统验证、整机范围安装以及操作系统代码签名都尚未完成(状态与平台);
- 你需要的平台不在简短的支持列表中,或者需要支持承诺:Niobium 是一个尽力维护的个人业余项目(关于本项目)。
各部分的用途
Section titled “各部分的用途”| 部分 | 用途 |
|---|---|
| 教程 | 完整地构建、签名、安装、更新并卸载一次示例产品 |
| 概念 | 理解模型:清单、制品、事务、权限、信任、通道 |
| 指南 | 完成单项任务:打包、签名、发布、实现 App Bootstrap、嵌入、静默安装 |
| 安全 | 了解 Niobium 防御什么、不防御什么,以及如何报告问题 |
| 状态与平台 | 查看哪些内容已经验证、在哪个平台上、结果如何 |
| 平台支持 | 查看目标平台、各自的支持层级以及后续计划 |
| 路线图 | 查看哪些功能已经提供、哪些正在开发、哪些不在计划内 |
| 故障排查 | 将退出码或故障对应到原因,并找到日志 |
| 关于本项目 | 了解 Niobium 为何存在、由谁维护、可以期待怎样的支持 |
| 参考 | 查阅字段、命令、退出码、事件和 C ABI |
源码、规范和问题跟踪都在 GitHub 上。英文版是原文;如果中文译文与英文版不一致,以英文版为准。