如何破解“中国开源拿来主义”?包云岗的几点分析

作者 | 包云岗

责编 | 王晓曼

本文经作者授权转载自包云岗知乎

以下视频是2011-2019期间全世界开源代码贡献最多的城市排名:旧金山一骑绝尘,其他主要是美欧城市;亚洲有东京、首尔上榜;莫斯科也贡献突出。但是,很遗憾没有中国城市。客观地说,中国在开源方面还比较落后,那该如何应对?

开源代码贡献量全世界城市排名(2011-2019)

有人建议不要使用来自美国的开源技术。类似的建议出发点是好的,但却落入了马克思所批判的“倒洗澡水连孩子也倒掉”思维方式。

对于中国在开源方面的“拿来主义”,只有搞清楚问题在哪里,才能对症下药。这需要我们辩证地去分析“中国开源拿来主义”背后的原因。

为什么美国的开源技术那么有吸引力?

事实上,开源技术对企业来说存在很大的吸引力,背后有其经济学原理——诺贝尔经济学奖科斯的交易成本(Transaction Cost)理论。根据该理论,每一笔交易都有成本。对于一个企业来讲,如果在技术都能完成相同功能的情况下,肯定交易成本越低的技术,会得到青睐。开源极大地降低了交易成本,所以必然会受到市场的青睐。例如,根据阿里云前副总裁章文嵩的数据,阿里使用开源技术来实现“去 IOE”,成本只需要原来的1/140。因此,一旦存在高质量的开源技术,必然会得到企业的关注和应用。

事实上,开源技术也存在竞争,也需要大量投入。人们经常责怪中国都是“拿来主义”,核心原因在于还未意识到要去占领开源市场。如果不投入参与竞争,怎么能推出有竞争力的开源技术?

美国企业对开源技术的投入非常重视。很多人都知道谷歌有多个有影响力的开源项目,比如 TensorFlow。但可能很多人想不到在 Github 上参与开源项目人数最多的公司其实是微软。2018年的一个统计显示,微软有4550名员工参与开源项目,全世界排第一;而谷歌2267名员工排第二,红帽子2023名员工排第三。

所以,要想做到“不要使用来自美国的开源技术”,不能靠堵,更需要的是引导——引导中国企业、学术界加大对开源的投入,形成一批中国发起的有影响力的开源项目。只有中国在开源领域有国际竞争力了,才能与美国的开源技术抗衡。

任何来自美国的“免费开源”的东西都不能用?

这也是“一刀切”的思维方式,片面而机械。这里稍作解释:

开源主要有两种模式,一种是非营利组织主导,如 Linux 基金会、Apache 基金会、RISC-V 基金会等,商业应用一般需加入基金会,缴纳会员费。另一种是企业主导,谷歌 (Andriod, Chromium, TensorFlow)、RedisLab (Redis)、WaveComputing (MIPS)等,商业应用需与主导企业签署协议。

例如全世界广泛使用的谷歌 TensorFlow 便属于第二种模式,是由企业主导。但是谷歌控制着 TensorFlow 的开发,只单向开源代码,很少接受社区反馈,很难开展支持社区协作开发,开源项目管理较为封闭不开放。这其实不是真正的开源,本质上是通过开源形成技术垄断。用小米副总@崔宝秋-小米的话说,这属于“开源寡头”。

前段时间龙芯放弃的 MIPS 指令集,曾经也宣布要开源其R6版本的指令集,这其实也是属于公司主导。随着 Wave Computing 破产,其开源计划也不了了之。

相比而言,由基金会等非盈利机构主导的开源计划、开源项目则更开放,更有生命力。比如 Linux 已经开源了近30年,依然蓬勃发展,全世界1400多家企业、15000多位开发者一起为 Linux 贡献。这是真正的开源——代码开源、流程开放、管理开放,通过贡献度来决定话语权。这样的开源项目中国为什么要拒绝?

我想中国不仅不应该拒绝,而是应该更多的投入,争取更多的话语权。事实上,华为便认识到了,在 Linux 上投入非常大,在 Linux Kernel 5.10 中华为的 Patch 贡献量已经排到全世界第二,仅次于 Intel。

有些开源项目受到美国军方 DARPA 资助,还能用吗?

这个问题其实去年就有人在网上提出类似的质疑。我也做过回应。以最近大家比较关注的 RISC-V 为例,DARPA 发言人的观点是“DARPA打算将其资助的 RISC-V工作公开提供给世界各地的公司和学者(the agency intended for RISC-V work it funded to be publiclyavailable to companies and academics around the world)”。

DARPA 的这个立场有历史背书。过去几十年,在 DAPRA 资助下研制的 BSDUnix、TCP/IP 协议栈等一系列技术对人类社会进步起到了巨大的推动作用。FreeBSD 是早期开源软件的杰出代表,TCP/IP 协议更是开放标准的典范,构建起今天连接几十亿人的 Internet。它们虽然都是 DARPA 支持,但是世界各地都可以使用。中国基于 TCP/IP 协议构建网络,这并没有受到美国的出口管制;中国企业基于TCP/IP研制的交换机与路由器,也并不受到美国的出口管制。

还是以RISC-V为例,指令集规范(Specification)和处理器实现(Implementation)是两个不同层次的概念,要区分开。指令集(ISA)是规范标准,往往用一本书或几张纸来记录描述,而处理器实现是基于指令集规范完成的源代码。

RISC-V 是一个指令集规范。“RISC-V 是开源的”表示指令集规范是开源、开放和免费的(open and free),这与 x86 与 ARM 指令集有本质不同,但并不是指具体的处理器实现也都是开源免费的。(关于 RISC-V 规范与处理器实现的区别,这里有专门的解读:关于 RISC-V 和开源处理器的一些解读 - 中国开放指令生态(RISC-V)联盟:http://crva.ict.ac.cn/?page_id=540)

因此,一个开源技术受到 DARPA 资助,不应该成为我们拒绝和抵制的理由,就如中国并没有因为 TCP/IP 协议是 DARPA 资助而拒绝。事实上,RISC-V 和 TCP/IP 一样,本质上都是规范。规范很重要,但更重要的是如何将规范转变为代码、系统和产品,这才能形成核心技术竞争力。

来源:

https://zhuanlan.zhihu.com/p/280144610?utm_source=wechat_session&utm_medium=social&utm_oi=27638299099136&utm_campaign=shareopn&wechatShare=1&s_r=0

作者介绍:

成都链安,全球最早专门从事区块链安全的公司,同时也是全球最早将形式化验证技术应用到区块链安全领域的团队,研发了全球领先的智能合约自动形式化验证平台VaaS,并基于此,建立了“一站式”区块链安全平台,为区块链企业提供安全审计、资产追溯、隐私保护、安全咨询、威胁情报、安全防护等全方位的安全服务与支持。申请软件发明专利和著作权15项。

更多阅读推荐

  • 如何在SQL Server 2019中添加数据敏感度分类的命令

  • 深度揭秘:腾讯存储技术发展史

  • 一文教你如何在生产环境中在Kubernetes上部署Jaeger

  • 如何在SQL Server 2019中添加数据敏感度分类的命令

  • 一周内咸鱼疯转 2.4W 次,最终被所有大厂封杀!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/516106.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uni-app获取腾讯地图计算两经纬度的实际距离(可批量)

地址 https://lbs.qq.com/service/webService/webServiceGuide/webServiceDistance getDistance() {uni.request({url: https://apis.map.qq.com/ws/distance/v1/matrix, //仅为示例,并非真实接口地址。method: GET,data: {mode: walking,from: 39.071510,117.190…

JavaScript 常用工具函数

目录 1. 为元素添加 on 方法2. 为元素添加trigger方法3. 转义 HTML 标签4. HTML 标签转义5. 跨浏览器绑定事件5. 加入收藏夹7. 提取页面代码中所有网址8. 动态加载脚本文件9. 返回顶部的通用方法10. 实现base64解码11. 确认是否是键盘有效输入值12. 全角半角转换13. 版本对比14…

JS前端常用工具方法

目录 1. 邮箱2. 手机号码3. 电话号码4. URL地址5. 是否字符串6. 是否数字7. 是否Boolean8. 是否函数9. 是否为null10. 是否undefined11. 是否对象12. 是否数组13. 是否时间14. 是否正则15. 是否错误对象16. 是否Symbol函数17. 是否Promise对象18. 是否Set对象19. 是否是微信浏览…

JS向数组添加元素,插入数据

js中对于数组的操作很常见,下面记录一下js向数组添加元素的方法。 let myArray[11,22,33];console.log(原数组:,myArray);myArray.push(44,55);console.log(用push在数组后面插入元素:,myArray);myArray.unshift(66,77);console.log(用unshif…

小程序 获取腾讯地图计算两经纬度的实际距离(可批量)_多地打卡

文章目录一、小程序1. 安装vue-jsonp2. 引入腾讯sdk3. 实例化4. 二点求距离5. 多点求距离文档地址:https://lbs.qq.com/service/webService/webServiceGuide/webServiceDistance申请开发者密钥(key): 申请密钥一、小程序 1. 安装…

前端常用 JavaScript 方法封装

目录 1. 输入一个值,返回其数据类型**2. 数组去重3. 字符串去重4. 深拷贝 浅拷贝5. reverse底层原理和扩展6. 圣杯模式的继承7. 找出字符串中第一次只出现一次的字母8. 找元素的第 n 级父元素9. 返回元素的第n个兄弟节点10. 封装mychildren,解决浏览器的兼容问题11. 判断元素…

H5 移动端 获取腾讯地图计算两经纬度的实际距离(可批量)_多地打卡

文章目录一、H5移动端1. 安装vue-jsonp2. 引入腾讯sdk3. 实例化4. 二点求距离5. 多点求距离文档地址:https://lbs.qq.com/service/webService/webServiceGuide/webServiceDistance一、H5移动端 1. 安装vue-jsonp npm i -S vue-jsonpmain.js //解决跨域 import {Vu…

JavaScript 中的 3 种 for 循环语句

1. for 应用较广,简单实用。 const array = [4, 7, 9, 2, 6]; for (let index = 0;</

GitHub 经典项目归集

目录 1. Vue32. Vue 源码解密3. 简历项目4. JavaScript5. Flutter6. TypeScript7. 前端必备在线工具8. 管理后台9. 数据结构与算法10. CSS 学习专题11. Node.js12. 小程序13. 前端监控14. 前端的代码规范15. 程序员必备仓库16. 设计

基于 vue 2.0 开发的轻量,高性能日历组件

文章目录1. 安装scss2. 安装日历组件3. 安装提示组件4. 注册组件5. 页面6. 效果图1. 安装scss npm i -D sass-loader8.0.2 npm i node-sass4.14.12. 安装日历组件 npm i vue-calendar-component --save3. 安装提示组件 npm install --save vue-component-toast4. 注册组件 …

Access中编写VBA代码时,如何区分、使用“.”和“!”

目录 1. 释义一2. 释义二3. 释义三1. 释义一 在 Access 以及其它一些使用 VBA 编程的软件中,点号(.)和叹号(!)的区别是让很多刚接触 VBA 编程不久的新手经常感到困惑的一个问题。 按照 VBA 的语法规则,点号(.)用于引用属性,叹号(!)用于引用集合对象,这个是最标准的定义。…

SQL数据库查询基础(主讲MySQL,必要时补充了SQLServer、Access兼容性说明)

目录 一. 逻辑运算符1. 执行的优先级2. 多个 or 子句的简化写法 - IN二. 模糊查询通配符 与 Like三. SQL语句中的计算字段四. SQL 子句的执行顺序五. 系统函数1. 拼接多个字符串字段2. 处理日期和时间3. 聚集函数六. Group By - 分组查询七. Having 子句注,文中如无特别说明,…

vue-cli 创建vue3项目

文章目录一、环境准备二、核心组件2.1. axios封装2.2. vuex2.3. vue-router一、环境准备 前提&#xff1a; # 安装node环境 node -v npm -v# 卸载旧脚手架工具 npm uninstall vue-cli -g or yarn global remove vue-cli# 安装新版的脚手架工具 指定版本vue/cli版本号 npm ins…

Excel VBA 处理图形图表详解

目录 一. 图表各元素在VBA中的表达方式1. 图表区2. 绘图区3. 数据系列4. 图表轴5.网格线6、数据标签7. 图表标题、图例和数据表8. 趋势线和误差线二. 图表类型三. VBA图表常用命令1. 获取工作表的行数2. 使用工作表函数检查 A1单元格中的数据是否为数字:3. 激活单元格区域 A 列…

Jquery 日期组件

项目开源地址&#xff1a;https://gitee.com/gblfy/date-field

十六进制、RGB 与 VBA颜色值对照表

十六进制、RGB 与 VBA颜色值对照表 颜色名称 RGB颜色 十六进制颜色代码 VBA颜色代码 颜色效果 黑色0,0,0#000000&H000000象牙黑41,36,33#292421&H212429灰色192,192,192#C0C0C0&HC0C0C0

利用 VBA 和 HTML自制兼容 WPS及 EXCEL(32位/64位)的颜色选择器

效果&#xff1a; 选择器参考网友一个且里面还残缺不全的半拉子工程方案进行了完善和改进。 技术方案&#xff1a; VBA HTML 实现的具体功能&#xff1a; 画VBA窗体时&#xff0c;非常方便地查看VBA颜色值&#xff08;如上图&#xff09;&#xff1b;默认颜色&#xff1a;有…

Apollo 分布式配置中心 搭建篇

文章目录一、介绍1. 痛点2. 为什么选择Apollo二、快速开始2.1. 安装mysql2.2. 下载脚本2.3. 初始化脚本三、服务端配置3.1. 下载安装包3.2. 创建目录3.3. 解压3.4. 配置3.5. 启动3.6. 防火墙策略3.6. 效果验证四、测试4.1. 引入依赖4.2. 配置4.3. 测试类4.4. 启动项目4.5. 效果…

VBA FSO 对象模型知识点梳理

目录 一. FSO-文件系统对象1.1 FSO的用途1.2 FSO 对象模型所包含的对象1.3 FSO对象的创建1.4 FSO对象属性示例二 FSO 中的方法和属性2.1 属性2.2 方法2.2.1 BuildPath 方法2.2.2 FileExists 方法2.2.3 GetFile 方法2.2.4 GetFileName 方法2.2.5

VBA GetOpenFilename 方法

目录 一. 作用二. 语法三. 参数说明四. 用法示例GetOpenFilename方法 一. 作用 显示标准的 “ 打开 ” 对话框,获取 用户 文件名,而 不必真正打开 任何文件。 二. 语法 expression.GetOpenFilename(FileFilter, FilterIndex, Title, ButtonText, MultiSelect)