几天前,Linux 项目以合规为由将几名俄罗斯籍的开发者从 MAINTAINERS
文件中移除,详情可参考 Phoronix 上的三条新闻(新闻 1、新闻 2、新闻 3)。事件发酵后引发了广泛讨论。自认已经差不多了解事情的缘由,我决定写下这篇博文阐述自己的看法。先说结论:无论本事件是否涉及政治的介入,行政行为的公定力都使得移除特定开发者成为既定事项,社区内讨论是否移除的流程没有意义,同时开源自由软件的理念也允许法律规定的情形为例外。
基于行政法基本原则的推理过程如下:美国制定了制裁俄罗斯的法案,Linux 基金会作为在美国注册的非营利组织,应当遵守美国法律。本事件中,美国政府的行政行为指向的行政相对人是 Linux 基金会,而非 Linux 项目或其中参与项目运营的俄籍开发者(可以作为第三人)。行政行为一经作出,除非有重大且明显的违法情形即假定其生效,而任何组织或个人非经法定程序应受该行为约束。因此在 Linux 项目内讨论“是否将应当将俄籍维护者从名单移除”注定是没有实质意义的流程。另外,本事件的性质应该是“子项目负责人的人事变动”,不是禁止特定国籍的人参与项目开发。社区不拥有公权力,没有正当程序的要求,基于开发者之间的信赖建立起来的透明流程应该以法律的介入为例外。虽然从公共关系的角度出发,向开发者们告知令人信服的理由更有利于维持社区内成员之间的公信力,但这终究取决于项目总负责人的想法,不受法律与许可证的约束。接下来为推理补充细节。
Linus 的发言与 Maintainer 身份的性质
首先,Linus 本人的脾气属于众所周知的暴躁,他在邮件列表中的回应中恐怕只有很少的有效信息,大概是以下两点:
这是遵守美国制裁俄罗斯法律的行为
Linus 本人愿意配合
把其他言论,比如所谓芬兰与俄罗斯的世仇,当做气话即可,相信芬兰施行仇恨教育还不如相信这是 Linus 试图用历史材料将行为合理化,而这也与本事件无关。毕竟,如果真的是仇恨入脑,俄罗斯发动战争这么长时间,为何现在动手才移除他们?
我不是参与内核开发的程序员,因此不了解内核开发的工作流程。但是,我觉得有必要说明一项事实。参考 Linux 在 Github 上的仓库主页信息,有 15.7k 以上的“贡献者”;而 MAINTAINERS
文件虽然有 25617 行,但其中每个模块普遍占据 5 行以上。假设其中的每一个模块都有一名维护者负责的话,估算约有 5 千人在列表中。并且一些模块实际上没有维护者,还有的模块则在文件中占用更多行数以描述信息,因此这个估算必然偏多。给出估算的目的,是想证明维护者人数远少于贡献者:相对于贡献者,维护者是更特殊的身份,作为审核相应模块代码的负责人,还有“荣誉称号”的意义。另外还想指出的是,开发者从维护者名单中被移除不意味着 TA 不可以继续提交代码。
开源自由软件的理念与中立性讨论
有人认为,这起事件违反了“开源精神”,比如政治中立和技术中立的原则。让我们先从开源软件与自由软件的定义入手展开讨论。
本文不讨论开源软件和自由软件的区别,不过一般来说自由软件可以视作开源软件的子集。目前,主流的许可证大多同时得到 OSI 和 FSF 的认可,Linux 项目在开源自由的 GPL 2.0 许可证下发布,本文同时引用维基百科中记录的对两者的定义。
开放源代码的定义由Bruce Perens(一位 Debian 创始人)定义如下:
- 自由再散布(Free Distribution):允许获得源代码的人可自由再将此源代码散布。
- 源代码(Source Code):程序的可执行档在散布时,必需以随附完整源代码或是可让人方便的事后获取源代码。
- 派生著作(Derived Works):让人可依此源代码修改后,在依照同一许可协议的情形下再散布。
- 原创作者程序源代码的完整性(Integrity of The Author’s Source Code):意即修改后的版本,需以不同的版本号码以与原始的代码做分别,保障原始的代码完整性。
- 不得对任何人或团体有差别待遇(No Discrimination Against Persons or Groups):开放源代码软件不得因性别、团体、国家、族群等设置限制,但若是因为法律规定的情形则为例外(如:美国政府限制高加密软件的出口)。
- 对程序在任何领域内的利用不得有差别待遇(No Discrimination Against Fields of Endeavor):意即不得限制商业使用。
- 散布许可协议(Distribution of License):若软件再散布,必需以同一条款散布之。
- 许可协议不得专属于特定产品(License Must Not Be Specific to a Product):若多个程序组合成一套软件,则当某一开放源代码的程序单独散布时,也必需要符合开放源代码的条件。
- 许可协议不得限制其他软件(License Must Not Restrict Other Software):当某一开放源代码软件与其他非开放源代码软件一起散布时(例如放在同一光盘),不得限制其他软件的许可条件也要遵照开放源代码的许可。
- 许可协议必须技术中立(License Must Be Technology-Neutral):意即许可协议不得限制为电子格式才有效,若是纸本的许可协议也应视为有效。
根据斯托曼和自由软件基金会(FSF)的定义,自由软件赋予用户四种自由:
- 自由之零:不论目的为何,有使用该软件的自由。
- 自由之一:有研究该软件如何运作的自由,并且得以修改该软件来符合用户自身的需求。获取该软件之源码为达成此目的之前提。
- 自由之二:有重新散布该软件的自由,所以每个人都可以借由散布自由软件来敦亲睦邻。
- 自由之三:有改善再利用该软件的自由,并且可以发表修订后的版本供公众使用,如此一来,整个社群都可以受惠。如前项,获取该软件之源码为达成此目的之前提。
自由软件还有两个特点:
自由软件不是没有著作权
自由软件不使用封闭格式
英文维基百科还对开源软件的定义做了一些补充:
OSI 使用“开源”而不是“自由软件”这个标签,因为它认为后者带有不良的意识形态和政治色彩,并且它希望专注于开源软件的务实和商业友好论点。
违反了技术中立?
指控本次事件中移除俄籍开发者的行为违反技术中立原则恐怕是无稽之谈,这个词根本不是这么用的。技术中立原则强调实现某一技术的软件是中立的,开发者不承担用户将软件用于违法行为的责任。应受技术中立原则保护但不得的典型例子是 Shadowsocks 原作者被施压删库的事件。移除俄籍开发者的原因不在于 Linux 项目,故技术中立原则与本事件无关。
违反了政治中立?
本次的移除俄籍开发者事件违背政治中立可以是一个不成立的命题。之所以说“可以”,是因为我想分情况讨论,即分为“开源自由软件社区不存在政治中立原则的要求”和“开源自由软件社区存在政治中立原则的要求”两种情况。但推导出的结论依然是不变的:Linus 作为 Linux 基金会的成员只是普通地遵守法律。
假设开源自由软件社区不存在政治中立原则的要求。那么推理很简单,开放源代码软件不得因性别、团体、国家、族群等设置限制,但若是因为法律规定的情形则为例外。完全无需判断移除俄籍开发者的合规要求的政治性质,直接把它看作遵守美国制裁俄罗斯法律的行为即可。
假设开源自由软件社区存在政治中立的原则的要求。如果社区真的秉承政治中立的原则,那必然是为了保障开发过程中的自由、顺利。本该是讨论技术的空间,却因政治观点的论战变得乌烟瘴气,任何技术爱好者都不会乐意看到这一幕。所以政治中立的前提是存在一组足够有争议、能够引发冲突的政治观点,虽然开发者们有不同的立场,但他们避免将这些观点带入项目开发之中,而与立场冲突的人和谐地交流技术。
但那又如何?有原则就会有例外。除了法律,如果为了保障比开源自由软件坚持的理念更加基本的价值观,开源社区就应该为它让路。恐怕再也没有比人道主义、拥抱和平更加基本的价值观了,同时也难以想象一个受到战争影响的国际社会如何成为开源社区平稳运行的基础。所以为了阻碍俄罗斯发动的侵略战争,依据法律实施对俄罗斯的制裁是必要的。这就涉及到美国政府制裁俄罗斯法案的比例原则问题。
制裁俄罗斯的法案至今顺利执行而未受到成功的挑战,可见它没有违宪,可以认为它符合合法性要求;制裁俄罗斯的手段是限制美国管辖的组织与财政部公布的 OFAC SDN 清单上的俄罗斯实体相关的组织或自然人之间的合作关系,全面实施制裁将有效减少俄罗斯的财政收入,拖慢俄军在战场上的脚步,符合合目的性要求;限制组织与俄罗斯的合作关系必然会让组织有所损失,但并不是完全断绝与俄罗斯人的联系,符合最小损害原则;将阻碍俄罗斯的战争机器与美国管辖下的组织损失的利益相比较,前者更加紧迫且有利于实现公共利益,后者预期仅损失短期的利益,损失的利益小于可获得的利益,符合狭义比例原则。综上,美国对俄罗斯的制裁是合理的。
Linux 基金会移除 Linux 项目中的俄籍开发者的行为是美国制裁俄罗斯的一部分。如果单独拆出来观察,仅仅移除几个无辜的人看起来完全没有起作用。但是请注意两点:第一,仅讨论其中一小部分对俄罗斯有多少影响是没有意义的,因为制裁要求全面,必须观察整体上的效果;第二,移除他们时有说明,提供材料证明与 SDN 清单上的实体无关后可回归。
这时就可能有人会问:为什么要求这些开发者自证清白才能回归?这个要求可能不是自证清白,而是类似于“出示证件”的性质。至于没有依靠公司的个人开发者,或许提交收入流水表明与 SDN 清单上的实体没有经济往来即可,当然具体应以实际情况为准,这里只是做一个推测。
由上面的论述可以得出结论,即使开源自由软件社区强调政治中立的理念,面对以实现更加基本的价值观而制定的合理合宪的法律,也应当遵循它。总的来说,不管社区是否强调政治中立的原则,Linux 基金会都应当遵循制裁俄罗斯的法律。
我个人认为开源软件社区并不特别强调政治中立,因为这会和社区(包括其他项目)中的一些现象矛盾。比如,Linux 作为一款在 GPL 许可证下发布的软件,自它附带许可证时起就已经带上了宣扬自由理念的政治色彩。如前文引用的内容可见,OSI 定义开源软件时刻意避免使用“自由”这样的词汇。难道说,大家都忽略了软件本身强调“自由”这一事实吗?
人们认为违反政治中立的理由是开发者仅仅因俄籍身份就被驱逐。但本事件的性质应该是“子项目负责人的人事变动”,即暂时移除负责人的审核相应代码的权限,并非禁止他们访问源代码。两者的区别非常大,如果是后者就非常恶劣,因为那种行为才真正违反了“不得对任何人或团体有差别待遇”的原则——由于用户被视为共同开发者,开发者和用户的地位几乎等同,限制用户参与贡献就是明显的差别对待;美国政府的合规要求也将违背比例原则,制裁的范畴应当在经济等领域,不包含对开发者技术开发的限制。
总结
本事件的政治性质被夸大了。确实,Linus 或许欠上万开发者一个态度诚恳的解释,但这也只是公共关系范畴的问题,并不至于上升到政治甚至哲学层面。受开源社区恩惠多年以来,我不止一次看到有人把开源和社会主义放在一块儿谈论,或许程序员们擅自产生的对开源的信仰就源于此。其实,编程随想早在 2019 年就尝试区分开源自由软件的理念与共产主义,可惜没有给出令人信服的论证。受主题和篇幅所限就不加以论证了,倘若未来有了契机就简单讨论一下。