项目治理#
本文档旨在将 MNE-Python 项目在常规与特殊情形下所采用的治理流程正式化,并阐明决策是如何作出的、社区各组成部分之间如何互动,包括开源协作开发与可能由营利或非营利机构资助的工作之间的关系。
项目概况#
MNE-Python 项目(以下简称“本项目”)是一个开源软件项目。本项目的目标是开发用于在 Python 中分析神经科学数据的开源软件。本项目以 BSD(或类似)开源许可证发布,公开开发,并公开托管在 mne-tools GitHub 组织下。
本项目由一个分布式的开发者团队开发,这些开发者称为贡献者(Contributors)。贡献者是指向本项目贡献代码、文档、设计或其他工作的个人。任何人都可以成为贡献者。贡献者可以隶属于任何法律实体,也可以不隶属于任何实体。贡献者通过提交、评审和讨论 GitHub Pull Request 与 Issue,以及参与 GitHub、Discourse 和其他渠道上公开的项目讨论来参与项目。项目参与的基础是开放与透明。
项目社区由本项目的所有贡献者和用户组成。贡献者代表更广泛的项目社区工作,并对社区负责;我们努力将贡献者与用户之间的门槛降到尽可能低。
本项目不是法律实体,目前也未与任何法律实体建立正式关系。
治理模式#
领导角色#
MNE-Python 的领导架构由以下团队组成。各团队的现任成员名单维护在 项目领导团队 页面。
维护者团队#
维护者团队(成员)负责实施软件变更并支持用户社区。职责包括:
与指导委员会共同做出基础设施/大规模软件决策
评审并合并 pull request
回应 GitHub 上的 issue
监控 CI 失败并加以处理
社区维护:回复论坛帖子、主持答疑时间(office hours)
社区信息发布:在社交媒体上发布公告(版本发布、新功能等)
培训维护者团队的新成员
注意:每位维护者可能根据其工作内容获得不同的权限(例如 GitHub 仓库的 triage/merge/admin 权限、社交媒体账号访问权限、Discord 管理员角色、论坛管理权限)。维护者这一角色本身并不自动赋予这些权限。
指导委员会#
指导委员会(成员)负责项目的日常指导与统筹。职责包括:
争取资助(要么专门为 MNE 开发撰写基金申请,要么说服他人在其研究经费中为 MNE 开发列入资金)
将顾问委员会的高层路线图指导(例如“更好地支持 OPM”)转化为可执行的路线图条目(例如“增加对 QuSpin 以外 OPM 厂商的支持,并为 coreg 和 OPM 特有伪迹添加标准预处理流程”)
与更广泛的 Scientific Python 生态协调
与维护者团队共同实施大规模软件变更(例如类型提示、
docdict、影响多个子模块的改动)与维护者团队共同做出基础设施决策(例如依赖版本策略、发布节奏、CI 管理等)
其他未在此提及、且不属于其他团队职责范围的治理任务
出席指导委员会会议(约每 2 周一次;具体时间由 SC 成员商定)
出席顾问委员会会议(约每 1–2 年一次)
撰写资助申请
与维护者团队沟通/协调
指导委员会成员还应当然(ex officio)被视为维护者团队成员,因而应享有维护者所需的相应权利与权限(密码、合并权限等)。
指导委员会主席#
指导委员会主席(成员)负责在指导委员会与社区之间进行联络。职责包括:
召集指导委员会会议
在无法达成共识时发起投票
向社区传达重要决策(以及作出这些决策的背景原因)
外部顾问委员会#
外部顾问委员会(成员)负责高层路线图与资助方面的指导。职责包括:
出席顾问委员会会议(约每 1–2 年一次)
定期与指导委员会沟通并提供指导
会议#
维护者会议#
维护者团队可以自行决定是否举行维护者会议。这些会议可以是讨论会,也可以是保持彼此联系的社交聚会(或者完全不同的形式!)。频率和时间可以灵活变化。
指导委员会会议#
指导委员会每两周举行一次强制会议,讨论项目管理与资助事宜。指导委员会可自行决定更改会议时间或频率。
全体会议#
每年至少一次,所有维护者和指导委员会成员应共同参加一次会议(可以是线上会议)。会议时间将通过投票确定。在会议期间,应讨论自上次会议以来提出的任何治理变更,并可通过投票予以采纳。
领导角色的产生#
维护者团队#
任命#
每年一次,在年度全体会议之前,维护者团队应评估来年的预期需求。在会议上,他们将决定希望向团队中新增多少名维护者。新维护者由现任维护者与指导委员会投票从申请者中选出。
在特殊情况下,指导委员会可主动进行临时增补,例如用资助经费聘用专门从事 MNE 维护工作的人员。此类临时增补不一定需要维护者团队投票,因为假定聘用机构的招聘程序足够严格,能够避免偏见、任人唯亲等问题。
任期#
维护者团队的任命为无固定期限。
终止#
在以下情形下,维护者身份可能丧失(并撤销相关权利与权限,例如密码、合并权限等):
自愿辞职:可在任何时间、以任何理由提出。
不活跃。每年一次,在年度全体会议之前,指导委员会应评估维护者过去一年的活跃情况。对于似乎不活跃的维护者,应与其联系,并给予其对不活跃认定提出异议的机会(例如说明其在 MNE 社区中从事的、可能无法从 GitHub 或论坛活跃度报告等简单指标中看出的工作)。未对不活跃认定提出异议(或未在 14 天内回复,指导委员会可酌情延长期限)的维护者,将被移出维护者团队。若指导委员会与该维护者仍对被指称的不活跃存在分歧,仍可经维护者团队其余成员三分之二多数投票予以移除。
行为不当。在任何时候,维护者都可能因违反我们的社区准则(依据其中规定的执行指南)而经行为准则委员会一致投票被移除。
恢复身份。自愿辞职的维护者可经现任维护者团队投票,以临时方式重新任命。因不活跃被移除的维护者可重新申请年度新维护者招募。因行为原因被移除的维护者,只有在行为准则委员会依据我们《社区准则》的执行部分允许/恢复其资格时,才可恢复身份。在此情况下,重新获得资格的前维护者可通过年度任命流程重新申请。
指导委员会#
任命#
指导委员会任期约为 2 年。任期应错开安排,使任何一年改选的席位不超过半数。在首次组建时,指导委员会决定哪 50% 的成员获得初始的三年任期,以启动错开机制。
维护者团队与现任指导委员会将投票填补指导委员会的空缺席位。候选人可由现任维护者团队和指导委员会成员(自)提名。
指导委员会可随时增加委员会席位,以适应委员会的工作量与需求。新增席位应按常规(改选)选举的相同方式填补,即由维护者团队和指导委员会全体成员参与投票。任期长度的设定应尽可能维持错开改选周期的 50/50 平衡;在已经完美平衡的情况下,任期应倾向于更长。
若因终止(见下文)出现空缺,指导委员会可召开特别选举(遵循常规(改选)选举的相同程序),也可选择等到下一次既定选举再填补该席位。对于已填补的空缺,任期应为离任者未任满的剩余任期;但若补缺选举后剩余时间不超过 6 个月,则任期应为 2 年加上该空缺席位的剩余时间。
终止#
在以下情形下,指导委员会成员身份可能丧失(并撤销相关权利与权限,例如密码、合并权限等):
自愿辞职:可在任何时间、以任何理由提出。
行为不当。在任何时候,指导委员会成员都可能因违反我们的社区准则(依据其中规定的执行指南)而经行为准则委员会一致投票被移除。
外部顾问委员会#
外部顾问委员会由指导委员会邀请组成。任何人都可推荐潜在人选。外部顾问委员会的任命与免职由指导委员会决定。
决策流程#
选举公告#
所有投票应至少开放十天,并应提前 14 天通过电子邮件向所有有投票资格者公告。投票截止时间也应添加到核心团队共享的 Google 日历中。投票期过半时至少应发送一次提醒。
投票机制#
所有选举均应采用 ElectionBuddy 或类似服务的匿名在线投票方式进行。除非另有规定,投票机制应为排序复选投票(ranked choice voting),门槛为 50% + 1 票。这意味着,每个人对自己认为能够胜任该职位的候选人进行排序(按偏好顺序)。请注意,投票者可以通过提交空白选票来拒绝所有候选人,因此即使只有一人竞选某个席位,如果投空白票的选民足够多,该人仍可能落选。
指导委员会选举投票#
指导委员会成员选举的投票应根据需要安排,以应对指导委员会的工作量,并至少提前 14 天向符合条件的候选人(即维护者团队)公告,之后安排现任维护者与指导委员会成员投票。
维护者团队选举投票#
维护者团队增补的投票应在年度全体会议后尽快安排。维护者团队应通过 MNE-Python 的在线渠道公布空缺席位。申请(包括简短的候选人陈述)必须至少开放 14 天,之后安排现任维护者与指导委员会投票。维护者团队应建立保密的申请提交系统(申请包括简短的候选人陈述),例如专用电子邮件地址、Google 表单或类似的保密提交机制。
机构合作伙伴与资助#
项目的领导角色已在上文定义。除通过担任上述某一角色参与项目外,任何外部机构、个人或法律实体均无权拥有、控制、篡夺或影响本项目。然而,由于机构可以成为项目的重要资助机制,正式承认机构对项目的参与十分重要。这些机构即机构合作伙伴(Institutional Partners)。
机构贡献者(Institutional Contributor)是指作为其在机构合作伙伴处的正式职责的一部分为本项目做出贡献的任何项目贡献者。同样,机构项目负责人(Institutional Project Leader)是指作为其在机构合作伙伴处的正式职责的一部分为本项目做出贡献的任何担任项目领导角色的人。
根据上述定义,机构合作伙伴是指任何国家中雇有至少 1 名机构贡献者或机构项目负责人的任何受认可法律实体。机构合作伙伴可以是营利或非营利实体。
机构通过聘用作为其正式职责的一部分积极为本项目做出贡献的个人,而有资格成为机构合作伙伴。换言之,合作伙伴影响项目的唯一方式,是与贡献者和领导者社区的任何其他成员以同等条件积极参与项目的开放开发。仅仅在机构环境中使用项目软件并不能使某实体成为机构合作伙伴。资金捐赠也不能使某实体成为机构合作伙伴。一旦某机构符合机构合作伙伴资格,指导委员会必须提名并批准该合作关系。
如果某个现有机构合作伙伴在某一时点不再拥有任何做出贡献的雇员,则开始为期一年的宽限期。如果在这一年期结束时,其仍没有任何做出贡献的雇员,则其机构合作伙伴关系将失效,恢复该关系需要走新合作伙伴的正常流程。
机构合作伙伴可自由通过任何合法方式为其在本项目上的工作争取资助。这可能涉及非营利组织从私人基金会和捐赠者处筹集资金,或营利性公司构建利用项目软件与服务的专有产品和服务。机构合作伙伴为在本项目上工作而获得的资助称为机构资助(Institutional Funding)。然而,机构合作伙伴获得的任何资助都不能凌驾于项目领导层之上。如果某合作伙伴有资助用于开展 MNE-Python 工作,而项目领导层决定不将该工作作为项目推进,该合作伙伴可自行推进。但在这种情况下,该合作伙伴的这部分工作不属于 MNE-Python 的范畴,且不得以任何暗示正式关系的方式使用项目商标。
机构合作伙伴的权益包括:
可选择在 MNE-Python 网站和演讲中获得致谢
能够在 MNE-Python 网站和演讲中标注自己的资助来源
能够通过其机构贡献者和机构项目负责人的参与来影响项目。
邀请委员会成员参加 MNE-Python 开发者会议
现任机构合作伙伴名单维护在 Supporting institutions 页面。
文档历史#
致谢#
本文档的相当一部分内容改编自 SciPy 项目的治理文档,后者又改编自 Jupyter/IPython 项目的治理文档和 NumPy 的治理文档。
许可#
在法律允许的最大范围内,作者已根据 CC-0 公有领域奉献/许可,放弃 MNE-Python 项目治理文档的所有版权及相关或邻接权利。