⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 卫sir说 「卫sir」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注**微信公众号:【芋道源码】**有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

为了节省您的时间,简单说一下结论:不违背。

而且,我们很可能误解了F5的原意。

报道称[1],2022年3月15日,美国网络公司F5的CEO(FRANÇOIS LOCOH-DONOU)在F5官网博客上发表《Standing Firm in Support of the People of Ukraine》[2]一文,宣布F5停止在俄罗斯的所有销售活动,与此同时,移除俄罗斯对F5网络的访问权限,并停止来自俄罗斯的对Nginx开源项目的贡献。

F5 CEO的文章(首页部分截图)

Nginx最早是俄罗斯人Igor于2004年10月4日正式对外开源发布的。2011 年,Igor与联合创始人Maxim Konovalov和Andrew Alexeev成立了NGINX公司,围绕NGINX提供商业化服务。2019年,F5宣布以6.7亿美元收购了NGINX公司。

F5这么做其实并不稀奇。因为美国公司站队的比比皆是。2022年3月2日,GitHub官方发文称,会遵守美国政府的相关规定,限制俄罗斯通过GitHub获得军事技术能力。Node.js官网在其首页加入了声援乌克兰的标语;知名前端框架React也在官网中加入了声援乌克兰的横幅;俄罗斯「国民操作系统」Sailfish OS的制造商Jolla公司正试图切断与俄罗斯的联系[3]。

1 F5到底说了什么?

为了不冤枉F5,我专门去看了那篇文章。

那篇博文中,和这个决定最直接相关的部分是这样写的:

We have suspended all sales activity in Russia and are routing customer support cases through other locations. We have removed F5 network access and halted contributions to NGINX open-source projects in Russia; this work will continue in other global locations. No code, either commercial or open source, is located in Russia. We remain dedicated to the development of NGINX and growing its community, as well as protecting the wellbeing of our people in Russia.

我翻译如下:

我们已暂停在俄罗斯的所有销售活动,并将客户支持CASE转至其他地点(注1)。我们已关闭了来自俄罗斯对F5网络的访问权限(注2)和对NGINX开源软件项目的贡献(注3);但全球其他地点并不受影响。我们产品的商业代码和开源代码,都将不在俄罗斯本地(研发中心)继续开发。我们仍然致力于NGINX的发展和社区的发展,致力于保护我们在俄罗斯员工的福祉。

笔者注:

  • 注1:F5有研发中心在俄罗斯,全球用户的CASE原本可能会开到俄罗斯(根据时区等因素)。现在,那些可能分配给俄罗斯研发中心的CASE将会分派给其他地点。
  • 注2:停止F5网络访问权限,指的是F5俄罗斯研发中心不再能访问总部的内网。
  • 注3:从上下文看,更像是关闭了F5在俄罗斯的NGINX项目团队对项目的贡献。

反复翻译和请教相关知情人士后,我恍然大悟,原来,F5 CEO是说,他们在俄罗斯的销售、研发(包括Nginx)、售后支持等工作都不再继续开展,这个文章中多次出现的in Russia,指的是F5 in Russia,并非字面上的整个Russia。所以,F5 CEO想说的是,F5在俄罗斯的员工不再能访问其内网也不再能贡献Nginx。但让大家误解为:F5不再接受来自俄罗斯(整个国度的人民)的贡献。

所以说,不管中文还是英文,任何书写,都应该准确、清晰、无误,而不是写那些容易让人误解的、含含糊糊的话。

如果我没有分析错误的话,这次F5被吐槽,估计更多要归咎于其CEO的文字能力。

另:Nginx的代码库并不位于GitHub(在GitHub上只有一个定期更新的只读镜像库),其代码库位于:

http://hg.nginx.org/nginx/

对代码的贡献是通过开发邮件列表做渠道的,相关说明见:

https://nginx.org/en/docs/contributing_changes.html

没有在这些地方看到任何拒绝俄罗斯人民提交贡献的字样。

而且,如何判断一个邮件列表背后的ID是来自俄罗斯的?(真想贡献的话,俄罗斯人民翻墙贡献行不行?)

不过,如果这篇文章就到此结束,显得很没有意思,所以下面这些内容,是考虑这位CEO真的要拒绝俄罗斯人民的贡献。

也就是说,如果我的阅读理解是错误的话,我们该怎么讨论。

2 比较尴尬的是什么?

这里面,最让人感到尴尬的就是:Nginx最早是俄罗斯人Igor Sysoev开发出来的。

2019年,Igor因为NGINX被收购加入了F5;2022年1月18日,Igor宣布从F5和NGINX离职4。

据信,Igor现在归隐在俄罗斯自己家中,已经远离他当年设计开发的Nginx。

Igor创办NGINX公司以及被F5收购这事,让他的老东家Ramble公司记恨,并于2019年12月,让俄罗斯刑警抓了Igor,这事也挺狗血的。我还专门写过一篇文章分析这个:《上班时间写开源软件,结果被单位告被警察抓,这算什么?》。

那么,Igor现在有没有贡献的权利?一个开源项目被卖给一个大公司后,原作者离职,是否还对该项目有控制权?

知识产权在谁手里?原作者拥有什么权利?

我们后面分析。

3 这事是否违背了开源协议?

Nginx的许可证并不是常见的MIT协议,而是二条款BSD协议:

这个LICENSE可见于:

https://nginx.org/LICENSE

我看了一下,基本和MIT是等义的。

协议上面一部分是版权声明(“这软件是我写的”),下面一大段是免责声明(“出了事我不负责”)。

关键是中间的部分:

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

人话翻译一下:

不管以源码形式还是二进制形式,不管你是否做了修改,只要你发布我的软件,就必须要遵守以下条件:

  1. 以源码形式再次发布时,必须保留上面的版权声明、本条件声明、以及下面的免责声明。
  2. 以二进制形式再次发布时,必须以文档或者其他形式,展示上面的版权声明、本条件声明、以及下面的免责声明。

从这个描述可以看出,这是一个非常宽松的开源协议,符合开源软件促进会OSI对开源许可证的定义。

但如何对待“贡献”这事,许可证没说。

事实上,开源许可证一般都不说这个的,都是说复制、使用、修改、再发布这些权利;我没见过哪个许可证有条款专门说贡献的(如果你看到可以告诉我)。

贡献这事,对于贡献者而言,纯属自愿,你想贡献就贡献,不想贡献就不贡献。(就像捐款一样)

对作者而言,接不接受贡献也纯属作者的自由,想接受谁的贡献,就接受谁的贡献,想不接受谁的,就可以拒绝谁的。(就像接受捐款一样)

所以,人们一般不太在意,也不太强求关于“贡献”的权利。

总之,F5的这个行为,并没有违背Nginx的许可证,俄罗斯人民仍然可以像以前一样复制、使用、修改和再发布Nginx。

那么,在开源许可证中增加一条:“不接受来自俄罗斯的贡献”,是否可以?是否违背开源的定义?

4 是否违背开源定义?

答案是:违背。如果这样写了,就不是开源许可证了。

众所周知,开源并不简单地等同于“源码可得”。开源(Open Source)的定义来自OSI,一个软件是不是开源的,关键看它用的许可证是不是符合OSI列的那十条准则,也即OSD十条。

OSD那十条在这里:

https://opensource.org/docs/definition.php

2022年3月17日,OSI在官网文章中引用美国法院对某案的判决,并呼吁:“当你不是开源时,就不要再说自己是开源了!”[5],涉案的被告软件叫ONgDB,在广告中自称是开源软件,被人告上法庭,说他属于虚假广告。法院认可了这个判断,并禁止ONgDB在广告中使用「开源」一词。

如果你对开源定义有兴趣,可以看我写的文章:《开源定义是什么?》

OSD第5条有说:“不得歧视任何个人或团体”。

原文是:The license must not discriminate against any person or group of persons.

所以不能写“不接受来自俄罗斯的贡献”,这么一写,就违背OSD5了。

这就很有意思了,这句话能说,不能写,说了不影响你还是一个开源许可证,也不违反你的开源许可证,但不能写,一写出来,你就不是开源许可证了。

但说出来和写出来又有多大区别呢?

说出来,不也是歧视吗?

我觉得区别是:

  1. 开源许可证是赋予权利的,如果不写“贡献”权利,那么所赋予的权利是没有歧视的。而“贡献”权利是作者自己掌握提供的,他有权在自己掌控的权利中更多给予或更少给予。
  2. 如果把“贡献”权利写出来,那么许可证所赋予的权利就是有歧视的。

可见,书面的和非书面的,差别很大,契约精神可能主要依附在书面文本上。

5 那到底这做法合适吗?

简单地说:

F5的这个声明,没有改变Nginx许可证,也没有改变Nginx许可证对用户的任何授权,Nginx仍然是一个不折不扣的开源软件,而且不影响任何人行使他们从许可证中获得的任何权利。

但这违背了最大程度的开放精神,就是说,看上去有点小气,不是那么开放。

F5完全可以大气一点,俄罗斯人民提交的代码贡献,可以认真检查一下,如果确实很好,为什么不接受呢?

现在回到文章开头提出的问题:

Nginx的创始人Igor现在位于俄罗斯,如果Igor现在想修改源码,他有这个权利吗?

从许可证上看,Nginx的版权行有两行,一行写的是Igor,一行写的是Nginx公司(被F5收购)。

  • Copyright (C) 2002-2021 Igor Sysoev
  • Copyright (C) 2011-2022 Nginx, Inc.

从年份上看,因为离职,Igor确实从2022年不再参与Nginx开发了,那么他还能控制这个他原创的项目吗?

F5以6.7亿美元收购了NGINX,那么,Igor是否因为收购,放弃了关于Nginx的所有权利?

这要看F5和Igor之间的协议是怎么写的,哪些权利归F5,哪些权利归Igor。

如果仅仅保留“Copyright (C) 2002-2021 Igor Sysoev”这么一个“版权行”权利,那他是真的不能提交贡献了。

除非F5解除这个限制后,Igor作为一名普通开发者身份提交贡献。

6 如何心平气和地看待此事?

有些人为F5的所作所为感到气愤,我觉得大可不必。

在我看来,软件在是否免费和是否提供源码这事上,从用户角度看,有一个境界的区分。

  • 常见的情况是:软件收费,不提供源码。(常见的商业软件)
  • 稍好的情况是:软件收费,源码收费提供。(部分商业软件)
  • 然后是:软件收费,源码免费提供。(比较少见)
  • 然后是:软件免费,不提供源码。(免费软件)
  • 比较好的情况是:软件免费,源码免费提供,不接受贡献。(部分开源软件)
  • 很好的情况:软件免费,源码免费提供,接受贡献。(多数开源软件)

当然,这个好坏,仅仅是我个人的当下喜好而已,并不全面,也并不严格。

那么,Nginx仅仅是从很好变成了比较好,你的心态就要崩了吗?

微软的Windows这么多年也没有接受过你的贡献,也不让你看源码,还收你钱,你是不是觉得微软还挺好?

这实在让我想起“升米恩,斗米仇”。

再说,我们还很可能误解了F5。

文章目录
  1. 1. 1 F5到底说了什么?
  2. 2. 2 比较尴尬的是什么?
  3. 3. 3 这事是否违背了开源协议?
  4. 4. 4 是否违背开源定义?
  5. 5. 5 那到底这做法合适吗?
  6. 6. 6 如何心平气和地看待此事?