React 的许可协议到底发生了什么问题?

3,764 阅读9分钟

暂时性的结果

先说截止目前的结论: Explaining React's license

换言之,不会对 React 的许可协议做任何修改。

那这意味着 Apache 基金会下的开源项目都需要在 8 月 31 号前移除 React 相关代码。

不清楚事件来龙去脉的同学可能问心生疑问了,

这意味着React 的许可协议有问题咯?会不会影响我继续使用 React 呢?

那 React 的许可协议到底发生了什么问题呢?我希望能通过回溯下事件经过,来帮助大家理清下整件事件的脉络。

起因

Apache 基金会在 7 月 16 日把 Facebook BSD+Patents 加入了禁止名单中。

那这个 Facebook BSD+Patents 是什么呢?这个又要从许可协议讲起。

许可协议

或者叫软件许可证, 英文 Software License, 根据维基百科的解释如下:

软件许可证是一种具有法律性质的合同或指导,目的在规范受著作权保护的软件的使用或散布行为。通常的授权方式会允许用户来使用单一或多份该软件的复制,因为若无授权而径予使用该软件,将违反著作权法给予该软件开发者的专属保护。效用上来说,软件授权是软件开发者与其用户之间的一份合约,用来保证在匹配授权范围的情况下,用户将不会受到控告。

转自 软件许可证

通常,我们在项目中引入的开源框架和开源库也是有一个许可协议的,统称为开源代码许可协议,Open-source License。

开源代码许可协议有很多,他们对源码的使用,发布规定不尽相同。

比如 Linux 使用的 GPL,就规定了使用 GPL 源码的人必须也得开源。

各大开源代码许可协议的差异可查阅 Comparison of free and open-source software licenses

了解了这些基本常识后,我们就可以来看看 Facebook BSD+Patents 了

Facebook BSD+Patents

Facebook BSD+Patents 则是 The 3-Clause BSD License 协议的一个变种。

BSD 的授权本身是简单,开放,没有限制的,但 Facebook 在此基础增加了一个 专利协议

简单来说就是基于 Facebook BSD+Patents 授权的软件使用者,以及基于该许可协议开发衍生代码的开发者,一旦被许可人对 Facebook 及其子公司甚至关联公司提出直接的或间接专利诉讼,无论该诉讼是与所涉及项目有关还是无关,亦或是硬件专利诉讼,甚至是 Facebook 主动提出的专利诉讼而被告者进行的专利反诉,该协议授予用户的专利权利即刻自动终止。

之后 Facebook 也有针对普通开发人员的一个人话版 FAQ 说明。

We use a standard BSD license paired with an additional patent grant for most of our open source projects. For brevity, we call this combination the Facebook BSD+Patents license. We've compiled some answers to common questions about the additional patent grant:

Does the additional patent grant in the Facebook BSD+Patents license terminate if I create a competing product?

No.

Does the additional patent grant in the Facebook BSD+Patents license terminate if I sue Facebook for something other than patent infringement?

No.

Does the additional patent grant in the Facebook BSD+Patents license terminate if Facebook sues me for patent infringement first, and then I respond with a patent counterclaim against Facebook?

No, unless your patent counterclaim is related to Facebook's software licensed under the Facebook BSD+Patents license.

Does termination of the additional patent grant in the Facebook BSD+Patents license cause the copyright license to also terminate?

No.

可以看出,开发竞争产品是没有问题的,这个附加的专利协议可以说是一个防御型协议,这里算一个伏笔,后面会提。

但这样的协议依然是一个单边优惠协议,授予人和被授予人的权利不平衡,Apache 基金会认为该许可协议与 Apache Software License 是不相容的。

RocksDB

很凑巧的是,Facebook 旗下的另外一款开源产品 RocksDB,在 7 月 16 号从 Facebook BSD+Patents 更换为了 Apache 2.0 和 GPLv2 双许可。

这就让 React 社区仿佛看到了希望的曙光,彻底沸腾了。

沸腾

于是 React 社区就开始冒出各种请愿贴,场面一度很混乱,还有各种观光旅游团在下面留言。

然后 FB 的人开始删帖引流,把人都集中到了这个 issue, Consider re-licensing to AL v2.0, as RocksDB has just done

由于事件一开始我就 watch 了 这个 issue,回复的内容差不多都看过。

这个场景就像是一群程序员故意穿得破破烂烂去拦 Facebook 官老爷的轿子,扑通一下往地上一跪,「大人,小民有天大的冤情啊」。然后一部分人欢呼 FB 有新动态了,一部分人开始咒骂万恶的开源流氓,一部分人开始威胁说我们不用了,我们用 Vue 和 Angular 去了,一部分人呼吁保持冷静,静观其变,我们要相信组织。

场面是相当的不堪,相当的有辱斯文啊。

由于情绪化的内容过多,所以每隔一段时间 FB 的人就会上删一些没啥用的回复,然后呼吁大家保持冷静,FB 自己也在讨论。

于是热度又慢慢冷了下去

再沸腾

在大家逐步保持冷静的过程中,大家突然发现,

「咦!Jest 也有这个 Patents!」

「咦!Relay 也有这个 Patents!」

「咦!React Native 也有这个 Patents!」

「咦!Yoga 也有这个 Patents!」

「咦!AsyncDisplayKit 也有这个 Patents!」

大家到从这个事件开始,才第一次认真的看项目里面每一个文件的意义,而不只是使用。

在意识到被 FB 农村包围城市以后,于是第二波高潮又来了,大家又开始在各大 FB 子项目里面请愿了。

这些请愿又被全部转向了 Consider re-licensing to AL v2.0, as RocksDB has just done

于是又一轮水帖删帖开始了,慢慢又回归了沉寂。

结论

还没到网友们划定的截止日期 8 月 31 号,FB 就给出了自己的结论 Explaining React's license

FB 声明自己这样做的原因,这是一种自我保护,不想在专利诉讼方面浪费宝贵的资源和精力,希望能将精力更多的放在开源事业本身上,同事声明 Facebook BSD+Patents 与其他开源协议是相容的,并尊重 Apache 基金会的决定和 React 社区中不同的声音。

一些个人思考(私货)

协议你看了吗?

从本次事件来看,其实 Facebook BSD+Patents 的许可协议长期以来都是存在于 FB 各大开源项目之中的,但大家习惯于作伸手党,也习惯于去忽略许可协议了。

如果你只是作个人项目,纯玩的性质,那么确实你无需在意太多,而如果你是商业性质项目,或是公司自营产品,或是服务于乙方,那么你需要明确以下几点:

1. 你对开源代码的使用是否符合该开源代码的许可协议?

2. 你对开源代码的使用是否符合该开源代码所依赖的第三方库的许可协议?

那有同学可能要说了,Airbnb,微软 Skype 团队用 React、React Native 不是用的好好的吗,也没见有什么问题呢?

是的,这个问题取决于你司的法务敏感程度。

从 FB 的声明来看,确实它的初衷是一个防御性质的,但从法务来讲,情况可能就复杂一些了。

我们可以来看一个案例。

Preact 是 React 的另外一种开源实现。从 Preact 的 Companies using Preact 「请切换语言到英文」,我们可以看到一些熟悉的身影。

所以用,还是不用这个可能需要更高层的决定了,而作为程序员有在技术选型时做告知的必要。

替代品

社区中涌现了不少替代品,如上文所说的 Preact ,基本能保证你从 React的无痛迁移。

但有些东西你是无法找到替代品的。

比如 React Native,即便你用 Preact 实现替换了,像内部的 Native Render,你是无法替换的,而 React Native 的样式布局解析是用的 Yoga

Yoga 本身也是使用的 Facebook BSD+Patents,连 Weex 的样式布局解析在当前版本也是使用的 Yoga。

这些第三方库在做技术选型时也是需要做调查的。

担忧

什么样的开源是可持续的?

最早的开源很像技术世界的共产主义,大家一起维持着世界大同的梦想,但事实证明这样的思想在商业世界下变得那么的不堪一击。

只有付出的慈善是难以为继的。

FB 选择添加了附属专利协议,无论是出于什么样的目的,实际上都是在巩固扩大自己的基本盘和话语权。

而这样的开源被 FB 实践证明是可行的。

未来,可能更多的大公司会加入类似这样的附属专利协议。

所以在社区中也有人指责 FB 在开一个坏头,一个让开源变得不纯粹的坏头。

他们担心在未来,这样的坏例子会让大公司们加入 FB 的行列,使大家的项目中慢慢的充斥中各种限制协议。

该怎么办

如果公司许可,能用那就用,不能就不用。

但好的东西其实我们还是可以研究,吸取的。

JDK 不也有 OpenJDK 和 OracleJDK 吗?

所以其实这样的事情一直都有,也一直都存在。

而 FB 敢不敢使用这个潜在武器主动进行专利诉讼攻击呢?

我的看法是不敢的。

FB 的基本盘开起来扩大了,一旦进行专利诉讼攻击,社区瞬间就会散光。

社区成员现在留下的,更多的是基于对 FB 价值观的信任,而开源,说白了,需要的还是无私奉献,坚守在一起的人。

所以社区中也有人认为,这个跟犹太人已经统治世界的阴谋论一样可笑。

影响

但无论如何,从 8 月 31 号开始,Apache 基金会下的项目凡是含有 Facebook BSD+Patents 的源码,都必须移除,包括 React。

除非 Apache 基金会转变看法。

前方高能,离题的私货

知乎专栏 React && TypeScript 700 粉了,也增加了一位编辑。

希望大家能够继续关注专栏,因为接下来将会推出

React 源码解析React Native 性能优化React 在 TypeScript 中实践 等三个系列。

而且,没错,而且专栏将会保证每周至少两更。