白首相知犹按剑
前两天看到有朋友分享说,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 上就有大量的开源项目
文章开头提到的 Facebook BSD + PATENTS 就是开源协议的一种~
但它到底有什么问题,以至于让百度宁可费这么大力气重做他们的东西都要弃用这个协议的产品呢?
因为根据协议内容,只要你在用 Facebook 家的 React 在做项目,那么 Facebook 可以反过来用你的项目专利,而且和 React 无关的专利 Facebook 也可以用。
同时你还不能告他侵权,否则你就会失去 React 的授权,Facebook 可以先告你!
其实 React 挺好用的
可能朋友们对于百度的印象不太好,但这回是 Facebook 做的不太地道,因为根据这个开源协议,百度的人工智能,自动驾驶等等专利都可能受到威胁,这一点 Facebook 的这个协议确实有点太流氓了。
而且不光百度,Apache 也因为开源协议的原因禁用了 React。
其实在科技圈,因为这个开源协议闹出来的幺蛾子事情还真不少。。。
他的产品被原作者指抄袭
连名字都还叫 “ 猫 ”,你这抄袭也忒不走心了吧。。。
差评君去开源库里看了看,发现原作者发现被抄袭了之后,更改了开源协议,改成了差评君之前说的 GPL
这就是典型的不遵守开源协议的案例。
再比如说区块链热潮中的一个叫量子链的项目,图为知乎匿名网友扒出来的开源协议问题。(话题链接:https://www.zhihu.com/question/57090778)
一直以来开源项目的公开透明让不少别有用心的人钻了孔子,这实在是违背了开源社区的初衷。
但有些公司还在协议里打着保护知识产权的幌子耍流氓。。。
比如 Facebook 这样本身有着技术却去污染开源社区的行为受到了许多争议。
还有人把 Facebook 的点赞倒过来 diss 了一下
开源本身的目的是让软件项目和科研项目一样,互相分享知识,让前人给后人发明的工具,让后人更好地改变世界。
而做这样的事情,是需要很大的热情的,所以极客君觉得私有软件也没有错,程序员也是要吃饭的。
但是,拿开源去搞一些不正当的行为,用大家的美好梦想去填充自私的欲望,这样的行为真的不合适。
“ 小公司不用担心,Facebook 应该不在乎~ ”
目前,百度内部在自研 React Native 的替代方案。
相关推荐
虽然文中提到Facebook缺少大量QA或自动化测试的情况,但实际上Facebook确实存在自动化测试流程,所有代码在发布之前都必须通过自动化测试。 #### 五、代码发布 **1. 发布周期** - **打包时间**:每周二,所有提交...
在Facebook的源代码中,我们可以看到如何优雅地处理多线程和异步任务,这是Android开发中的关键问题。Android的主线程负责UI更新,而后台线程则执行耗时操作,如网络通信和数据处理。Facebook的框架很可能包含了使用...
Facebook源代码框架.zip是一个包含Facebook为其Android平台开发的SDK的压缩包。这个框架是开发者用于在他们的应用程序中集成Facebook功能的重要资源,比如登录、分享、推送通知等。下面将详细介绍这个框架的一些关键...
在IT行业中,Facebook分享是一项常见的功能,特别是在移动应用和网页开发中。Facebook分享允许用户将内容,如文本、图片或链接,快速便捷地发布到他们的Facebook时间线,从而扩大信息的传播范围。在这个"facebook...
在本文中,我们将深入探讨如何使用JS实现全功能的社交媒体分享功能,包括支持Facebook和Twitter等平台。 首先,为了在网页上实现分享功能,我们需要了解各个社交平台提供的分享API。例如,Facebook提供了"Like"和...
9. **调试与测试**:在Unity中使用Facebook API,开发者需要设置正确的App ID,并在模拟器或真实设备上进行测试,确保所有功能在不同环境下都能正常工作。 10. **权限管理**:在请求用户数据时,必须明确告知用户并...
在本文中,我们将深入探讨如何使用C#编程语言实现Facebook登录和图片上传功能。这个功能在许多社交网络应用中非常常见,特别是在与Facebook进行集成时。通过VS2008(Visual Studio 2008)这样的开发环境,我们可以...
【Facebook的代码开发工具——Nuclide】\n\nNuclide是Facebook开发的一款强大的代码开发工具,旨在提供统一的集成开发环境(IDE),支持多种平台和语言,包括iOS、Android、Web以及React Native等。该工具由Facebook...
在这个"Android代码-仿facebook布局效果.zip"压缩包中,可能包含了实现这种效果的相关代码和资源文件。 1. **滑动导航(Swipe Navigation)**: Facebook应用中常见的滑动手势用于切换不同内容板块,例如新闻feed、...
Facebook源码中的版本控制系统(如Git)和代码审查流程,展示了其内部的协作模式和代码质量管理机制。 总的来说,深入研究Facebook源码可以为开发者提供宝贵的实践经验,帮助他们理解大规模社交网络的构建、运维和...
facebook安卓安装包,Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的 ...
在Android平台上,Facebook客户端的开发涉及众多技术和工具的综合运用。这个名为"Facebook客户端.zip"的压缩包可能包含了实现一个完整的Facebook应用所需要的各种资源、代码和配置文件。下面,我们将详细探讨与...
适用于 Android 的 Facebook SDK 的代码和示例可在 GitHub 上找到。一种安全便捷的方式,方便用户使用 Facebook 凭据登录您的应用或网站。允许用户通过您的应用发帖到 Facebook。用户可以共享、发送消息和共享到快拍...
在IT行业中,设计一个仿Facebook对话框是一项常见的任务,它涉及到前端开发、用户界面(UI)设计和用户体验(UX)优化等多个方面。Facebook的对话框以其简洁、直观和高效的交互方式,深受用户喜爱,因此,许多开发者...
【标题】: 百度Amis低代码引擎用于后台...通过深入学习和实践这个源码项目,开发者不仅可以掌握Amis低代码引擎的使用,还能提升在React环境下的项目构建能力,理解现代前端最佳实践,从而更加高效地开发后台管理系统。
在dependencies块下,添加如下代码: ```groovy dependencies { // ... compile 'com.facebook.android:facebook-android-sdk:3.15.0' } ``` **2. 初始化Facebook SDK** 在应用的主Activity的onCreate()方法中,...
在Facebook上,动态GIF图像是非常常见的,它们可以为用户带来生动有趣的视觉体验。然而,有时我们可能希望对这些动态GIF图像的播放进行控制,例如点击开始播放,再次点击则暂停。这个"Facebook动态GIF图片播放暂停...
Facebook API和Facebook_JAR包是开发者用来与Facebook平台进行交互的重要工具,它们使得开发者能够创建应用程序,集成到Facebook生态系统中,实现数据交换、用户登录验证、发布内容等功能。Facebook API通常指的是...
【标题】:“FaceBook完美运行在Eclipse下” 在Eclipse这一广受欢迎的Java集成开发环境中,成功地运行Facebook的相关项目是一项重要的技术实践。这里提到的"FaceBook完美运行在Eclipse下"主要指的是Facebook开源的...