开源软件让谷歌可以快速而有效地构建系统而不用重复造轮子,可以让我们专注于解决新问题。我们站在巨人的肩膀上,因此我们熟谙这一切。这就是为什么我们支持开源,而且让谷歌人可以轻松地将他们内部开发的项目以开源方式发布的原因。
今天,我们发布了我们的第一个开源成绩单,展示我们最流行的项目、分享一些数据,并介绍一些我们在 2016 年发布的项目细节。
迄今为止,我们已经开源了超过 2 千万行的代码,你可以在我们的网站上找到我们最知名的项目的列表,下面是其中的一些:
- Android - 用于移动设备的软件族,包括操作系统、中间件和关键性应用。
- Chromium - 它包括 Google Chrome 浏览器背后的 Chromium 软件和 Google Chrome OS 设备背后的 Chromium OS 软件。
- Angular - 一个 JavaScript 和 Dart 的 web 应用框架,关注于开发者的生产力、开发速度和测试能力。
- TensorFlow - 一个使用 数据流图 ( data flow graphics ) 的数字计算库,支持从数据中心到嵌入式设备的跨平台的大规模机器学习。
- Go - 一种静态类型的编译型编程语言,富有表现力、简洁而高效。
- Kubernetes - 一个可以自动分发、操作和缩放的容器化应用系统。
- Polymer - 一个构建于 Web 组件 API 之上的轻量级库,用于构建在 Web 应用中可重用的封装元素。
- Protobuf - 一个可扩展的、语言无关和平台无关的串行化结构数据的机制。
- Guava - 一套 Java 核心库,包括新的集合类型(比如 multimap 和 multiset)、 不可变集合 ( immutable collections ) 、知识图谱库、 函数类型 ( functional types ) 、内存缓存,以及并发 API/功能、I/O、哈希、 基类型 ( primitives ) 、反射、字符串处理等等。
- Yeoman - 一个强壮而自足的框架工具集,它包括可以帮助开发者快速构建优美而引人入胜的 Web 应用的库和工作流。
统计谷歌开源的全部软件有点困难,不过我们可以从开源到 GitHub 上这部分软件获取一些有趣数据。现在谷歌在 GitHub 上已经有了 84 个组织和 3499 个项目仓库,而今年就创建了 773 个仓库!
谷歌人使用了从汇编到 XSLT 等等不计其数的各种编程语言,但是哪一个才是我们的最爱?GitHub 可以帮我们找到在这些软件仓库中我们使用最多的编程语言:
我们可以通过 BigQuery 来了解各种 GitHub 开源数据,比如空格和制表符的使用对比、最流行的 Go 语言软件包等等。谷歌人在 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 年有哪些令人激动的地方。我们发布了开源软件、硬件和数据集,今年发布的有这些:
Seesaw
Seesaw 是一个基于 Linux 虚拟服务器(LVS)的负载平衡平台,是由我们的 SRE 工程师用 Go 语言开发的。就像其它的项目一样,它也是为了解决我们切身之痒而产生的。
在我们发布它的公告中提到:“我们需要有为 单播 ( unicast ) 和 选播 ( anycast ) VIP 控制流量的能力,也需要对 NAT 和 DSR(也叫 DR)进行负载平衡,以及针对后端进行足够的健康检查。所有这些我们需要一个可以让我们轻松地管理的平台,包括自动分发改变的配置。”
供应商安全评估调查表 ( Vendor Security Assessment Questionnaire ) (VSAQ)
每年我们需要评估几百个供应商的安全情况,并且我们开发了一个流程来通过 VSAQ 自动化许多初始信息的收集。许多供应商发现我们的评估表直观而灵活,所以我们决定把它分享出来。VSAQ 框架包括可扩展的调查表模版,覆盖了 Web 应用、隐私程序、基础架构以及物理和数据中心安全。你可以在我们的发布公告中了解更多信息。
OpenThread
OpenThread 是由 Nest 发布的一个 Thread 协议的完整实现,用于家庭连接设备。它非常重要,这是由于这个领域如我们所见是非常碎片化的。OpenThread 的开发得到了 ARM、微软、高通、德州仪器等主要厂商的支持。
Magenta
我们可以使用机器学习来创建吸引人的艺术和音乐吗?这个问题的答案就是动画 Magenta,这个项目来自于谷歌大脑团队,基于 TensorFlow。它有助于推动机器智能在音乐和艺术创作中的发展,并为艺术家、程序员和机器学习研究人员构建了一个协作社区。阅读它的发布公告了解更多信息。
Omnitone
虚拟现实(VR)如果没有 空域音频 ( spatial audio ) 还做不到身临其境,而许多的 VR 开发都是在专有平台上进行的。 Omnitone 是一个由 Chrome 团队成员构建的开源库,它可以给该浏览器带来 空域音频 ( spatial audio ) 。Omnitone 基于标准的 Web 音频 API 构建,可以提供具有现场感的体验,也被用于类似 WebVR 这样的伴生项目。阅读该项目的发布公告了解更多信息。
科学日报 ( Science Journal )
当今的智能电话带有许多传感器,可以告诉我们周围很多有趣的信息。我们启动了科学日报项目,以帮助教育工作者、学生和科学爱好者们利用这些传感器。更多信息可以参阅我们的发布公告。
Cartographer
Cartographer 是一个以 2D 和 3D 方式即时定位与地图构建(SLAM)的库,支持 机器人操作系统 ( Robot Operating System ) (ROS)。它合并了多种传感器的数据,这个库可以计算位置和地图表面。这是自动驾驶汽车、UAV 和机器人的关键因素,并在室内地图方面做了很多努力。关于 Cartographer 的更多信息可以参阅其发布公告。
这只是我们今年发布的一小部分例子,请继续关注谷歌开源博客,为谷歌的开源软件、硬件和数据而欢呼吧。