Facebook在代码里下毒,百度身受重伤。。。
白首相知犹按剑
前两天看到有朋友分享说,WordPress停用了react。
今天,在逛知乎时看到了另一个问题
别细看这图,我赌你看不懂。。。
![]()
嗯。。。用人话来说就是百度内部要求他们的程序猿不要再使用一个叫 React
的开源产品的代码了。
而且,现有的已经使用过这些代码的产品要改写!(其实几乎有很多要重写了)

有朋友会问 React 是毛啊?
这是 Facebook 搞的一套贼好用的前端开发工具,它能提供一些很好的效果,别的开发者可以免费拿来在它的基础上去做自己的产品,为了更多人更好的使用它,Facebook 把这东西开源了。(免费和开源还不太一样,下面说)
基于 React 的前端效果
![]()
这次出问题主要是因为 React / React Native 工具的开源协议 Facebook BSD + PATENTS 。
整天听没事儿就扯什么开源,Github 啊什么的,不太懂编程的朋友们可能觉得我在装哔。
那么,今天就好好说说开源的事儿。
![]()
开源软件和免费软件不是一个意思,开源软件的源代码是公开的(感觉像是句废话?
),但免费软件不一定。
举个栗子,有两个好人 A 和 B 都愿意免费给你提供食物,但是好人 B 告诉你他的制作菜谱,而 A 只让你吃。
![]()
这区别就大了。。。
首先,“ 免费的程度 ” 不一样。(这个比喻很奇怪但确实可以这么理解)
如果 A 哪天突然要找你收钱了,那你只好要么不吃,要么就换个途径获取食物,因为你只从 A 这里获得做好的食物,你自己还是没办法做。
但从 B 这里你获取的是菜谱,你可以自己做,所以对于 B 来说收钱一般是没什么意义的事情。(还是存在可能有的人觉得 B 做的好捐款的)
![]()
其次,可以修改。
如果你觉得 A 的食物不好吃,你要么不吃,要么给 A 提个意见,要么含着泪咽下去。。。
如果你觉得 B 的食物不好吃,你可以适当的根据食谱来修改一下,做出自己喜欢的食物,成本也不高,就是买买菜而已。
![]()
在计算机刚出现的时候,用计算机的人都是专业研发人员,大家写出来的程序都会分享源代码,方便给大家解决问题,本着类似于学术钻研的态度在搞软件。
后来,软件规模和复杂度越来越大,计算机越来越平民化和普及,有的商业软件公司为了保护技术和维持盈利,开始对软件闭源,这样用户就无法知道原理了。
微软当时的老大比尔 · 盖兹在私有软件的推广上起到了重要的作用,认为软件具有知识产权,让开发者仅仅靠热情去无偿开发和维护软件是不太合理的。
微软的 BASIC 编程软件![]()
不过软件业并没有因此渐渐完全走向闭源,而是产生了分化,形成了开源和闭源观点对立的情况。
这就不得不提一个开源社区举足轻重的人物(他本人也真的很重,是个大胖子),他叫 Richard Stallman。(这个人差评君讲过,传送门)
Richard Stallman![]()
当时许多开发者们看着 UNIX 操作系统从开源慢慢走向商业化和闭源感到痛心疾首,于是这位仁兄发表了 GNU (GNU is not Unix)宣言,号召大家一起做一个开源的操作系统,里面运行的所有的软件也都是开源的。
毕竟枪杆里面出政权,你收费我就起义!
![]()
接着,他用法律术语写了一份通用公共许可证 (General Public License ,简称 GPL ),放今天讲就是一份开源协议。
![]()
遵循 GPL 的项目有这么几条规则:
(1) 软件谁写的著作权就是谁的
(2)谁都可以用这个开源项目做任何事情,而且与原作者无关
(3)谁要是用了这个软件的源代码,那么他的作品也必须遵守 GPL,也得开源
(4)在之前那个吃饭的例子里讲,上面的话就是你改良了某人的菜谱,那么你也得公开你的菜谱。
(5)为什么要干这种有钱没得赚吃力不讨好的事情?
因为一旦遵循了这样的协议,开源项目可以集中大家的智慧去得到改良,热爱自由的开发者们可以形成一个社区一样的环境来交流技术。
比如说著名的版本控制服务网站 Github 上就有大量的开源项目
![]()
现在除了 GLP,还衍生出了其他的开源协议。![]()
文章开头提到的 Facebook BSD + PATENTS 就是开源协议的一种~
但它到底有什么问题,以至于让百度宁可费这么大力气重做他们的东西都要弃用这个协议的产品呢?
因为根据协议内容,只要你在用 Facebook 家的 React 在做项目,那么 Facebook 可以反过来用你的项目专利,而且和 React 无关的专利 Facebook 也可以用。
同时你还不能告他侵权,否则你就会失去 React 的授权,Facebook 可以先告你!
其实 React 挺好用的
![]()
可能朋友们对于百度的印象不太好,但这回是 Facebook 做的不太地道,因为根据这个开源协议,百度的人工智能,自动驾驶等等专利都可能受到威胁,这一点 Facebook 的这个协议确实有点太流氓了。
而且不光百度,Apache 也因为开源协议的原因禁用了 React。
Apache 软件基金会支持了很多不错的非营利性开源项目![]()
其实在科技圈,因为这个开源协议闹出来的幺蛾子事情还真不少。。。
还记得这个少年创业家么?![]()
他的产品被原作者指抄袭
这个 00 后搞了个叫猫桌面的东西![]()
这个东西抄袭了另一个作者的开源代码,叫 “ 墨镜猫 ”![]()
连名字都还叫 “ 猫 ”,你这抄袭也忒不走心了吧。。。
差评君去开源库里看了看,发现原作者发现被抄袭了之后,更改了开源协议,改成了差评君之前说的 GPL![]()
有趣的是,他还在改动日志里骂了几句娘。。。![]()
这就是典型的不遵守开源协议的案例。
再比如说区块链热潮中的一个叫量子链的项目,图为知乎匿名网友扒出来的开源协议问题。(话题链接:https://www.zhihu.com/question/57090778)![]()
一直以来开源项目的公开透明让不少别有用心的人钻了孔子,这实在是违背了开源社区的初衷。
但有些公司还在协议里打着保护知识产权的幌子耍流氓。。。
比如 Facebook 这样本身有着技术却去污染开源社区的行为受到了许多争议。
还有人把 Facebook 的点赞倒过来 diss 了一下
![]()
开源本身的目的是让软件项目和科研项目一样,互相分享知识,让前人给后人发明的工具,让后人更好地改变世界。
而做这样的事情,是需要很大的热情的,所以极客君觉得私有软件也没有错,程序员也是要吃饭的。
但是,拿开源去搞一些不正当的行为,用大家的美好梦想去填充自私的欲望,这样的行为真的不合适。
“ 小公司不用担心,Facebook 应该不在乎~ ”
目前,百度内部在自研 React Native 的替代方案。
Facebook在代码里下毒,百度身受重伤。。。的更多相关文章
- Linux下ffmpeg添加Facebook/transform代码块实现将全景视频的球模型转换成立方体模型
Facebook事实上已开始在平台中支持360度全景视频的流播,但公司对此并不满足.其工程师更是基于锥体几何学设计出了一套全新的视频编码,号称最高能将全景视频的文件大小减少80%.(VR最新突破:全景 ...
- Arcgis for Javascript API下类似于百度搜索A、B、C、D marker的实现方式
原文:Arcgis for Javascript API下类似于百度搜索A.B.C.D marker的实现方式 多说无益,首先贴两张图让大家看看具体的效果: 图1.百度地图搜索结果 图2.Arcgis ...
- 一统江湖的大前端(5)editorconfig + eslint——你的代码里藏着你的优雅
<一统江湖的大前端>系列是自己的前端学习笔记,旨在介绍javascript在非网页开发领域的应用案例和发现各类好玩的js库,不定期更新.如果你对前端的理解还是写写页面绑绑事件,那你真的是有 ...
- C语言代码里不能用goto?
当我学C语言时,老师整天告诉我:"不要使用goto, 这是一个坏习惯, 这种写法很烂,而且很危险!"等等. 但是为什么那么多内核程序员那么喜欢用goto呢? 在这段linux内核 ...
- ros下基于百度语音的,语音识别和语音合成
代码地址如下:http://www.demodashi.com/demo/13153.html 概述: 本demo是ros下基于百度语音的,语音识别和语音合成,能够实现文字转语音,语音转文字的功能. ...
- linux环境下使用百度云网盘
linux下经常需要备份一些文件到云端,现在能用的也就只有度娘的百度云网盘了,在github上发现一个挺好的项目,bypy,用来在linux下使用百度云. 项目地址:https://github.co ...
- iOS 疑难杂症 — — 在 Storyboard 里 Add Size Class Customization 后再从代码里无法修改的问题
前言 公司的产品同时适配 iPhone 和 iPad ,并坚持用 Storyboard 来做适配,今天又踩一个坑(以前遇到过)还以为是 XCode 的鬼毛病. 声明 欢迎转载,但请保留文章原始出处: ...
- 实现textbox文本页面改变触发textchanged事件,代码里修改不触发
今天弄控件遇到一个问题,就是TextChanged,如果在代码里或在页面修改修改text值,就会触发事情,但如果在textchanged里修改text,它会不会触发呢,不会,我调试跟踪,并没发现它会重 ...
- KindEditor设置为过滤模式,但在代码模式下提交表单时不过虑HTML标签的解决方法
KindEditor设置filterMode为true,但在代码模式下提交表单的话,发现并没有过虑掉自己不想保留的HTML标签. 这时只需同步内容前加上红色部分内容即可: onClick=" ...
随机推荐
- poj1470 LCA倍增法
倍增法模板题 #include<iostream> #include<cstring> #include<cstdio> #include<queue> ...
- SPLAY,LCT学习笔记(四)
前三篇好像变成了SPLAY专题... 这一篇正式开始LCT! 其实LCT就是基于SPLAY的伸展操作维护树(森林)连通性的一个数据结构 核心操作有很多,我们以一道题为例: 例:bzoj 2049 洞穴 ...
- (String中)正则表达式使用如下
package zhengze;/* * 正则表达式 */public class StringTestZhengZe { public static void main(String[] args) ...
- 2017-2018-2 20155309 南皓芯 Exp3 免杀原理与实践
报告内容 2.1.基础问题回答 (1)杀软是如何检测出恶意代码的 ? 1:基于特征码 一段特征码就是一段或多段数据.(如果一个可执行文件(或其他运行的库.脚本等)包含这样的数据则被认为是恶意代码) 杀 ...
- 老方块Oracle--数值类型性能考虑
我们在设计数据库表,或者在使用SQL,写程序时都会经常用到数值类型.比如常见的number.int.float. float是浮点类型,也属于数值类型,我们最常用的是number类型. 他的格式是nu ...
- JQuery中的工具类(五)
一:1.serialize()序列表表格内容为字符串.返回值jQuery示例序列表表格内容为字符串,用于 Ajax 请求. HTML 代码:<p id="results"&g ...
- 【AtCoder】CODE FESTIVAL 2017 qual C
A - Can you get AC? No #include <bits/stdc++.h> #define fi first #define se second #define pii ...
- Linux && 与 ||
一.&& && 表示前一条命令执行成功时,才执行后一条命令 ,如 echo '1‘ && echo '2' || 表示上一条命令执行失败后,才执行下一条 ...
- 【CSS3】响应式布局
准备工作1:设置Meta标签 首先我们在使用Media的时候需要先设置下面这段代码,来兼容移动设备的展示效果: 1 <meta name="viewport" content ...
- window.jQuery || document...
window是浏览器端的全部数据变量的引用.比如 window.window === window window.jQuery 就是浏览器中的全局变量里的jQuery那为什么不写 jQuery 而是写 ...