中国互联网公司开源项目调研报告
近年来,开源技术得到越来越多的重视,微软收购GitHub、IBM收购红帽,都表明了开源的价值。国内公司也越来越多的参与开源,加入开源基金会/贡献开源项目。但是,它们到底做得如何呢?为此InfoQ统计了国内在GitHub上较活跃的7家一线互联网公司的50多个账号的2800多个项目,为大家呈现一部分答案。
一、公司及账号
本次参与统计的公司包括百度、阿里、腾讯、华为、美团、360、小米,一共7家公司,在最开始的时候,我们选定的是10家公司,它们都是国内互联网的代表型企业,但由于其他3家公司或没有统一管理自己的开源项目,又或是开源项目太少,没有分析的价值,所以我们就删去了。
在搜集这7家公司的开源账号的过程中,我们尽量收集了网络上的信息以避免遗漏,不过由于统计口径不一,有些公司只承认在GitHub公司主体账号旗下的项目,导致团队账号可能难以收集全面。但是我们又认为有必要收集以团队身份出现的公司账号,它们的行为也代表公司的一部分,公司也应该将这些账号视为公司开源战略的一部分,进行统一治理。
具体如下:
注:饿了么和优酷已经被阿里收购,故归入阿里旗下,下文分析的数据都是基于非fork的项目。
二、TOP10 开源项目
Star数最多的项目 TOP10
Star数越多,表示该项目越受欢迎,在Star数TOP 10的开源项目中,阿里有6个项目,百度有1个项目,腾讯有2个项目,美团有1个。
蚂蚁金服的ant-design以4.3万star数领跑,即使放在整个中国范围内,它也是最受欢迎的开源项目之一。而计算公司的项目数方面,阿里以6个遥遥领先,说明阿里在开源方面受到开发者的广泛认可。
在领域方面,star数最多的项目里前端相关的项目有7个,包揽前三,一方面说明国内公司在前端开源方面做的最好,另一方面也是因为前端项目在GitHub上普遍更受欢迎。
贡献者最多的项目TOP10
注:这里面的贡献者只包含拥有GitHub账号的人,邮箱未注册GitHub的开发者未显示在内
Contributor数越多,表示项目越开放,在贡献者数排名前十的项目中,阿里令人吃惊的占据了8个席位,几乎全部包揽,百度则占据剩下两个。阿里的ant-design项目再次名列榜首,包括衍生项目ant-design-pro也榜上有名。
贡献者数量是体现一个项目是否开放的重要指标之一。项目越开放,它就会接纳更多来自社区的贡献。而由公司推出的开源项目尤其需要关注这一指标,因为有些公司开源项目只是将源码开放出来,但具体开发和路线演进并不允许它人染指。
我们可以看到,阿里已经意识到这个问题并努力做出了一些改进,我们也期待有更多国内公司的开源项目能够拥抱社区。
Commits数最多的项目TOP10
commits提交数越多,表明项目越复杂,开发周期较长,协作者数量更多。在commits数前十中,阿里占了5个,百度占了3个,腾讯和美团各有一个。
这里笔者发现一个现象:部分大公司会fork一些知名的第三方项目并创建分支,但并未体现在github的fork关系里,其中以阿里居多,如AliOS-nodejs项目。笔者认为,这种行为并不值得鼓励。
在Top10项目中,百度的Paddle和Apollo项目名列前茅,说明百度声称的在AI方面基于开源理念来打造项目和产品,兑现了它自己的承诺,值得尊重。
另外我们发现,这10个项目有4个都是Apache基金会项目(Flink由阿里收购而来),说明Apache基金会在开源方面名不虚传,也说明国内公司的确是把最好的项目捐献给了Apache基金会。
三、公司开源情况
哪些账号开源最厉害
在开源账号方面,各大公司的官方账号并不是拥有开源项目最多的账号,这一桂冠被阿里的Kissy gallery团队摘取,其原因是这个账号是Kissy前端框架的组件库账号。遗憾的是,Kissy项目事实上已经死亡,其活跃期在2015年之前,在那个时代,Kissy团队可以说是国内最早利用GitHub的先驱之一,它们固然值得尊重,但阿里是不是应该对这些账号做一些清理呢?
项目整体star数知多少
我们将所有公司的项目Star数做了一个分布图,我们发现,腾讯开源项目虽然少,仅有130个,但是质量高,Star数100以上的项目有97个,占总数的三分之二以上;而阿里的项目虽多,Star数100以上的项目也只有237个。这说明腾讯在对待开源时更为谨慎,推出的项目都是对开发者有帮助的高质量项目。
这里面最极端的公司当属华为,它虽然拥有218个非fork的项目数,但Star数100以上的项目仅有14个。其中的原因,一方面是华为多以贡献者的身份参与第三方的底层项目,如Linux、Kubernetes等,这些在统计中未能体现;另一方面,也说明华为在自有开源项目做得还不够,其表现与华为IT巨头的身份并不匹配。
各个公司强在哪些领域
我们统计了各个公司Star数TOP10的项目,并对其按领域分类。我们发现:
- 大前端(前端和移动开发)项目最多,在阿里、百度、360、美团中前10个几乎都占了一半。腾讯是最夸张的,前10个项目里竟然有9个是大前端领域的。
- 百度有4个是AI领域项目,在众多公司中别树一帜,包括Paddle、Apollo等都比较受欢迎。
- 华为虽然项目少,但基本全是基础设施领域的项目,如ServiceComb、CarbonData、LiteOS等。
- 小米有几个操作系统相关的项目较受欢迎。
哪家公司开源最活跃
最近更新时间可以表明项目的活跃程度,如果项目在过去一年都没有更新,说明很可能已经不再维护。
这里,我们统计了最近更新时间在三个月内的所有项目,发现这些项目中阿里的项目数是最多的,一共有269个,占了48%,其次是百度,有98个,占了18%。
GitHub的issue区为开发者求助和协作交流提供了非常好的平台,而公司对项目的维护程度可以从公司解决掉的issue里窥知一二。
这里我们按公司分别统计了它们历史上解决的issue数(即close掉的issue数),其中阿里解决了超过6万个issue,比之后的公司解决的加起来还要多,说明阿里对开源项目还是挺上心的,并不是传闻中的“开源后不管”。
排名靠后的公司在这一方面还有待努力。
总结:中国公司开源现状
上面的数据给我们提供了一些有趣的视角来研究国内开源的现状,其中,一些数据验证了我们之前的看法,比如大部分公司的优秀开源项目都以前端居多,因为前端群体在社区更活跃,前端代码一般也不太涉密,因此公司在心态上更开放一些。
而另一方面,有些数据出乎我们的意料之外,比如阿里的数据几乎在所有类别里都名列第一,有时甚至是其它公司之和,并且在社区化/开放等方面也做的不错。
腾讯在自有开源项目上数量偏少,这也与公司过去并不重视开源有关,近年来,腾讯积极地靠近各个开源基金会,也开源了一些高质量项目,收获了开发者的口碑。
华为在自有开源方面显得有些保守,它的发力点更多在参与社区开源上,自家开源的很多项目多为操作系统和基础架构相关。
而我们还可以看到,个别人和团队对整个公司的开源能产生重大影响,比如阿里的玉伯不仅是Kissy的创始人,也带领团队开发和维护ant-design,撑起了阿里开源的大旗;百度有echarts团队;腾讯有Alloyteam;360有奇舞团等。
不好的方面则是,这些最优秀的中国互联网公司,在底层关键项目上和国外还是存在较大差距,如ant-design/element等,只是React、Vue等前端框架的组件库,是其生态系统的一部分,而自己作为生态核心的项目在国内极少,因此,国内开源只是看着热闹,在实际作用方面,和国外差距极大。
另外,国内公司对于GitHub还没有做到物尽其用,在开源治理上还有所欠缺,我们看到有大量的fork项目,有大量的空项目,这些项目应该第一时间清理。对于不再维护的项目,GitHub也提供了归档功能,国内公司应该善加利用。
注:
- 这里选取的账号为公司账号/项目账号,或部门/团队账号,非个人账号。
- 部分项目因捐献给Apache基金会有重合已剔除,并只保留Apache里的数据。
- 数据统计截至日期为2019年3月22日,其后数据未计入。
相关文章:

ReSharper 配置及用法
1:安装后,Resharper会用他自己的英文智能提示,替换掉 vs2010的智能提示,所以我们要换回到vs2010的智能提示 2:快捷键。是使用vs2010的快捷键还是使用 Resharper的快捷键呢?我是使用re的快捷键 3: Resharper安装后,会做…
Ubuntu14.04 LTS中升级gcc/g++版本到4.9.4的操作步骤
Ubuntu14.04 LTS中默认的gcc/g版本为4.8.4,如下图,在C11中增加了对正则表达式的支持,但是好像到gcc/g 4.9.2版本才会对正则表达式能很好的支持,这里介绍下Ubuntu14.04 LTS升级gcc/g版本到4.9.4的操作步骤: 1࿰…

华为全球最快AI训练集群Atlas 900诞生
作者 | 胡巍巍来源 | CSDN(ID:CSDNnews)你,和计算有什么关系?早上,你打开手机App,查看天气预报,和计算有关;中午,你打开支付宝人脸支付,买了份宫保…

rabbitmq可靠发送的自动重试机制 --转
原贴地址 https://www.jianshu.com/p/6579e48d18ae https://www.jianshu.com/p/4112d78a8753 git项目代码地址 https://github.com/littlersmall/rabbitmq-access 转载于:https://www.cnblogs.com/hmpcly/p/10641688.html

在Linux下如何安装配置SVN服务
2019独角兽企业重金招聘Python工程师标准>>> Linux下在阿里云上架一个svn centos上安装:yum install subversion 安装成功 键入命令 svnserve --version 有版本信息则进行下一步 1、新建版本库目录 mkdir -p /opt/svndata/repos 2、设置此目录为…

201671030129 周婷 《英文文本统计分析》结对项目报告
项目内容这个作业属于哪个课程软件工程这个作业的要求在哪里软件工程结对项目课程学习目标熟悉软件开发整体流程及结对编程,提升自身能力本次作业在哪个具体方面帮助我们实现目标体验组队编程,体验一个完整的工程任务一: 作业所点评博客GetHu…

C++/C++11中std::string用法汇总
C/C11中std::string是个模板类,它是一个标准库。使用string类型必须首先包含<string>头文件。作为标准库的一部分,string定义在命名空间std中。std::string是C中的字符串。字符串对象是一种特殊类型的容器,专门设计来操作字符序列。str…

你在付费听《说好不哭》,我在这里免费看直播还送书 | CSDN新书发布会
周一的时候,我拖着疲惫的身体回到家中,躺倒床上刷刷朋友圈,什么?周杰伦出新歌了?朋友圈都是在分享周杰伦的新歌《说好不哭》,作为周杰伦的粉丝,我赶紧打开手机上的QQ音乐,准备去听&a…

解决Mysql:unrecognized service错误的方法(CentOS)附:修改用户名密码
2019独角兽企业重金招聘Python工程师标准>>> service mysql start出错,mysql启动不了,解决mysql: unrecognized service错误的方法如下: [rootctohome.com ~]# service mysql startmysql: unrecognized service [rootctohome.co…
Caffe源码中Net文件分析
Caffe源码(caffe version commit: 09868ac , date: 2015.08.15)中有一些重要的头文件,这里介绍下include/caffe/net.hpp文件的内容:1. include文件:(1)、<caffe/blob.hpp>:此文件的介绍可以参考:http://blo…

满满干货的硬核技术沙龙,免费看直播还送书 | CSDN新书发布会
周一的时候,我拖着疲惫的身体回到家中,躺倒床上刷刷朋友圈,什么,周杰伦出新歌了?朋友圈都是在分享周杰伦的新歌《说好的不哭》,作为周杰伦的粉丝,我赶紧打开我手机上的QQ音乐,准备去…

【重磅上线】思维导图工具XMind:ZEN基础问题详解合集
XMind是XMind Ltd公司旗下一款出色的思维导图和头脑风暴软件。黑暗的UI设计、独特的ZEN模式、丰富的风格和主题、多分支的颜色等等功能会让你的工作更加便捷与高效。在视觉感官上也会给你带来最佳的体验感。 对于初学者来说,肯定会遇到各种各样的问题,有…

Linux内置的审计跟踪工具:last命令
这个命令是last。它对于追踪非常有用。让我们来看一下last可以为你做些什么。last命令的功能是什么last显示的是自/var/log/wtmp文件创建起所有登录(和登出)的用户。这个文件是二进制文件,它不能被文本编辑器浏览,比如vi、Joe或者其他软件。这是非常有用…

C++/C++11中std::set用法汇总
一个容器就是一些特定类型对象的集合。顺序容器(sequential container)为程序员提供了控制元素存储和访问顺序的能力。这种顺序不依赖于元素的值,而是与元素加入容器时的位置相对应。与之相对的,有序和无序关联容器,则根据关键字的值来存储元…

值得收藏!基于激光雷达数据的深度学习目标检测方法大合集(下)
作者 | 黄浴来源 | 转载自知乎专栏自动驾驶的挑战和发展【导读】在近日发布的《值得收藏!基于激光雷达数据的深度学习目标检测方法大合集(上)》一文中,作者介绍了一部分各大公司和机构基于激光雷达的目标检测所做的工作࿰…

java B2B2C源码电子商务平台 -commonservice-config配置服务搭建
2019独角兽企业重金招聘Python工程师标准>>> Spring Cloud Config为分布式系统中的外部配置提供服务器和客户端支持。使用Config Server,您可以在所有环境中管理应用程序的外部属性。客户端和服务器上的概念映射与Spring Environment和PropertySource抽象…

Topshelf:一款非常好用的 Windows 服务开发框架
背景 多数系统都会涉及到“后台服务”的开发,一般是为了调度一些自动执行的任务或从队列中消费一些消息,开发 windows service 有一点不爽的是:调试麻烦,当然你还需要知道 windows service 相关的一些开发知识(也不难&…

C++中nothrow的介绍及使用
在C中,使用malloc等分配内存的函数时,一定要检查其返回值是否为”空指针”,并以此作为检查内存操作是否成功的依据,这种Test-for-NULL代码形式是一种良好的编程习惯,也是编写可靠程序所必需的。在C中new在申请内存失败…

你猜猜typeof (typeof 1) 会返回什么值(类型)?!
typeof typeof操作符返回一个字符串,表示未经计算的操作数的类型。 语法: var num a; console.log(typeof (num)); 或console.log(typeof num) 复制代码typeof 可以返回的类型为:number、string、boolean、undefined、null、object、functi…

阿里云智能运维的自动化三剑客
整理 | 王银出品 | AI科技大本营(ID:rgznai100)近日,2019 AI开发者大会在北京举行。会上,近百位中美顶尖AI专家、知名企业代表以及千余名AI开发者进行技术解读和产业论证。而在AIDevOps论坛上,阿里巴巴高级技术专家滕圣…

Sublime Text2.0.2注册码
直接输入注册码就可以了 ----- BEGIN LICENSE ----- Andrew Weber Single User License EA7E-855605 813A03DD 5E4AD9E6 6C0EEB94 BC99798F 942194A6 02396E98 E62C9979 4BB979FE 91424C9D A45400BF F6747D88 2FB88078 90F5CC94 1CDC92DC 8457107A F151657B 1D22E383 A997F016 …
Caffe源码中Solver文件分析
Caffe源码(caffe version commit: 09868ac , date: 2015.08.15)中有一些重要的头文件,这里介绍下include/caffe/solver.hpp文件的内容:1. include文件: <caffe/solver.hpp>:此文件的介绍可以参考: http://b…

百度大脑金秋九月CV盛典,人脸识别新产品及伙伴计划发布会压轴开启
提起人脸识别你最先想到的是什么?是告别排队,刷脸就能支付的超市;还是告别黄牛,刷脸就能自助挂号建档的医院?其实,“刷脸”的时代早已到来,并且人脸识别技术的发展已经超越你的想象,…

BIML 101 - ETL数据清洗 系列 - BIML 快速入门教程 - 序
BIML 101 - BIML 快速入门教程 做大数据的项目,最花时间的就是数据清洗。 没有一个相对可靠的数据,数据分析就是无木之舟,无水之源。 如果你已经进了ETL这个坑,而且预算有限,并且有大量的活要做; 时间紧&am…

ADO数据库操作
void CSjtestDlg::OnBnClickedButtonAdd() {// TODO: 在此添加控件通知处理程序代码this->ShowWindow(SW_HIDE);DigAdd dig ;dig.DoModal() ;this->ShowWindow(SW_SHOW);m_Grid.DeleteAllItems() ;ADOConn m_Adoconn ;m_Adoconn.OnInitADOConn() ;CString sql ;sql.Forma…
C++中try/catch/throw的使用
C异常是指在程序运行时发生的反常行为,这些行为超出了函数正常功能的范围。当程序的某部分检测到一个它无法处理的问题时,需要用到异常处理。异常提供了一种转移程序控制权的方式。C异常处理涉及到三个关键字:try、catch、throw。 在C语言中…

掌握这些步骤,机器学习模型问题药到病除
作者 | Cecelia Shao编译 | ronghuaiyang来源 | AI公园(ID:AI_Paradise)【导读】这篇文章提供了切实可行的步骤来识别和修复机器学习模型的训练、泛化和优化问题。众所周知,调试机器学习代码非常困难。即使对于简单的前馈神经网络也是这样&am…

How to list/dump dm thin pool metadata device?
2019独角兽企业重金招聘Python工程师标准>>> See: How to create metadata-snap for thin tools using? I dont think LVM provides any support for metadata snapshots so you will need to drive this process through dmsetup. The kernel interface is descri…

Linux基础(二)--基础的命令ls和date的详细用法
本文中主要介绍了linu系统下一些基础命令的用法,重点介绍了ls和date的用法。1.basename:作用:返回一个字符串参数的基本文件名称。用法:basename PATH例如:basename /usr/share/doc 返回结果为doc2.dirname:作用:返回一…
Caffe中对MNIST执行train操作执行流程解析
之前在 http://blog.csdn.net/fengbingchun/article/details/49849225 中简单介绍过使用Caffe train MNIST的文章,当时只是仿照caffe中的example实现了下,下面说一下执行流程,并精简代码到仅有10余行:1. 先注册所有层&…