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 条款的约束下,也有逐步停用 React / React Native 技术栈的可能? 知乎是否会停止使用React? 阿里还会使用react吗? 腾讯还会使用react吗?

各位geek朋友们如何看待此事呢?^_^

时间: 2024-10-17 14:42:58

Facebook在代码里下毒,百度身受重伤。。。的相关文章

代码里语句的顺序狠重要。。。

有时候你千调万调,明明代码的执行逻辑没错啊,明明我得到了数据啊,为什么调试的时候eclipse告诉我空值嘛,有时候很有可能是你的代码的位置不对,或者你放入了一个错误的代码,影响了它后面代码的正常执行... 最后的结果是逗比可笑的,因为你语句放错了位置... 例如:1.我在加载评论内容的时候,首先获取edittext的内容,然后传给服务器,但是调试发现,服务器获取的是空值...  因为我getText().toString()的时候,这句话写在了另一个函数里面,及时你把得到的text声明为fina

Chrome下使用百度地图报错Cannot read property 'minZoom' of undefined

问题:工作中在Google chome下面的js console里面测试百度地图API var map = new BMap.Map("container"); map.centerAndZoom(new BMap.Point(116.404, 39.915), 11); TypeError: Cannot read property 'minZoom' of undefined message: "Cannot read property 'minZoom' of unde

C语言代码里不能用goto?

当我学C语言时,老师整天告诉我:"不要使用goto, 这是一个坏习惯, 这种写法很烂,而且很危险!"等等. 但是为什么那么多内核程序员那么喜欢用goto呢? 在这段linux内核 https://github.com/torvalds/linux/blob/master/kernel/sched/clock.c  代码里,我觉得可以用简单的一个while替换掉,如: while(condition) { } //或 do { }while(condition); 注:这段代码来自tor

【笨木头Unity】入门之旅009:Demo之四处找死(四)_在代码里操作物体

有没有发现越往后写,旁白出现的次数越少? 是的,最近公司出了点小问题,思绪就变得沉重了一些,思绪一沉重,我的精神分裂就很难发作. 不唠叨了,这次我们来试试在代码里操作物体吧,很简单很简单的. 笨木头花心贡献,啥?花心?不,是用心. 转载请注明,原文地址:http://www.benmutou.com/archives/2176 文章来源:笨木头与游戏开发 1.找遍全世界,只为了发现你--FindGameObjectWithTag 还记得很早之前我们介绍的Tag吗?我知道你们肯定不记得的. 先给我

Arcgis for Javascript API下类似于百度搜索A、B、C、D marker的实现方式

原文:Arcgis for Javascript API下类似于百度搜索A.B.C.D marker的实现方式 多说无益,首先贴两张图让大家看看具体的效果: 图1.百度地图搜索结果 图2.Arcgis for JavaScript实现的效果 看到了效果,是不是各位有点小鸡动,是不是也宠宠欲动,有木有?但是具体是怎么实现的呢?下面我来详细的给各位说说我的实现思路吧. 第一,数据. 其实搜索的对象从类型上来说,应该是点.线.面都支持的,但是在实际的操作过程中,不论是百度还是我自己做的时候,都会将所有

sos 怎么在代码里设置将一个imagebutton放在屏幕的中间

============问题描述============ 怎么在代码里设置将一个imagebutton放在屏幕的中间 ============解决方案1============ LinearLayout.LayoutParams btParams =  new LinearLayout.LayoutParams (width, height); btParams.gravity = Gravity.CENTER; ============解决方案2============ framelayout

iOS 疑难杂症(什么鬼系列)— — 在 Storyboard 里 Add Size Class Customization 后再从代码里无法修改的问题

前言 公司的产品同时适配 iPhone 和 iPad ,并坚持用 Storyboard 来做适配,今天又踩一个坑(以前遇到过)还以为是 XCode 的鬼毛病. 声明  欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com 农民伯伯: http://over140.cnblogs.com 正文 一.目的/需求 在 iPhone 4.iPhone 6.iPad 上文字用不同的字号.图片宽高也要不同 二.问题 如下图所示:在 Storyboard 上给 UILab

java_基础——在代码里编译.java文件

[本文介绍] 本文不是深入理解和使用java编译器,只是在代码里编译.java文件的helloWorld.这种技术还是蛮有意思的,说不定在将来的某些只能化项目会运用到!^_^ [编译最基础的流程] [java代码] 1 package com.zjm.www.test; 2 3 import java.io.IOException; 4 5 import javax.tools.JavaCompiler; 6 import javax.tools.JavaCompiler.Compilation

毒瘤header(代码里的宏和函数看不懂可以来这里找)

实际上大多都是从别人代码里偷来的 #include <bits/stdc++.h> using namespace std; typedef double lf; typedef long long ll; typedef long double llf; typedef vector<int> vint; typedef unsigned int uint; typedef pair<int, int> pii; typedef unsigned long long