限时领|《AI 百问百答》专栏课+实体书(包邮)! 了解详情
写点什么

Google 的开源方法论

  • 2016-09-01
  • 本文字数:1097 字

    阅读完需:约 4 分钟

没有开源,Google 不会有今天的成功。在本周举行的北美 Linux 大会上,Google 工程师 Merlin 从一个第三方视角概括了 Google 是如何使用和为开源做出贡献。自 2002 年以来,Marc Merlin 一直担任 Google 的工程师,期间做过许多开源项目并为 Linux 项目贡献过代码的。

开源绝非易事

无论是个人还是公司,开放项目源码的目的无非是:借助社区的力量帮助项目更好地成长和推动社区的发展。但是,开源绝非易事。创始之初,由于资源非常紧缺,Google 在早期对开源的贡献非常有限。Google 的第一代软件都是为了内部使用的需要,并非在开始就是为开源而设计。之后 Google 希望将这些软件开源的时候,花费了大量的精力专门为它们写了技术文档以及论文,以描述其中的方法和代码,方便开源社区的其他开发者查阅和参与。开源并非仅仅是将源码发布出去,同时还需要付出巨大的精力去进行维护。

Google 的开源史

从经验上看,Google 过去在总体上虽然不怎么开源,但是却发表了很多相关的论文,比如说对于业界很重要的 MapReduce、BigTable 论文。并不是说 Google 不愿意开源,否则它也不会去发表这类论文,问题是在于开源需要太多的人力和物力了。随着 Google 的日益壮大,开始在开源社区担负起一定的责任。从 Google 开源的发展中可以看出,Google 最早期的贡献都是修复一些 bug。Google 总是最先发现和修复难以发现的 bug,因为这些 bug 只会在 Google 这样的规模中才会出现。到目前为止,Google 已经为 Linux 内核贡献了超过 5000 次补丁。其中有小的补丁也有大的子系统。当谈到 Google 自己的开源项目时,目前在 GitHub 中 Google 有超过 3000 个开源项目。随着开源项目的骤增,为了方便集中地对需要开源的代码进行审查,Google 组建了一个包含 6 个人的审查团队,主要任务是从法律层面审查 Google 内部使用开源项目和发布源码的合规性。

如何保持代码的合法性

为了保持整件事情的合法性,Google 将所有外部的开源代码存储在第三方。只有那些拥有 Google 能够接受的许可证的项目,Google 才允许在内部使用。一个 Google 不能接受的许可证的例子是 AGPL(Affero 通用公共许可证),这是一个互惠许可证,要求那些使用了其中的代码的项目需要提供一个项目源码的链接。相比于在一个较少限制的许可证下自己去书写代码重新实现,或者使用其他的方式,比保证 Google 面向外部的产品中没有任何 AGPL 代码的代价要小得多。对于那些向 Google 项目贡献代码的开发者,Google 要求他们同意贡献许可协议(CLA)。CLA 的主要目的是得 Google 能够对贡献的代码重新颁布许可证,以及 Google 对贡献的代码有专利许可。即,仍然保留开发者的代码的所有权,开发者只是另外给了 Google 一个许可证。

2016-09-01 19:003375
用户头像

发布了 32 篇内容, 共 20.3 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

携手 StarRocks 打造极速统一数据底座,理想汽车获 DAMA 中国 “数据治理最佳实践奖”

StarRocks

DM 实践手册

TiDB 社区干货传送门

迁移 管理与运维

作为程序员,12款常用的软件!

千锋IT教育

户外LED显示屏技术

Dylan

LED显示屏 户外LED显示屏 led显示屏厂家

Coinbase或在不久使用Zebec发放工资,并对Web3支付赛道发展寄予厚望

鳄鱼视界

教你用JavaScript实现背景图像滑动

小院里的霍大侠

JavaScript 编程入门 实战案例 图像滑动

Coinbase或在不久使用Zebec发放工资,并对Web3支付发展寄予厚望

股市老人

Java开发如何通过IoT边缘ModuleSDK进行进程应用的开发

华为云开发者联盟

开发 数据处理 华为云 12 月 PK 榜

教你用JavaScript实现随机点名器

小院里的霍大侠

JavaScript 初学者 入门实战

阿里云联合“产学研媒”发起BizDevOps共促计划,助力企业提升组织效能

阿里技术

研发效能 数字化转型

一文解读机密容器的崛起和发展

云布道师

龙蜥

数据报告 | 非洲电商市场分析报告

前嗅大数据

数据报告 电商报告

践行开源理念,统信软件开放服务器操作系统UOS V20使用授权

统信软件

操作系统 服务器 国产化 免费

解读Java内存模型中Happens-Before的8个原则

华为云开发者联盟

Java 开发 华为云 12 月 PK 榜

MySQL的数据类型和存储引擎介绍

C++后台开发

MySQL 数据库 中间件 后端开发 存储引擎

开源工具系列1:Cloud Custodian

HummerCloud

云计算 云安全

TiDB Operator配置TiDB集群故障自动转移

TiDB 社区干货传送门

集群管理 管理与运维 故障排查/诊断 安装 & 部署 扩/缩容

带你玩转OpenHarmony AI:打造智能语音子系统

OpenHarmony开发者

OpenHarmony

TiCDC 源码解读(2)-- TiKV CDC 模块介绍

TiDB 社区干货传送门

我和 TiDB 的故事 | TiDB 仓库 commit TOP 1,PR 数超过 1000 的阿毛哥

TiDB 社区干货传送门

人物访谈

Go 中这么多创建 error 的方式,你真的了解它们各自的应用场景吗

Go学堂

golang 开源 程序员 个人成长 12月月更

YonBuilder移动开发平台AVM框架 封装滑动单元格组件

YonBuilder低代码开发平台

开发者 后端 移动开发 avm.js AVM

一文掌握MyBatis的动态SQL使用与原理

华为云开发者联盟

sql 开发 华为云 12 月 PK 榜

不止于大,如何打造优秀的折叠屏应用体验

HarmonyOS开发者

HarmonyOS

借力 StarRocks,"陆战之王" 大润发如何在零售业数字化转型中抢占先机?

StarRocks

数据分析 零售

深度!用“极速统一”,开启金融行业数据分析新范式

StarRocks

V8的垃圾回收和内存限制

千锋IT教育

Coinbase或在不久使用Zebec发放工资,并对Web3支付赛道发展寄予厚望

西柚子

消除视觉Transformer与卷积神经网络在小数据集上的差距

华为云开发者联盟

人工智能 华为云 12 月 PK 榜

问答知识库快速构建技术解析及行业实践

中关村科金

人工智能 大数据 AI 知识图谱 技术实践

Google 的开源方法论_Google_百占辉_InfoQ精选文章