本文来自微信公众号"InfoQ"(ID: infoqchina),作者:程墨
React 到底惹了什么麻烦?
一切都要从开源软件的许可协议 (license) 说起。
搞开源软件,并不是说把源代码公布出去就完事,还有很多问题要考虑。比如,源代码有 bug 害得用户损失了一个亿算谁的责任,有人想继续修改源代码重新发布怎么办,涉及到软件专利怎么办……为了解决这些问题,开源软件往往要随源代码包含一个许可协议,当然,要是每个开源软件开发者都起草自己的许可协议,那他们估计也没多少时间写代码了,所以,往往是采用现成的开源软件许可协议。
现成的开源软件许可协议很多,和这起事件相关的三个,也是开源软件中很常用的三个,就是 BSD、MIT 和 Apache v2。
Facebook 曾经默认对自己开源出来软件采用 BSD 许可协议,但是,在 2015 年的时候,Facebook 给自己开源软件增加了一个专利附属条款,React 也就随之改为包含这个专利附属条款的 BSD 许可协议,这也就是这起事件的源头。
Facebook 为什么要增加这个条款呢?因为 BSD 和 MIT 这两种许可协议都是没有专利相关内容的,换句话说,虽然源代码是授权出去了,但是代码中如果涉及到一些专利问题,就扯不清了,软件专利这事情纠缠起来是非常狗血的,于是 Facebook 用这个专利附属条款来做自我防御。
在这里可以看见专利附属条款的内容,满文都是搞法律人才写得出的词汇,冗长而且晦涩,但可以简单一点解释,以 React 为例,就是这样:Facebook 拥有 React 中的一些专利,但是 Facebook 不会利用这些专利来找用户你的麻烦,不过,如果用户你有一天利用“任何专利问题”来找 Facebook 的麻烦,那么 Facebook 有权立刻停止授权你使用 React。
这里我们首先认识到,用什么许可协议,完全是开源软件贡献者的决定,其他人如果想强制要求 Facebook 用什么许可协议不用什么许可协议,就和要求微软开源 Windows 和 Office 源代码一样可笑
Facebook 在 2015 年做了这个许可协议更改之后,招来一些非议,但是也没有引起大风波,直到几年后,在今年 7 月份,开源组织 Apache 软件基金会将 Facebook 的这种带专利附属条款的 BSD 列为 Category X,这个 Category X 就是 Apache 基金会的黑名单,如果哪个开源软件是基于这个黑名单上的许可协议,那就不能在 Apache 基金会的开源项目中使用,这是为了防止软件依赖树被“污染”。要知道,BSD 协议本身不在 Category X 黑名单上,所以 Apache 这个决定就是针对 Facebook 的专利附属条款,害怕这个附属条款会给 Apache 带来麻烦。
这个决定导致基于 React 的很多 Apache 项目不得不重写。
Apache 这么一搞,一下子把 Facebook 推到风口浪尖,大批大批开发者请愿希望 Facebook 更改 React 的许可协议,毕竟,谁也不希望有朝一日自己的软件被停止使用。
面对这些请愿,Facebook 一开始是拒绝的,依然认为包含专利条款的 BSD 许可协议是最好的选择。
然后,在 9 月份,WordPress 的创始人 Matt 也表示 WordPress 也会离开 React,值得一提的是,Matt 在声明中盛赞 React 是一个了不起的软件,并且说这样做是为了规避风险。
WordPress 的决定应该是推动 Facebook 做出改变的最主要原因,要知道,这世界上每四个网站就有一个是用 WordPress 构建的,WordPress 不用 React 影响太大,所以,Facebook 终于发表声明,表示会在新版 v16 中放弃原有的带专利附属条款的 BSD 许可协议,转而采用 MIT 许可协议。
事实上,既然做了这个决定,就不用等 v16 了,React 在 v16 发布之前发布了 v15.6.2,作为 v15 的收官之作,已经改为 MIT 许可协议。
2. 事情到此为止了,然而,真的到此为止了吗?
我们重新回顾一下这个事件,期间有不少人浑水摸鱼谩骂 Facebook,各种曲解那个专利附属条款,各种夸大 Facebook 会利用这个条款整治其他公司的可能性,所以,这里需要重新审视一下这个条款。
首先要知道,这个条款是一个防御性的法律措施,为的是防止有人利用专利问题起诉 Facebook,条款中是 Facebook 先授权用户使用专利,然后再防止用户因为专利问题反诉 Facebook。
事实上,自从实施这个条款以来,Facebook 还从来没有利用这个条款取消某个组织或者个人对自己的开源软件的使用许可,React 也得到广泛的应用,Microsoft、AirBnB 等大型公司都在大量使用 React。当然,Microsoft 是 Facebook 的股东,AirBnB 也没有和 Facebook 有商业竞争,可是,就连 Twitter 也在使用 React,Twitter 可是和 Facebook 有最直接的竞争关系,他们都不怕,还有什么好怕的呢?
所以说,觉得 Facebook 会利用这个条款来打击竞争对手,那真是想多了。
当然,担心惹上麻烦而弃用 React 的 Apache 和 WordPress,也完全应该理解他们的做法,因为他们的软件不只是自己用,而是要发布出去,被千百万其他用户使用,这样牵扯到的就不只是 Facebook 和 Apache、WordPress 之间的关系,还要应对这世界各色各样用户的法律需求。法律上的事情,小心无大错。
React 已经改为 MIT 许可协议了,问题就彻底解决了吗?
很可惜,也许解决了一个问题,但是诞生了新的问题。
前面已经说过,BSD 和 MIT 许可协议都不包含专利保护内容,但是 Apache v2 许可协议有相关内容, Apache v2 对于专利问题的处理可以这么解释:如果你起诉这个开源软件中用到的专利,那么从你起诉那一刻起,对你的许可协议就取消了。
乍看一眼,似乎和 Facebook 的专利附属条款一样的嘛,其实,关键区别就是专利的范围,Apache v2 保护专利的范围是开源软件中用到的专利,而 Facebook 专利附属条款针对的是“任何专利”。
理论上说,如果某个农业公司告 Facebook 侵犯了他们水稻基因培育的专利,根据专利附属条款条款 Facebook 可以要求这个农业公司不许用 React,这个农业公司的官方网站如果用 React 写的话就麻烦了,这个虚构的故事听起来就有点扯,但也看出这个专利条款的杀伤力很大。
这样一看,Apache v2 似乎是一个关于专利问题更好的选择,但是 Facebook 选择了 MIT,一个同样没有专利保护内容的许可协议。
Facebook 为什么选择 MIT 呢?这个问题外人无法回答,只能猜测,最大的可能就是,MIT 是 github 上最受欢迎的许可协议,所以干脆从善如流,就选最热的许可协议好了,省去很多口水。
那 Facebook 为什么不选择 Apache v2 呢?很可能 Apache v2 并不满足 Facebook 的要求。
好了,现在 React 换成 MIT 许可协议了,虽然看不见那个烦人的“专利附属条款”,但是专利的问题依然存在,如果将来某个组织和 Facebook 产生了专利冲突,怎么办呢?那时候,就看谁的专利池里货更多,就看谁能请到更厉害的律师,就看谁更有钱打旷日持久的官司。
这么一看,似乎还真不如最初带一个专利附属条款的 BSD。
这是开源世界对 Facebook 的胜利吗?首先,这不是一场战争,这只不过是开源软件世界中的一次讨论,所以用不上“胜利”这个词汇。
在这场大戏中,除了 Facebook、Apache 和 WordPress 这几个主角,还有众多的开发者参与其中作为群众演员。
大家有诉求,发出自己的声音,这没有问题,很多开发者都有礼有节地向 Facebook 请愿,但是,也可以听到很多极其刺耳的声音,对 Facebook 各种侮辱批斗。
如果觉得观念不合就要批斗,这和专制有什么区别?
不管怎样,Facebook 选择用什么样的许可协议,都是他自己的事情,你可以请求或者建议他做出改变,但是靠谩骂和中伤就是没素质,难道真的以为 Facebook 是被骂才做出改变的吗?好好说话不行吗?整个事件中最大的推动力量是 WordPress 而不是口出秽言的喷子。
React 是一个非常优秀的软件,Facebook 作为这个软件的创造者应该受到尊敬,当我们在享用别人的开源成果时,应该想的是自己能够做什么来帮助别人,而不是见风就是雨的嘲笑中伤挖井的人。
不管怎样,React 将会继续演进,作为目前最受欢迎的 UI 库之一,让我们共同为 React 社区的繁荣努力奋斗吧。