程序猿(微信号:imkuqin) 猿妹 编译
原文:https://medium.freecodecamp.org/the-top-contributors-to-github-2017-be98ab854e87
纵观 IT 行业几十年的发展,开源软件从黑客的理想之国,已经变成一股推进计算机及相关行业不停进步的巨大力量。
各大科技巨头也纷纷投入到开源的怀抱,那么到底哪家巨头才是真正的开源之王?正是本文要和大家讨论的。
分析了 2017 年截至今日 GitHub 上发布的所有项目,对于每个 GitHub 用户都尽量分辨了他们属于哪个组织,并且只关注 2017 年增长超过 20 个 star 的仓库。
顶尖巨头的贡献比较
Microsoft 似乎有大约1,300 名员工积极地将代码推送到 GitHub 上的 825 个顶级存储库。
Google 在 GitHub 上大约有 900 名活跃用户,共推送约 1100 个顶级库。
亚马逊在 GitHub 上大概只有 134 名活跃员工,只推送 158 个顶级项目代码。
活跃用户和项目的 Star 数并不是等比的:比如,Google 员工贡献的代码仓库只比Microsoft 多 25%,但是这些存储库收集到的 Star 数远多于 25%(530,000 VS 260,000)。亚马逊仓库 2017 的 Star 数为 27000。
前三的排名中,值得一提是微软,大家都知晓开源世界是微软的死敌,2001 年,微软当时的 CEO 鲍尔默曾向开源社区开炮,他把Linux系统比作癌症,甚至力劝政府不要对开源项目提供支持。
但十年后事情却发生了大反转,微软自己主动开源了 Kinect,而当时这款产品是微软的当家花旦。尤其近些年,微软的态度越发开放,对开源社区敞开了怀抱,并连续加入 Linux 基金会、原生云计算基金会,而且都是白金会员。
Google 的项目 Star 数排行第一的就是 TensorFlow,但除了它还有许多非常有价值的项目比如十分流行的 Web 前端框架 Angular,比如 Kubernetes 等。
查看谷歌热门开源项目:《开源巨献:Google最热门60款开源项目》
RedHat,IBM,Pivotal,Intel 和 Facebook
亚马逊的排名远远落后于谷歌和微软。那么,他们中间还有哪些企业呢?RedHat,IBM,Pivotal,Intel 和 Facebook 也做出了突出贡献。
Facebook 和 IBM(美国)的 GitHub 用户数量与亚马逊数量相差无几,但是他们贡献的项目 Star 已经远超亚马逊(尤其是Facebook)
其次是阿里巴巴,Uber 和 Wix:
GitHub,Apache,腾讯:
百度,苹果,Mozilla:
BAT 三巨头也在积极拥抱开源社区,有一些开源项目在 GitHub 上也是获得相当高的Star数,比如阿里巴巴的前端框架 Ant Design 等。
点击查看:
《开源巨献:阿里巴巴最热门29款开源项目》
《开源巨献:百度最热门31款开源项目》
《开源巨献:腾讯最热门30款开源项目》
Oracle、Stanford,Mit 等:
更详细的排名可查阅:https://medium.freecodecamp.org/the-top-contributors-to-github-2017-be98ab854e87
这份报告是如何生成?
首先通过 GitHub Archive(https://www.githubarchive.org/)来获取数据来源。
再通过用户提交记录中的邮件地址来进行判断 GitHub 用户所属的公司。当然,并不是每个 GitHub 用户都会用企业邮件地址,这种数据就会被忽略不计。
使用的工具为:Google Big Query(https://cloud.google.com/bigquery/)
具体 SQL 代码如下:
#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'@(.*)') domain
FROM (
SELECT actor.id
, APPROX_TOP_COUNT(actor.login,1)[OFFSET(0)].value login
, APPROX_TOP_COUNT(JSON_EXTRACT_SCALAR(payload, '$.commits[0].author.email'),1)[OFFSET(0)].value email
, COUNT(*) c
, ARRAY_AGG(DISTINCT TO_JSON_STRING(STRUCT(b.repo_name,stars))) repos
FROM period a
JOIN repo_stars b
ON a.repo.id=b.id
WHERE type='PushEvent'
GROUP BY 1
HAVING c>3
)
)
SELECT * FROM (
SELECT domain
, githubers
, (SELECT COUNT(DISTINCT repo) FROM UNNEST(repos) repo) repos_contributed_to
, ARRAY(
SELECT AS STRUCT JSON_EXTRACT_SCALAR(repo, '$.repo_name') repo_name
, CAST(JSON_EXTRACT_SCALAR(repo, '$.stars') AS INT64) stars
, COUNT(*) githubers_from_domain FROM UNNEST(repos) repo
GROUP BY 1, 2
HAVING githubers_from_domain>1
ORDER BY stars DESC LIMIT 3
) top
, (SELECT SUM(CAST(JSON_EXTRACT_SCALAR(repo, '$.stars') AS INT64)) FROM (SELECT DISTINCT repo FROM UNNEST(repos) repo)) sum_stars_projects_contributed_to
FROM (
SELECT domain, COUNT(*) githubers, ARRAY_CONCAT_AGG(ARRAY(SELECT * FROM UNNEST(repos) repo)) repos
FROM pushers_guess_emails_and_top_projects
#WHERE domain IN UNNEST(SPLIT('google.com|microsoft.com|amazon.com', '|'))
WHERE domain NOT IN UNNEST(SPLIT('gmail.com|users.noreply.github.com|qq.com|hotmail.com|163.com|me.com|googlemail.com|outlook.com|yahoo.com|web.de|iki.fi|foxmail.com|yandex.ru', '|')) # email hosters
GROUP BY 1
HAVING githubers > 30
)
WHERE (SELECT MAX(githubers_from_domain) FROM (SELECT repo, COUNT(*) githubers_from_domain FROM UNNEST(repos) repo GROUP BY repo))>4 # second filter email hosters
)
ORDER BY githubers DESC
●本文编号2723,以后想阅读这篇文章直接输入2723即可
●输入m获取文章目录