OCaml 治理
OCaml 项目的结构、涉及的角色和职责。
一、引言
A. 概述和范围
OCaml 生态系统正在不断扩展,涵盖了越来越多的集体努力,旨在支持、扩展和丰富该语言及其用户群。本文档提供了以下方面的治理细节:
- OCaml.org 域名及其相关项目。
- OCaml 平台 - OCaml 编程语言推荐的工具集。
本文档概述了报告结构,详细介绍了相关角色,并界定了属于此治理范围内的每个项目的职责。目标是在高效运行与全面透明之间取得平衡,避免不必要的复杂性,同时维护清晰有效的治理模式。
B. 目的 - 反映现实的文档
在任何给定时间,本文档都必须反映当前现实。它并非旨在表达愿望,也并非反映人们可能期望看到的结构。这一点很重要,因为本文档的效用与其反映事物实际情况的程度成正比,而不是人们希望它们在未来成为的样子。随着环境的变化,本文档也应进行更新,使其始终如一地反映事物的现状。
D. 指导原则
OCaml 治理,包括 OCaml.org 和 OCaml 平台,以开放性、社区关注和兼容性等关键原则为指导。每个属于 OCaml 治理范围内的项目都应遵循这些原则,培养一个开放、协作且致力于 OCaml 语言及其应用的持续发展和进步的社区。
二、角色和职责
A. 所有者和代理
OCaml.org 域名和 OCaml 平台的所有者是 Xavier Leroy,OCaml 语言的主要开发者。OCaml.org 子域名下和 OCaml 平台内的项目由社区管理,这意味着社区积极参与这些项目的日常维护,但总体战略方向由所有者制定。
所有者的作用是解决可能与 OCaml.org 或 OCaml 平台相关的争议,特别是确保这些领域内的项目能够以协调的方式推进。社区的作用是通过积极参与、贡献和讨论来指导所有者的决策。为了培养一个健康且不断发展的社区,所有者将明确并公开目标和决策。
预计项目本身将进行自我管理,并在其社区内部解决问题,无需诉诸所有者。在所有者需要参与的情况下,他/她将充当仲裁员。
B. 代理
所有者可以选择委托他人管理域名并以所有者的名义行事,尽管所有权仍归所有者所有。代理可以自由选择他们如何安排自己,并与所有者达成一致。在特定争议的情况下,代理将与所有者协商,所有者在需要时将充当仲裁员。
目前,Xavier Leroy 已将 OCaml.org 和 OCaml 平台的责任委托给 Anil Madhavapeddy,后者已接受此角色。
C. 维护者
OCaml 治理下的项目将有自己的维护者,他们拥有相关存储库的提交权限,并负责:
- 管理特定项目。
- 直接向存储库编写代码。
- 征求和筛选他人的贡献。
- 确保所有者/代理了解社区需求。
通常,维护者仅对其负责的特定项目拥有权限,但预计不同项目的维护者将频繁协作,尤其是在重大更改或公告的情况下。通常,对项目做出实质性贡献的个人将被邀请成为维护者。
D. 贡献者
贡献者是 OCaml 社区的更广泛成员,他们对 OCaml 治理下的项目做出宝贵贡献,但通常没有权限直接更改项目的代码库或文档。任何人都可以成为贡献者,并且没有承诺期望、特定技能要求或选择流程。唯一必要的步骤是提出或建议对项目进行一些改进或更改。
例如,贡献者可以通过电子邮件列表、问题跟踪器和维基页面等工具与项目互动。维护者可以自由地将讨论引导到他们自己的专用邮件列表或首选的通信平台,这取决于他们认为合适的方式。那些其贡献成为公共 Git 存储库一部分的人将在某个公共网站上以某种形式获得认可,以表示感谢。
预计特定项目的定期贡献者可能会被询问他们是否希望成为维护者,如上所述。没有义务接受此类提议。
E. 用户
用户是最重要的群体,它包括更广泛的社区,即以任何方式与 OCaml 项目互动的任何人。这涵盖所有网站访问者、平台工具用户、包用户和邮件列表成员。如果没有用户,项目将毫无意义,因此应评估任何重大决策对该群体的影响。
在可行的情况下,应鼓励用户尽可能多地提供反馈并参与项目。与项目互动较多的用户可能会继续成为贡献者。
需要注意的是,这些角色并非相互排斥,例如,维护者和贡献者也必然是用户。
三、OCaml.org
定义 - OCaml.org 内的项目以其子域名作为特征。预计大多数新工作将属于现有子域名,因此已经有一组维护者和贡献者(如上所述)。
沟通 - 所有项目的维护者都必须监控ocaml/infrastructure
GitHub 问题跟踪器。问题跟踪器是交换有关 OCaml.org 项目的信息和决策的主要方式。如果项目希望建立自己的问题跟踪器,他们可以在 GitHub 上自由这样做(见下文)。
治理 - 项目可以自由选择其治理模式,前提是它与 OCaml 治理的治理和指导原则兼容。
A. 消歧 - OCaml.org 的含义
当使用“OCaml.org”一词时,可能会出现多种不同的解释。为了减少混淆,下面对这些解释进行了描述,并且还解释了本文档中该术语的含义。
二级域名 - 这是我们熟悉的域名,“OCaml.org”,它具有关联的子域名和记录(注意:仅供澄清和说明,此处的顶级域名是“.org”)。
社区网站 - 这是面向社区的网站,可以在ocaml.org找到,通常简称为“OCaml.org”。
基础设施 - 这可能指的是虚拟机 (VM)、服务或其他以某种方式通过二级域名本身路由的事物。一个明显的例子是托管社区网站的 VM,另一个例子是托管 Opam 包管理器工具使用的 tarball 和文件的 VM 和系统。
出于本文档的目的,我们采用第一种含义 - 即本文档与二级域名“OCaml.org”的治理相关。因此,任何涉及以某种形式使用域名的事物都受域名本身的治理影响。这包括任何面向公众的网页、URL 和其他资源。这一点很重要,因为从某种意义上说,OCaml.org 是其托管的项目的总和。
为了避免域名本身与社区网站项目之间的混淆,本文档中的“OCaml.org”一词仅指二级域名本身。任何对社区网站项目域名的引用都将包含子域名“www.ocaml.org”,即使它设置为重定向到ocaml.org。
B. 启动项目
任何新的工作提案都应在ocaml/infrastructure
GitHub 问题跟踪器上提出和讨论。如果维护者之间达成共识,认为该工作适合现有项目,则该项目的维护者可以继续进行。
如果需要新的子域名,则应在基础设施列表中提出简要提案,内容包括:
- 项目的目标和目的(包括所需子域名的名称)
- 所需特定资源以及持续时间(例如,VM)
- 对现有项目的影响或关系
- 有关初始维护者的信息
- 代码/内容的拟议许可安排的详细信息
以上信息旨在激发讨论,因此建议简洁明了。经过讨论,如果所有者/代理同意,则可以提供资源。所有者/代理没有义务提供除子域名之外的任何资源。
C. 关闭项目
项目可以关闭:
- 如果它已完成其目标,并且维护者请求将其关闭
- 如果没有维护者继续支持它,并且没有人愿意承担该角色
- 由所有者/代理出于任何原因关闭
在所有情况下,必须事先向基础设施列表发送通知,包括合理的时间范围和关闭原因。关闭仅意味着撤销或重定向子域名和/或关闭或收回提供的任何资源(例如,VM)。
D. 现有项目
项目以其子域名作为参考,当前项目的摘要维护在基础设施维基页面上:https://github.com/ocaml/infrastructure/wiki
四、OCaml 平台
OCaml 平台是 OCaml 编程语言推荐的工具集。它旨在为 OCaml 开发人员提供稳定一致的环境,使他们能够专注于构建高质量的软件。OCaml 平台中的工具各有其独立的生命周期。
本节旨在概述 OCaml 平台内工具孵化、推广和弃用的流程和标准。它为工具的生命周期提供了指南。
A. OCaml 平台工具的一般要求
除了工具生命周期每个阶段的要求外,OCaml 平台中的所有工具都必须满足一些一般要求。这些要求确保工具与平台的质量和标准保持一致。
- OCaml 平台仅包含工具。这些工具使用的库将由其传递依赖项支持。每个工具都会自行决定使用哪些库。这样做,它承诺在必要时支持这些库。
- 工具必须有完善的文档,包括清晰的安装说明和使用示例。
- 工具必须具有与 OCaml 平台兼容的宽松开源许可证。兼容的许可证包括允许在不同条款下分发修改版本且无需源代码的许可证。特别是,强制要求提供修改版本完整源代码的许可证与 OCaml 平台不兼容。兼容许可证的示例包括 MIT、ISC、Apache 许可证。与 OCaml 平台不兼容的许可证包括 GPL v2 和 v3。
- 平台工具必须采用 OCaml 行为准则并严格遵守其指南。
- 工具必须经过测试并与最新版本的 OCaml 兼容,并承诺遵循 OCaml 发布就绪流程,其中包括在新编译器版本的 alpha 版本期间发布平台工具的兼容版本或预览版本。
- 工具必须考虑到向后兼容性,并在其第一个稳定版本发布后完全向后兼容。
B. 工具生命周期阶段
1. 孵化 (Incubate)
定义
孵化阶段是 OCaml 平台中工具生命周期的第一个阶段。在此阶段孵化填补 OCaml 生态系统空白但尚未准备好进行大规模发布和采用的新工具。此阶段的工具具有快速迭代的开发周期,并且在第一个主要版本发布之前,其向后兼容性可能不可靠。
孵化要求
工具必须满足以下要求才能被考虑在 OCaml 平台中孵化
- 至少两位维护人员,他们致力于工具的长期维护
- 明确的目的和范围 - 工具必须填补 OCaml 开发人员工作流程中的空白,或提供完成现有工作流程的不同方法。如果与活跃工具重复,则两个工具的维护人员应进行沟通并解决重复问题
- 清晰的未来开发和维护计划,包括建立迁移路径和明确的社区需求以提升到活跃阶段
- 有效的实现以及充分的文档和测试
从孵化阶段移除工具
如果孵化标准不再满足,则可以将工具从孵化阶段移除。请注意,并非所有孵化工具都将提升到活跃阶段,但社区仍然会从中学到一些关于所需或有用功能的有用信息。
2. 活跃 (Active)
定义
活跃阶段是 OCaml 平台中工具生命周期的第二个阶段,它是 OCaml 社区每天使用的主力工具的归宿。这些工具是核心项目,被大量依赖并推荐给新项目和新手。活跃工具以其强大的向后兼容性保证和对用户工作流程的最小干扰而闻名。
对活跃工具的任何更改都将附带完整的更新说明,并且其元数据文件会被可靠地版本化,以允许用户控制何时升级到新版本。活跃工具的开发社区始终开放,鼓励任何人都可以成为维护人员。
活跃工具的维护人员定期举行开发者会议。欢迎社区中任何有兴趣为项目做出贡献的人加入开发者会议。这些开发者会议的会议记录会在 GitHub 上公开。
进入活跃阶段的工具可以托管在 OCaml GitHub 组织中,权限由 GitHub 团队管理,只有项目的首席维护人员和 OCaml GitHub 组织管理员可以更新。
从孵化阶段提升到活跃阶段的要求
要从孵化阶段提升到活跃阶段,工具必须满足以下要求
- 工具不得重复平台中其他活跃工具已提供的任何功能。在孵化阶段必须已解决与平台中其他工具的任何重复和重叠。
- 工具必须已达到稳定版本,以版本号大于 1.0 和强有力的向后兼容性执行作为标志。
- 工具必须有完善的文档,并有清晰的未来发展路线图。
- 工具必须拥有强大且活跃的开发社区。
最终由所有者和代表在与开发社区协商后,根据工具的整体稳定性、OCaml 社区的采用情况以及对平台原则的遵守情况,决定是否提升工具。
3. 维持 (Sustain)
定义
维持工具是已使用多年的项目,被认为极其稳定。它们为 OCaml 社区提供基本功能,虽然它们没有积极开发,但可以继续可靠地使用很长时间。
维持工具是 OCaml 平台生态系统的重要组成部分,因为它们出色地完成了其目的。虽然可能存在更新的替代方案,但维持工具会得到维护以支持更新的编译器版本。如果维持工具提供的功能在活跃阶段有替代方案,建议使用活跃替代方案,因为它可能会提供性能或可用性方面的优势。
从活跃阶段提升到维持阶段的要求
要从活跃阶段提升到维持阶段,工具必须满足以下要求
- 工具已在活跃阶段存在相当长的时间,通常为几年。
- 工具进入维护阶段,不再开发新功能。
4. 弃用 (Deprecated)
定义
弃用阶段是 OCaml 平台中一个阶段,在此阶段工具将逐步淘汰,并提供通往更好工作流程的清晰路径。这些工具不再在平台内积极维护,但可能仍由社区维护人员维护。
从维持阶段提升到弃用阶段的要求
要被考虑弃用,工具必须满足以下要求
- 工具已被活跃替代方案取代,并提供清晰的迁移路径。
- 工具必须在维持阶段存在足够长的时间,并且已向用户发出充分的通知,以便他们能够按照自己的节奏进行迁移。
V. 流程
A. 决策和沟通
大多数讨论的首选方法是通过大致共识和运行代码。讨论应公开进行,并在 OCaml Discuss 论坛、相关项目邮件列表或相关问题跟踪器上进行。鼓励用户和贡献者参与并发表意见。通常,项目的维护人员将在考虑更广泛的观点后做出最终决定。
OCaml 治理下的所有项目都应有文档,以便用户可以了解它们并理解其目的以及如何做出贡献。
B. 贡献流程和许可
OCaml 治理下的每个项目都需要定义清晰的贡献流程和许可协议,以便贡献者了解如何与维护人员互动。通常,这将涵盖沟通发生的位置以及提交补丁的流程。鼓励来自社区的贡献,并且可以采取多种形式,包括错误修复、新功能、内容,
或文档。
OCaml 治理下的所有项目都应为开源项目,并且许可安排应反映这一点。
C. 争议解决
维护人员应负责其项目的决策。目的是让任何维护人员通过每个项目内的共识流程来解决分歧。
在极少数情况下,如果项目的维护人员无法就前进方向达成一致,建议采用以下方法
- 需要阐明具体问题,以便明确需要讨论的内容。
- 将征求其他 OCaml 项目维护人员的意见。
- 如果讨论仍无法解决,则所有者(或其代表)将充当仲裁员。
在上述过程中,期望所有人员都保持理性,并尊重彼此的努力和观点。总的来说,我们期望在社区中达成共识以解决冲突。
版本 1.0.0 - 2015 年 9 月
该文档的第一个版本于 2015 年 9 月由现任维护人员达成一致。您可以回顾讨论或查看相关问题。
版本 1.0.1 — 2022 年 3 月
- 解决了标题大小写和语法的统一性。
版本 2.0.0 — 2023 年 6 月
- 包含 OCaml 平台治理。
- 将文档名称从“OCaml 治理”重命名为“OCaml 平台工具生命周期及治理”,以反映 OCaml 平台的包含。
- 更新 OCaml.org 的治理,以反映使用 `ocaml/infrastructure` GitHub 问题跟踪器代替基础设施邮件列表。
版本 2.0.1 — 2023 年 10 月
- 删除活跃工具必须托管在 OCaml GitHub 组织中的要求。