RFC-0006:Zircon RFC 流程附录

RFC-0006:Zircon 的 RFC 流程附录
状态已接受
领域
  • 治理
说明

使用适用于 Zircon 的 Fuchsia RFC 流程时的特殊注意事项。

Gerrit 更改
  • 417975
作者
审核人
提交日期(年-月-日)2020-08-17
审核日期(年-月-日)2020-09-25

总结

本文档提出了对 Fuchsia RFC 流程的优化,以考虑 Zircon 代码库所面临的挑战。具体而言,对 Zircon 做出的更改符合下述一个(或多个)条件必须遵循 RFC 流程才能被接受。

设计初衷

目前,Zircon 使用临时流程进行系统级更改,但现在 Fuchsia 拥有明确的 RFC 流程,Zircon 应遵循该流程。不过,鉴于 Zircon 位于软件堆栈的最底部,与靠近项目分支的代码(例如,显著增加依赖关系图或如何平衡内存用量与性能)相比,它对某些类型的更改更敏感。

设计

对 Zircon 的绝大多数更改都不需要 RFC,只需进行代码审核即可。但是,除了 Fuchsia RFC 流程中列出的注意事项外,源目录中还存在以下更改:

  • /zircon
  • /src/zircon
  • /src/bringup

时,必须使用 RFC 流程:

  • 添加或移除 Zircon 系统接口。系统调用接口、关联的结构和常量是整个系统的标准答案,其影响不仅局限于 Zircon 本身,而且在实现之前需要广泛共识。

  • 更改资源处理行为。系统如何处理资源(如内存、I/O、处理器时间或功耗)的分区或虚拟化,以及资源超额订阅或稀缺时执行的操作。

  • 修改隔离保证。同等任务中私密和隔离的内容如何、彼此独立,以及特权任务可以观察和修改哪些特权任务。此处的更改需要通过此流程与安全团队协商批准。

  • 性能或内存使用的重大变更。有时,如果添加了额外的安全性、监控或功能,性能会相应地下降或内存使用量增加,而这需要通过此流程进行审核。

  • 倾向于使用单个平台。Zircon 力求在所有支持的架构和开发板上提供相同的功能和服务基准。如果变更利用一种平台功能,但在其他支持的平台上不可行或不可行,则需要采用此流程。

  • 添加或降级对平台的支持。添加新的开发板或架构,或者废弃/减少对现有平台的支持都需要通过此流程进行审核。

  • 新的 build 配置。添加新的 build 配置会增加整个项目的开发和测试负担,并且需要预先进行审核。

  • 依赖关系图显著增大。Zircon 依赖项会影响整个项目,并且会发生重大变化。例如,如果新依赖项本身具有重要依赖项或本身很大,应使用 RFC 流程。

其他可能受益于 RFC 流程的更改是需要手动或自动对代码库进行大规模更改的更改。例如,如何写入日志或如何处理错误路径。我们的目标是找到最佳模式并将其统一应用于整个代码库,而不是孤立地生活。

文档

此 RFC 和 Fuchsia RFC 流程是适用于 Zircon 的 RFC 流程文档。

缺点、替代方案和未知情况

Fuchsia RFC 过程会出现阻力,可能会减慢制定和执行决策的速度。“何时使用此流程”部分中的标准尝试通过将流程限定为继发情况来缓解这个问题,但此类范围必定存在假正例和假负例。

在源代码库中记录决策会使其更难以更改。这种影响在某些情况下可能是积极的,但在其他情况下也可能是负面影响。

管理决策过程有许多可能的替代策略,但与 Fuchsia RFC 流程及其演变保持一致,因为它解决了这些问题,因此这似乎是目前的最佳方式。