---
author: Josh Simmons
category: 观点
comments_data:
- date: '2016-10-20 20:04:52'
  message: testing good or bad,
  postip: 219.133.227.103
  username: 来自广东深圳的 Chrome 50.0|Windows 7 用户
- date: '2016-10-21 13:45:12'
  message: test
  postip: 140.255.138.85
  username: 来自山东淄博的 Chrome 54.0|Fedora 用户
- date: '2016-10-28 16:34:45'
  message: Another test
  postip: 175.8.129.29
  username: 来自湖南长沙的 Chrome 54.0|Windows 8.1 用户
count:
  commentnum: 3
  favtimes: 3
  likes: 0
  sharetimes: 0
  viewnum: 7993
date: '2016-10-19 13:27:22'
editorchoice: false
excerpt: 迄今为止，我们已经开源了超过 2 千万行的代码。现在谷歌在 GitHub 上已经有了 84 个组织和 3499 个项目仓库，而今年就创建了 773
  个仓库！
fromurl: https://opensource.googleblog.com/2016/10/google-open-source-report-card.html
id: 7876
islctt: true
largepic: /images/p/201610/19/132715wl44vfite6ipwc6b.jpg
permalink: /article-7876-1.html
pic: /images/p/201610/19/132715wl44vfite6ipwc6b.jpg.thumb.jpg
related: []
reviewer: ''
selector: ''
summary: 迄今为止，我们已经开源了超过 2 千万行的代码。现在谷歌在 GitHub 上已经有了 84 个组织和 3499 个项目仓库，而今年就创建了 773
  个仓库！
tags:
- 谷歌
- Google
- 开源
thumb: false
title: 谷歌的开源成绩单
titlepic: true
translator: wxy
updated: '2016-10-19 13:27:22'
---

开源软件让谷歌可以快速而有效地构建系统而不用重复造轮子，可以让我们专注于解决新问题。我们站在巨人的肩膀上，因此我们熟谙这一切。这就是为什么[我们支持开源](https://developers.google.com/open-source/)，而且让谷歌人可以轻松地将他们内部开发的项目以开源方式发布的原因。


![](/images/p/201610/19/132715wl44vfite6ipwc6b.jpg)


今天，我们发布了我们的第一个开源成绩单，展示我们最流行的项目、分享一些数据，并介绍一些我们在 2016 年发布的项目细节。


迄今为止，我们已经开源了超过 2 千万行的代码，你可以在我们的网站上找到[我们最知名的项目的列表](https://developers.google.com/open-source/projects)，下面是其中的一些：


* [Android](https://source.android.com/index.html) - 用于移动设备的软件族，包括操作系统、中间件和关键性应用。
* [Chromium](https://www.chromium.org/) - 它包括 Google Chrome 浏览器背后的 [Chromium](http://www.chromium.org/Home) 软件和 Google Chrome OS 设备背后的 [Chromium OS](http://www.chromium.org/chromium-os) 软件。
* [Angular](https://angular.io/) - 一个 JavaScript 和 Dart 的 web 应用框架，关注于开发者的生产力、开发速度和测试能力。
* [TensorFlow](https://www.tensorflow.org/) - 一个使用<ruby> 数据流图 <rp>  （ </rp> <rt>  data flow graphics </rt> <rp>  ） </rp></ruby>的数字计算库，支持从数据中心到嵌入式设备的跨平台的大规模机器学习。
* [Go](http://golang.org/) - 一种静态类型的编译型编程语言，富有表现力、简洁而高效。
* [Kubernetes](http://kubernetes.io/) - 一个可以自动分发、操作和缩放的容器化应用系统。
* [Polymer](https://www.polymer-project.org/) - 一个构建于 Web 组件 API 之上的轻量级库，用于构建在 Web 应用中可重用的封装元素。
* [Protobuf](https://developers.google.com/protocol-buffers/) - 一个可扩展的、语言无关和平台无关的串行化结构数据的机制。
* [Guava](https://github.com/google/guava) - 一套 Java 核心库，包括新的集合类型（比如 multimap 和 multiset）、<ruby> 不可变集合 <rp>  （ </rp> <rt>  immutable collections </rt> <rp>  ） </rp></ruby>、知识图谱库、<ruby> 函数类型 <rp>  （ </rp> <rt>  functional types </rt> <rp>  ） </rp></ruby>、内存缓存，以及并发 API/功能、I/O、哈希、<ruby> 基类型 <rp>  （ </rp> <rt>  primitives </rt> <rp>  ） </rp></ruby>、反射、字符串处理等等。
* [Yeoman](http://yeoman.io/) - 一个强壮而自足的框架工具集，它包括可以帮助开发者快速构建优美而引人入胜的 Web 应用的库和工作流。


统计谷歌开源的全部软件有点困难，不过我们可以从开源到 GitHub 上这部分软件获取一些有趣数据。现在谷歌在 GitHub 上已经有了 84 个组织和 3499 个项目仓库，而今年就创建了 773 个仓库！


谷歌人使用了从汇编到 XSLT 等等不计其数的各种编程语言，但是哪一个才是我们的最爱？GitHub 可以帮我们找到在这些软件仓库中我们使用最多的编程语言：


1. JavaScript
2. Java
3. C/C++
4. Go
5. Python
6. TypeScript
7. Dart
8. PHP
9. Objective-C
10. C#


我们可以通过 BigQuery 来了解各种 [GitHub 开源数据](https://opensource.googleblog.com/2016/06/github-on-bigquery-analyze-all-code.html)，比如[空格和制表符的使用对比](https://medium.com/@hoffa/400-000-github-repositories-1-billion-files-14-terabytes-of-code-spaces-or-tabs-7cfe0b5dd7fd)、[最流行的 Go 语言软件包](https://medium.com/google-cloud/analyzing-go-code-with-bigquery-485c70c3b451)等等。谷歌人在 GitHub 上的开源项目提交了多少次？我们可以通过搜索 Google.com 的邮件地址来知道谷歌人的最低限度的提交量，比如使用这样的查询：



```
SELECT count(*) as n
FROM [bigquery-public-data:github_repos.commits]
WHERE committer.date > '2016-01-01 00:00'
AND REGEXP_EXTRACT(author.email, r'.*@(.*)') = 'google.com'

```

用上面的查询，我们发现从今年开始，谷歌人在 GitHub 上的开源项目做了 142,527 次提交。这个数据集始于 2011 年，如果从那时开始统计，那么提交次数是 719,012。不过，这只是最低限度的数据，因为我们没有统计谷歌人使用其它邮件地址的提交。


让我们来看看 2016 年有哪些令人激动的地方。我们发布了开源[软件](https://opensource.googleblog.com/2016/04/cctz-v20-now-with-more-civil-time.html)、[硬件](https://opensource.googleblog.com/2016/07/announcing-open-source-adc-board-for.html)和[数据集](https://opensource.googleblog.com/2016/10/introducing-open-images-dataset.html)，今年发布的有这些：


#### Seesaw


[Seesaw](https://github.com/google/seesaw) 是一个基于 Linux 虚拟服务器（LVS）的负载平衡平台，是由我们的 SRE 工程师用 Go 语言开发的。就像其它的项目一样，它也是为了解决我们切身之痒而产生的。


在我们[发布它的公告](https://opensource.googleblog.com/2016/01/seesaw-scalable-and-robust-load.html)中提到：“我们需要有为<ruby> 单播 <rp>  （ </rp> <rt>  unicast </rt> <rp>  ） </rp></ruby>和<ruby> 选播 <rp>  （ </rp> <rt>  anycast </rt> <rp>  ） </rp></ruby> VIP 控制流量的能力，也需要对 NAT 和 DSR（也叫 DR）进行负载平衡，以及针对后端进行足够的健康检查。所有这些我们需要一个可以让我们轻松地管理的平台，包括自动分发改变的配置。”


#### <ruby> 供应商安全评估调查表 <rp>  （ </rp> <rt>  Vendor Security Assessment Questionnaire </rt> <rp>  ） </rp></ruby> (VSAQ)


每年我们需要评估几百个供应商的安全情况，并且我们开发了一个流程来通过 [VSAQ](https://github.com/google/vsaq) 自动化许多初始信息的收集。许多供应商发现我们的评估表直观而灵活，所以我们决定把它分享出来。VSAQ 框架包括可扩展的调查表模版，覆盖了 Web 应用、隐私程序、基础架构以及物理和数据中心安全。你可以在我们的[发布公告](https://opensource.googleblog.com/2016/03/scalable-vendor-security-reviews.html)中了解更多信息。


#### OpenThread


[OpenThread](http://github.com/openthread/openthread) 是由 [Nest](https://nest.com/) 发布的一个 [Thread](http://threadgroup.org/) 协议的完整实现，用于家庭连接设备。它非常重要，这是由于这个领域如我们所见是非常碎片化的。OpenThread 的开发得到了 ARM、微软、高通、德州仪器等主要厂商的支持。


#### Magenta


我们可以使用机器学习来创建吸引人的艺术和音乐吗？这个问题的答案就是动画 [Magenta](http://github.com/tensorflow/magenta)，这个项目来自于[谷歌大脑团队](https://research.google.com/teams/brain/)，基于 TensorFlow。它有助于推动机器智能在音乐和艺术创作中的发展，并为艺术家、程序员和机器学习研究人员构建了一个协作社区。阅读它的[发布公告](https://magenta.tensorflow.org/welcome-to-magenta)了解更多信息。


#### Omnitone


虚拟现实（VR）如果没有<ruby> 空域音频 <rp>  （ </rp> <rt>  spatial audio </rt> <rp>  ） </rp></ruby>还做不到身临其境，而许多的 VR 开发都是在专有平台上进行的。 [Omnitone](https://github.com/GoogleChrome/omnitone) 是一个由 Chrome 团队成员构建的开源库，它可以给该浏览器带来<ruby> 空域音频 <rp>  （ </rp> <rt>  spatial audio </rt> <rp>  ） </rp></ruby>。Omnitone 基于标准的 Web 音频 API 构建，可以提供具有现场感的体验，也被用于类似 [WebVR](https://webvr.info/) 这样的伴生项目。阅读该项目的[发布公告](http://google-opensource.blogspot.com/2016/07/omnitone-spatial-audio-on-web.html)了解更多信息。


#### <ruby> 科学日报 <rp>  （ </rp> <rt>  Science Journal </rt> <rp>  ） </rp></ruby>


当今的智能电话带有许多传感器，可以告诉我们周围很多有趣的信息。我们[启动](http://googleforeducation.blogspot.com/2016/05/inspiring-future-makers-and-scientists.html)了[科学](https://github.com/google/science-journal)[日报](https://github.com/google/science-journal-arduino)项目，以帮助教育工作者、学生和科学爱好者们利用这些传感器。更多信息可以参阅我们的[发布公告](http://google-opensource.blogspot.com/2016/08/opening-up-science-journal.html)。


#### Cartographer


[Cartographer](https://github.com/googlecartographer) 是一个以 2D 和 3D 方式即时定位与地图构建（SLAM）的库，支持<ruby> <a href="http://www.ros.org/about-ros/">  机器人操作系统 </a> <rp>  （ </rp> <rt>  Robot Operating System </rt> <rp>  ） </rp></ruby>（ROS）。它合并了多种传感器的数据，这个库可以计算位置和地图表面。这是自动驾驶汽车、UAV 和机器人的关键因素，并在[室内地图](https://www.zeitgeistminds.com/talk/5604289821016064/amit-sood-the-peoples-museum-amit-sood)方面做了很多努力。关于 Cartographer 的更多信息可以参阅其[发布公告](http://opensource.googleblog.com/2016/10/introducing-cartographer.html)。


这只是我们今年发布的一小部分例子，请继续关注谷歌开源博客，为谷歌的开源软件、硬件和数据而欢呼吧。