这个项目能做什么

Graft 是一个早期 alpha 项目,允许通过类型化 TOML 声明小型容器工作负载,并由 Nix、Podman Quadlet 和 systemd 自动实现。其流程为:TOML 意图 → 验证解析为 JSON → Nix 构建 rootfs → Quadlet .container 文件 → systemd 服务 → Podman 容器。该项目旨在避免 Dockerfile、运行时包安装和手动编写 Quadlet 文件,转而通过验证支持的工作负载概念而非接受任意 Podman、Quadlet、systemd 或 Nix 片段来工作。 仓库描述了两种作用域的 rootfs-store 后端:NixOS 系统/提权容器和 Home Manager user-manager 用户容器。已报告的支持功能包括:包、argv 命令、身份、工作目录、环境变量、长时服务、有限作业、初始化作业、显式启动、类型化工作负载依赖、指定容器网络、默认只读绑定、托管卷、限制 tmpfs 挂载、qualified CDI 资源引用、类型化加固控制、生成式 schema 验证以及保留字段失败关闭拒绝。 安全默认值包括只读 rootfs、已丢弃的运行时能力以及 no-new-privileges,放松选项均需显式声明。Graft 不提供默认的自动启动或重启策略,也不会静默配置 Podman、rootless overlay 支持、systemd 用户 linger、账户、防火墙规则或 DNS 策略。容器共享宿主内核,不充当虚拟机级别的安全边界。当前后端仅暴露每个工作负载已实现的 Nix 运行时闭包,并通过强制只读存储挂载提供,无 complete-store 回退。 README 将 Graft 定位为适合小型 Nix 原生服务和受益于可审查 TOML 及 systemd 所有权的开发工作负载。文档同时列出了替代方案:直接使用 Quadlet 以覆盖完整上游选项,使用 Compose 工具进行 OCI/Compose 工作流,或在需要独立内核边界时使用虚拟机。项目采用 Apache-2.0 许可证授权。