蚊章汇 - Felipe Hoffa
type: channel
link: https://linuxcn.bwsl.wang/author/768/
description: Felipe Hoffa
items: 2017 年哪个公司对开源贡献最多？让我们用 GitHub 的数据分析下

2017 年哪个公司对开源贡献最多？让我们用 GitHub 的数据分析下
type: item
date: 2017-11-07T20:20:00+08:00
description: 在这篇分析报告中，我们将使用 2017 年度截止至当前时间（2017 年 10 月）为止，GitHub 上所有公开的推送事件的数据。对于每个 GitHub 用户，我们将尽可能地猜测其所属的公司。此外，我们仅查看那些今年得到了至少 20 个星标的仓库。以下是我的报告结果，你也可以在我的交互式 Data Studio 报告上进一步加工。顶级云服务商的比较2017 年它们在 GitHub 上的表现：微软看起来约有 1300 名员工积极地推送代码到 GitHub 上的 825 个顶级仓库。谷歌显示出约有 900 名员工在 GitHub 上活跃，他们推送代码到大约 1100 个顶级仓库。亚马逊似乎只有 134 名员工活跃在 GitHub 上，他们推送代码到仅仅 158 个顶级项目上。不是所有的项目都一样：在超过 25% 的仓库上谷歌员工要比微软员工贡献的多，而那些仓库得到了更多的星标（53 万对比 26 万）。亚马逊的仓库 2017 年合计才得到了 2.7 万个星标。红帽、IBM、Pivotal、英特尔和 Facebook如果说亚马逊看起来被微软和谷歌远远抛在了身后，那么这之间还有哪些公司呢？根据这个排名来看，红帽、Pivotal 和英特尔在 GitHub 上做出了巨大贡献：注意，下表中合并了所有的 IBM 地区域名（各个地区会展示在其后的表格中）。Facebook 和 IBM（美）在 GitHub 上的活跃用户数同亚马逊差不多，但是它们所贡献的项目得到了更多的星标（特别是 Facebook）：接下来是阿里巴巴、Uber 和 Wix：以及 GitHub 自己、Apache 和腾讯：百度、苹果和 Mozilla：（LCTT 译注：很高兴看到国内的顶级互联网公司阿里巴巴、腾讯和百度在这里排名前列！）甲骨文、斯坦福大学、麻省理工、Shopify、MongoDb、伯克利大学、VmWare、Netflix、Salesforce 和 Gsa.gov：LinkedIn、Broad Institute、Palantir、雅虎、MapBox、Unity3d、Automattic（WordPress 的开发商）、Sandia、Travis-ci 和 Spotify：Chromium、UMich、Zalando、Esri、IBM (英)、SAP、EPAM、Telerik、UK Cabinet Office 和 Stripe：Cern、Odoo、Kitware、Suse、Yandex、IBM (加)、Adobe、AirBnB、Chef 和 The Guardian：Arm、Macports、Docker、Nuxeo、NVidia、Yelp、Elastic、NYU、WSO2、Mesosphere 和 Inria：Puppet、斯坦福（计算机科学）、DatadogHQ、Epfl、NTT Data 和 Lawrence Livermore Lab：我的分析方法我是怎样将 GitHub 用户关联到其公司的在 GitHub 上判定每个用户所属的公司并不容易，但是我们可以使用其推送事件的提交消息中展示的邮件地址域名来判断。同样的邮件地址可以出现在几个用户身上，所以我仅考虑那些对此期间获得了超过 20 个星标的项目进行推送的用户。我仅统计了在此期间推送超过 3 次的 GitHub 用户。用户推送代码到 GitHub 上可以在其推送中显示许多不同的邮件地址，这部分是由 GIt 工作机制决定的。为了判定每个用户的组织，我会查找那些在推送中出现更频繁的邮件地址。不是每个用户都在 GitHub 上使用其组织的邮件。有许多人使用 gmail.com、users.noreply.github.com 和其它邮件托管商的邮件地址。有时候这是为了保持匿名和保护其公司邮箱，但是如果我不能定位其公司域名，这些用户我就不会统计。抱歉。有时候员工会更换所任职的公司。我会将他们分配给其推送最多的公司。我的查询语句#standardSQL WITH period AS ( SELECT * FROM `githubarchive.month.2017*` a ), repo_stars AS ( SELECT repo.id, COUNT(DISTINCT actor.login) stars, APPROX_TOP_COUNT(repo.name, 1)[OFFSET(0)].value repo_name FROM period WHERE type='WatchEvent' GROUP BY 1 HAVING stars>20 ), pushers_guess_emails_and_top_projects AS ( SELECT * # , REGEXP_EXTRACT(email, r'@(…