第二篇 数据篇
2.1 指南针篇
指南针团队使用网络爬虫与 GitHub 数据 API 获取开源代码库的数据如原代码、项目信息、项目的静态信息如项目名称、起始日期等、与动态信息如fork数、客户给与的星数等众多项目相关的信息储存在本地数据结构中。第一阶段是处理原始数据与结构化的单元,生成如排序、标签等总和数据,如此可以透过如排名、统计等信息的提供。
使用机器学习、自然语言处理、数据分析等技术,综合所有数据提供如分类、搜索、推荐、评比等应用服务。
另外运用图像数据库的关联技术,对于高维度智能的连接和查询、以交互方式的可视化的提供更复杂的关联呈现。
开源@中国
如同世界各地的开发人员和各种企业,中国也经历了对于开源的无感、抵制、怀疑、观望、尝试、接受、以至于认可到支持的过程。中国在开源社区的贡献与影响力,无论在数量与品质、深度与广度都逐年的扩大与攀升。
Google 以创新的形象深植在开发人员的心中,对开源的贡献例如在大数据(Hadoop、HDFS 等)、深度学习(如 TensorFlow)都是有目共睹。Microsoft 作为开源的后起之秀,投入的资源和近期的声势都开始受到认可。在 2018 年收购 GitHub 也为其投入与支持开源的决心更为凸显。RedHat 在开源社区的历史悠久,贡献和积累丰富,长期在排行榜中居重要地位。BAT 与华为无论在资源的投入比例和开源的推动力度在近年有明显增加,所以在 GitHub 排名有上升的趋势。
以 Python 的开发者数量为例,2017 年中国已位居第 3 名,已经微幅领先如英国、德国、法国等欧洲传统 IT 强国。
以 repo 数量和开发者数量的总和评比,2018 年美国仍然继续庞大的优势领先群雄。德国英国占据二三名。中国作为新起之秀成为亚洲第一,全球第四。
2017 回顾 Forbes: 7 Technology Trends to dominate 2017
- IoT and Smart Home Tech
- AR and VR
- Machine Learning
- Automation
- Humanized Big Data
- Physical-Digital Integrations
- Everything On-Demand
这是 Forbes 杂志在 2017 从比较商业的角度预测信息技术的趋势。说明了比较广泛的趋势,每个项目都是信息技术非常巨大的课题,包含物联网、AR、机器学习、从人的角度看到的大数据,云计算的扩充,实体和数字化的集成。
Gartner 对 2017 信息技术的趋势预判:
- Trend No. 1: AI & Advanced Machine Learning
- Trend No. 2: Intelligent Apps
- Trend No. 3: Intelligent Things
- Trend No. 4: Virtual & Augmented Reality
- Trend No. 5: Digital Twin
- Trend No. 6: Blockchain
- Trend No. 7: Conversational Systems
Gatner 对于信息技术的预测比较深入,其中第一类是以智能为主的方向,包含人工智能特别在机器学习的范畴是值得关注。手机App和智能的结合,具有智能特性的物联网,也是令人深省的方向。
和 Forbes 同样预测 AR/VR 和实体和数字化的集成(Digital Twin)的趋势。区块链的议题开始被提出来成为关注的趋势。智能机器人(Bot)的应用以更加广泛的方式进入信息技术的领域。
2018 趋势
Gartner 对 2018 信息技术的趋势预判:
- Trend No. 1: AI Foundation
- Trend No. 2: Intelligent Apps and Analytics
- Trend No. 3: Intelligent Things
- Trend No. 4: Digital Twins
- Trend No. 5: Cloud to the Edge
- Trend No. 6: Conversational Platforms
- Trend No. 7: Immersive Experience
- Trend No. 8: Blockchain
Gartner 接续前一年的预测,把智能的范畴地位到以 AI 为基础的各种智能,不仅仅是机器学习的方向。还是继续关注手机 App 和智能的结合还有具有智能特性的物联网。
受到欧盟对数据存放的限制和用户对速度、费用的敏感以及物联网对带宽和计算的要求,云计算也演进到雾计算和边缘计算。
由 VR/AR 到更近一步的沉浸式体验。
区块链从 2017 年关注的趋势,到 2018 开始有比较深入的研究,并且投入实际的应用。
全球编程语言占比趋势排名
2017 年领先的语言基本的排名没有大的改变,但是比例却都缩小了,可能的原因是程序员在尝试新的语言和新的方向。这个尝试的结果在 2018 年反应出来的形式是由 2017 年排在第 4 位的 Python 升至第三呈现。其中的意义也反应出人工智能在 2018 更加获得程序员的认可与接受。传统的编程语言 C/C++ 已经在这样的趋势下退居第四,也象征传统的技术领域面临消退的现象。
GitHub 2017-2018:GitHub 2017-2018 statistics
GitHub 在 2008 正式运营到现今已经 10 年,大约在 2015 更加受到开发人员的青睐而快速的扩张。从 2017 到 2018 无论在人数和代码 repo 的数量,都有惊人的成长。因为这样的量级具有代表性,使得 GitHub 的各类数据成为开源的指标和参考。
2017 GitHub Keywords
根据 GitHub 关键字的显示,机器学习(Machine-learning)毫无悬念成为最大的关注热门词汇。游戏(Game)成为另一个热门词汇。
GitHub topic 是依据每个 repo 自主选择的标签(tag)归类在同一个主题下。这个排名方式是按照该主题所有 repo 的参与者授予的星数(star)总和以衡量受开发人员认可的程度。
- JavaScript 作为脚本语言,经常和其他编程语言如 Java 和 Python 搭配,本身也可以在 web 开发里面简单功能实现有其贡献,加上相对比较容易上手的优势,获得开发者的喜爱占据第一。
- React 与 Node.JS 作为 Web 开发框架排名二三。
- Python 有语法简洁高效的优势,并且在数据分析的支持有丰富的积累,在人工智能浪潮的推哄下,有排名上升的趋势来到成为编程语言的第一来到总体排名第六。
- 机器学习与深度学习作为热门的主题,经过不到 2 年的积累排名 12、13,而且没有消退的迹象,以后上升的机会非常大。
- Java 在后台数据处理、复杂功能实现,各种支持框架的品质和选择上有一定的积累和优势,仍然是受到开发者的欢迎,但是也处于持平稳定的状态。
许多人应该对 freeCodeCamp 这个排名第一的 repo 和其他如 awesome、Your-Don’t-Know-JS 等排在前面的 repo 感到陌生和不解。这些是以推广和服务某一理念的 repo,可能因为鼓励其用户点赞加星数,所以拥有总多的星数而排在高位。
虽然和一般开发者的对星数的给与的采取谨慎的方式不同,但是 GitHub 也提出 GitHub 不仅是代码库,也是一个意见交换的平台(Hub)的论点。也许这样的机制也是提倡开源、自由、创新的一种认可吧。
有趣的是,bootstrap 作为 topic 并没有排在前面,但是单就 repo 的角度,却有比其他 repo 高的星数而成为第二。Google 的 Tensorflow 作为深度学习的框架,以 repo 受喜爱的程度高居第五,在上升的速度和喜爱的程度实在令人惊讶。
排名第九的 JavaScript 实际是 javascrip style guide 的一个以 javascript 为开发主题的文档集成。不是 javascript 本身的开源项目。
所以从这个实际的排名为例,也显现出 GitHub 用星数为排名依据的方式,有其不符合开发人员认知的地方。
开源的现况
由以上 GitHub 的排名或是分类的结果,可以看出由用户自己给星数或是选择自订 tag 来进行分类的方式,虽然让用户有比较高的自由选择和评判方式,但是可能会有失公平的地方。
我们来看一下开源项目的理想的情况:
对于规范的开发项目,项目说明、文档、架构、代码都是非常清楚和有条理,所以用户也会有多的 star 和 fork 数。用户可以根据这些说明文档等文字,综合 star/fork 数判断是不是这个是要找的项目/代码。
用户可以参考项目中提供的范例甚至是最佳实践方式,使用这个开源项目的内容。
甚至用户还可以对这个开源项目作出贡献,增加修改开源代码。 使用这样的开源,省时又省心!
但是真实的情形,不一定是如想象的乐观:
- 但是开源里有更多的实验性质或是不完善的项目,因为没有受到关注,所以没有星数可以参考,使用者应该尝试使用还是选择其他星数高但是不一定符合自己需求的项目?
- 具有同类 tag 的项目可能多达数百个,用户应该如何选择?
- 许多的项目文档说明可能也不是非常齐全,用户如何选择?
- 开源项目可能对其他框架有依存的关系,如何知道去评量是否符合已有的框架或是依赖库,而不用加入更多依存的框架和依赖库而增加自己项目的复杂度和维护的风险?
- 项目是否有可能太常更新或是没有更新?
这些都是让评估使用开源项目会遇到的问题…
小结
信息技术在 2017 年有人工智能的议题开始发酵,许多的尝试、学习、研究造成新的关注和投入,由许多迹象显示 2017 年是一个变动(dynamic)时期。进入 2018,人工智能累积研究人员、开发人员、民间企业以至于国家级别的关注,在全球掀起人力与资源投入的风潮。这个现象可以从编程语言的排名在 2018 年 Python 升至第三、还有在 GitHub 包括 Tensorflow 等属于机器学习 / 深度学习的类别排名快速爬升的现象得到验证。
以 JavaScript/Node.js 等框架为代表的手机应用和互联网相关的开源,仍然是最大宗和热门的项目,基本上是以持平的状态维持在原有轨迹继续运作。不管从活跃度、贡献度、参与度和涵盖度都是领先的情形。由 Java 代表的传统开源项目有一定的积累,在以应用和基础框架项目的广度深度仍旧相当厚实,虽然成项目和贡献者长已经有饱和的现象。
先前新兴的热门技术如物联网、容器技术和区块链接续前面的动能仍然有创新的议题和项目出现,讨论和参与的热度还是比较高。相较于以往的热门议题如云计算和大数据有了相对成长缓慢的趋势,但是在于贡献者的参与比较稳定。
2.2 Grank 篇
本篇以 GitHub 数据为基础,按照设定方法进行采集、聚类和分析开源生态的状态。本篇作为《中国开源调查报告》的一部分,提供了另外一种从数据的视角来观察中国开源项目发展的方法。
Grank 是本报告制定的一个指数,用于综合评估一个开源项目、开源组织的健康程度。
Grank 模型介绍
我们认为,一个健康的开源项目应该体现为以下两个方面:
- 项目的活跃度趋势
- 项目的社区化(去中心化)程度
而这两个方面分别有多个因素组成:
活跃度和活跃度趋势
项目的活跃度,我们定义为项目的提交数、 拉取请求数和贡献者数(其它数据,如代码行数、文件数、issue 数、 fork 数、star 数,要么是权重相对低得多,要么是代表意义不够确定,此处忽略不计入模型)。
但是,对于不同的项目,其横向比较其活跃度,或有不同的活跃度形态,或不具备可比性。很难说一个项目比另外一个项目的提交数高,而拉取请求(PR)数低代表的确切含义。因此我们不认为对不同项目的这些数据进行绝对值的比较有太多的科学意义。
所以,我们认为一个项目本身的活跃度变化的趋势和幅度,会更有项目间比较的意义。
如果以三维空间来描述一个项目的活跃度,以提交数、拉取请求数、贡献者数为三维,可以确定在某个时间点某个项目的坐标,那么计算一段时间内,该坐标点的移动轨迹和速率,可以真实的反映该项目的活跃度趋势。
考虑到按周工作的作息时间的普遍影响,我们以一个工作周作为一个时间采样点,然后计算连续的几周内该坐标的移动速率。这反映了该项目的发展速度。
社区化程度
开源诞生于社区,繁荣于社区,根植于社区,虽然现在大型组织、商业公司也纷纷投身于开源生态,但是我们认为,开源项目的生命力仍然在于社区。我们并不否认机构、商业公司对开源的巨大贡献和影响力,但是如果一个开源项目变成了一家或几家大企业的私人游戏,其必然失去开源项目的生命力,它或许会在商业上取得成功,但是那个成功不是开源项目的成功模式。
因此,我们认为需要有一个评估开源项目的社区化(去中心化)程度的指标。项目(尤其是软件项目)的一个重要属性是开发人员的社区化身份,因此,我们以实际向项目贡献了代码的人员的社区化离散程度来评估项目的社区化程度。
每个参与项目开发的人员均有其身份属性,这个身份可能是企业雇佣身份,也可能是社区志愿者身份。我们通过对项目的提交中的提交者数据进行收集,然后根据开发人员的身份信息、邮件后缀等依优先级来判断其所属身份。然后对这些信息进行聚类,以一个离散评估模型来评估该数据集的离散程度。
虽然项目越中心化,其发展风险越高,但是,并不是社区化程度越高的项目就越健康,过于离散的项目也容易出现项目分裂、迭代缓慢等问题。这显然是存在一个适当的区域。
通过上述两个指数,我们可以对项目进行象限划分,以“项目活跃度”和“社区化程度”为两个象限轴。
Grank 项目
根据如上的方法论,我们(Linux 中国)发起了一个开源项目,用于提供分析工具,该工具由 Linux 中国核心成员 Bestony 创建,并贡献给社区,以期进一步完善。
项目地址: https://github.com/LCTT/Grank
数据采集方法
我们采用 GitHub 提供的 API 进行数据采集,数据采集范围为国内主要互联网公司在 GitHub 上的重要(活跃)项目(以下列表排名不分先后):
- 阿里巴巴(Ant Design、蚂蚁金服、Angular Developers、淘宝、天猫前端、eggjs)
- 华为(华为 Hadoop)
- 腾讯(AlloyTeam、tarscloud)
- 百度(FEX、EFE、前端)
- 饿了么(前端)
- 网易
- 搜狐
- 奇虎 360(360 企业安全)
- 唯品会
- 豆瓣
- 大众点评
- 小米
- 美团(美团点评)
- 美丽
- 豌豆荚
- 当当
- 有赞
- 深度
- DNSPod
- 新浪微博
- 今日头条
- 滴滴出行
- eBay
以及各个公司捐献给 Apache 基金会的项目:
- Apache carbondata(华为)
- Apache eagle(eBay)
- Apache kylin(eBay)
- Apache hawq(Pivotal)
- Apache rocketmq(阿里巴巴)
- incubator-dubbo(阿里巴巴)
- incubator-weex(阿里巴巴)
- incubator-doris(百度)
- incubator-echarts(百度)
- incubator-griffin(eBay)
- incubator-skywalking(个人)
根据对上述组织的近 500 个项目的数据采集和分析,我们得出了如下结果。
数据结果点评
通过对上述项目从 2017/10/1 至 2018/9/30 止的数据进行分析,其活跃度指标数据如下:
其中前五名的活跃度变化趋势为:
其中我们可以看到,阿里系项目独占鳌头,而这五个项目中有三个是前端项目。
这五个最活跃项目的社区化趋势为:
可以说,除了阿里巴巴的飞冰(ice)项目外,其它项目的社区参与程度都很高。
其中前五名的项目的各自情况如下:
1. 蚂蚁金服的 ant-design 前端项目
项目地址: https://github.com/ant-design/ant-design
这是一个“服务于企业级产品的设计体系”,是由蚂蚁金服体验技术部采用 React 封装的一套组件库。
从其最近一年的活跃度数据(红)来看,其一年之内就有 2298 个提交,最多的一周有 122 个提交;而在这一年内,新增了 350 位贡献者和 1057 个 PR。可以说是一个活跃度非常高的前端项目了,而且从趋势上,其近期的活跃度趋势还在增加。
不过,从其社区化指数(蓝)上看,其社区参与比例在近期略有下降,但是整体来说,依旧维持较高水平(95% 以上)。
2. 阿里巴巴的 pouch 容器引擎
项目地址:https://github.com/alibaba/pouch
这是阿里巴巴在云计算方面的一个重大项目,其对于阿里巴巴集团内部的容器化进程起到了极大的推动。
这个项目迄今也只有一年的发展历程,但是其活跃度从一开始就高居不下,甚至在 2018 年 8 月有个显著的活跃高峰。虽然其一年来只有几十位做出提交的贡献者,但是每周的提交数量、PR 数量都很稳定,说明项目的发展很健康。
比较有意思的是,这个项目的社区化程度比较高,也比较稳定,从其官网和 GitHub 主页上的文档和说明全是英文来看,其国际化推广的程度比较高。
3. 华为捐献给 Apache 基金会的 CarbonData 项目
项目地址:https://github.com/apache/CarbonData
Apache CarbonData 项目是一个索引列数据存储方案,可用于大数据平台(如 Apache Hadoop、 Apache Spark)的快速分析。
其项目的活跃度相当可观,社区化程度也能稳定在很高的程度上。这个项目是唯一进入前五的 Apache 基金会管理项目,也是华为所有项目中活跃度最高的项目。
4. 阿里巴巴的飞冰前端项目
项目地址: https://github.com/alibaba/ice
这又是阿里巴巴的一个项目,同样是前端项目,其“海量可复用物料,配套桌面工具极速构建前端应用”。
这个项目的出现也不久,还不到一年,其活跃度也相当可观,但是同样,随着项目的成熟,其社区参与度也一路走低极低水平。
5. 饿了么的前端项目 element
项目地址:https://github.com/elemefe/element
这个项目是饿了么前端部门“为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库”。
从该项目的活跃度来看,波动比较大,且近期有活跃度减低的趋势。而社区化程度则保持较高的程度。
在前五之外,我们要额外对第 6 名 Apache 孵化项目 skywalking 做一个说明:
6. 个人主导的 Apache 孵化项目 skywalking
项目地址:
https://github.com/apache/incubator-skywalking
这是国内唯一进入 Apache 基金会的由个人主导的开源项目。它是一个分布式跟踪系统和应用监测系统,主要用于微服务、容器环境的监测。
作为一个由个人主导的开源项目,而且是活跃于云原生领域的,能取得这样高的项目活跃度十分不易。
小结
从上述表格数据可以看到,阿里巴巴/蚂蚁金服在开源方面活跃度很高(前 50 名中,超过了一半)。从下图可以看出来,其整体的活跃度和社区化程度都不错。
另外,除了阿里巴巴、腾讯、百度、华为之外,有赞、饿了么、唯品会也有几个项目的活跃度很高,可见现在注重开源的互联网企业越来越多了。
而在上榜的项目当中,前端项目占据比较多,这可能与这种项目的迭代速度较快有关。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/linux/56347.html