中国互联网公司开源项目调研报告

news/2024/7/1 3:07:18

近年来,开源技术得到越来越多的重视,微软收购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也提供了归档功能,国内公司应该善加利用。

注:

  1. 这里选取的账号为公司账号/项目账号,或部门/团队账号,非个人账号。
  2. 部分项目因捐献给Apache基金会有重合已剔除,并只保留Apache里的数据。
  3. 数据统计截至日期为2019年3月22日,其后数据未计入。

http://lihuaxi.xjx100.cn/news/235890.html

相关文章

centos8编译openssl-1.0.2u、openssl-1.1.1k

目录 一、给openssl-1.0.2u打包rpm 二、编译安装openssl-1.1.1k 三、给openssl-1.1.1k打包rpm(不推荐!) 近日openssl爆出拒绝服务、证书绕过漏洞,CVE编号CVE-2021-3449、CVE-2021-3450。 解决方法: CentOS7默认ope…

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

【救援过程】升级openssl导致libcrypto.so.1.1动态库不可用

目录 一、故障重现 二、救援过程 一、故障重现 近日为了解决CVE-2021-3449: 拒绝服务漏洞、CVE-2021-3450: 证书校验漏洞,自己编译了openssl-1.1.1k。 亲测发现:只升级openssl的版本,动态库版本没有升级,系统可用。 升级openss…

201671030129 周婷 《英文文本统计分析》结对项目报告

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

Ansible01-Ansible基础和部署

目录 一、Ansible简介 二、安装部署Ansible 2.1、在控制节点安装ansible 2.2、对Linux和Unix受管节点要求 2.3、基于 Microsoft Windows 的受管主机 2.4、受管网络设备 三、Ansible配置文件 3.1、ansible.cfg配置文件推荐做法 3.2、ansible.cfg配置文件内容 四、Ansi…

循环获取结构体中的健名与值的实现

为什么80%的码农都做不了架构师&#xff1f;>>> type Person struct {Name stringAge int }func main() {a : &Person{"Name", 1}v : reflect.ValueOf(a).Elem() //a需要是引用k : v.Type()for i : 0; i < v.NumField(); i {key : k.Field(i)…

Ansible02-实施playbook

一、编写和运行playbook 1.1、编写playbook play 是针对清单中选定的主机运行的一组有序任务。playbook 是一个文本文件&#xff0c;其中包含由一个或多个按特定顺序运行的 play 组成的列表。 playbook 是以 YAML 格式编写的文本文件&#xff0c;通常使用扩展名 .yml 保存。…