微软已经开源 .NET framework 的核心部分一年多了,之前 Scott Hanselman 做了一个 非常好的源代码分析工具,基于微软的 Power BI 实现。本文也是通过这个分析工具得出的结论,.NET 框架核心部分开源一年多了:

自从微软开源之后,究竟社区参与了多少?

这里会以 3 个 .NET 生态系统中最主要的三个部分来说明,这些项目也是 .NET 基金会最活跃/最多 star 和最多 Fork 的项目

  • Roslyn – .NET 编译平台 (“Roslyn”) 提供开源 C# 和 Visual Basic 的编译器,支持富代码分析 APIs。
  • CoreCLR – .NET Core 运行时,名为 CoreCLR,包括一个基础库 mscorlib。CoreCLR 包括垃圾收集器,JIT 编译器,基础 .NET 数据类型和大量低级别类。
  • CoreFX –  .NET Core 函数库,包括集合,文件系统,工作台,XML,异步等等。

现有数据

GitHub 自身也有一些内置图表,以下就是整一年中的 Commits per Month:

Commits Per Month

还有一个很清晰的仪表盘可以查看 Monthly Pulse

github stats - monthly pulse

但是要回答那个问题还需要更多的数据,幸运的是,GitHub 还提供一个非常不错的 API,完美的结合了 Octokit.net library LINQPad,这样可以轻松的获取想要的数据。这里有个示例 LINQPad 脚本

但是,即使知道每个月的 “# of Issues” 或者 “Merged Pull Requests” 也没有用,因为不能知道是谁创建了 issue 和提交了 PR。但是 GitHub 还有一个功能,可以识别不同的用户。请看 Roslyn Issue #670,可以清楚的识别用户是项目所有者还是协作者,没有任何说明的就是社区参与人员。

owner collaborator or community

结果

数据已经到手,结果就在数据里面:

总 Issues 数 – By Submitter

Project Owner Collaborator Community Total
Roslyn 481 1867 1596 3944
CoreCLR 86 298 487 871
CoreFX 334 911 735 1980
Total 901 3076 2818 6795

在这里可以看出,在某些情况下,拥有者和协作者贡献占主导地位。例如:Roslyn 几乎 60% 的 issues 是拥有者和协作者开启的。但是在另一些方面,社区表现会很活跃,特别是在 CoreCLR,这个项目社区成员开启的 issue 比较多。还有一部分原因是不同的项目,CoreCLR 是 .NET 最明显的部分,包括微软的一些网络框架,.NET 开发者日常开发经常用到,所以社区会有比较多的建议,改进和修复,而且 CoreCLR 是比较有历史的一个库。相对来说,Roslyn 是一比较新的项目,平常比较少用,而且在编译器找错误也是比较困难的。

总合并 Merged Pull Requests – By Submitter

Project Owner Collaborator Community Total
Roslyn 465 2093 118 2676
CoreCLR 378 567 201 1146
CoreFX 516 1409 464 2389
Total 1359 4069 783 6211

但是当我们看合并的 Pull Requests 数,社区成员无疑是参与比较少的,只有大概 12%。但这并不意外,因为不是所有的 pull request 都被接受。首先,项目会使用他自己的机制,up for grabs,所以 12% 已经很不错了。

更新: “up for grabs” 并不是必要的。

每个月的 Issues 数 – By Submitter

Issues Per Month - By Submitter (Owner, Collaborator or Community)

每个月合并的 Pull Request – By Submitter

Merged Pull Requests Per Month - By Submitter (Owner, Collaborator or Community)

issue 标签 Top 20

最常使用的 issue 标签 TOP 20

Top 20 Issue Labels

阿里云-推广AD

这是根据结果的一些观察:

继续分析这个问题,但是主要关注的是 ASP.NET 生态圈下的项目:

  • MVC -构建动态 Web 网站的 模型-视图-控制器 框架,包括合并 MVC,Web API 和 Web Pages w/ Razor。
  • DNX – DNX (一个 .NET 执行环境) 包括启动和运行应用所需要的代码,包括编译系统,SDK 工具和原生 CLR hosts。
  • EntityFramework – 微软为 .NET 新应用推荐的数据访问技术
  • KestrelHttpServer – ASP.NET 5 基于 libuv 的 Web 服务器

方法论

在上一篇文章把 issues/PRs 创建者分为项目拥有者,协作者和社区成员。但是这会有一些质疑,有一些协作者并不是微软员工。

所以,决定分为以下两种角色:

  • 微软
  • 社区

这是可行的,因为所有微软员工都会在 GitHub 个人信息里面标记为微软员工,比如:

David Fowler Profile

结果

经过这个调查分析,“issues”超过 60% 是社区成员创建的,合并的“Pull Requests”有超过 30% 是社区成员完成的。但是,这个数据平均值已经被 EntityFramework 项目变得有点不真实,因为 EntityFramework 里面微软员工完成合并的 PRs 比社区成员的多太多,如果忽略这个项目,社区成员完成的 PRs 数可以达到 44%

Issues 创建 (2013 年 11 月 – 2015 年 12 月)

Project Microsoft Community Total
aspnet/MVC 716 1380 2096
aspnet/dnx 897 1206 2103
aspnet/EntityFramework 1066 1427 2493
aspnet/KestrelHttpServer 89 176 265
Total 2768 4189 6957

合并的 Pull Requests (2013 年 11 月 – 2015 年 12 月)

Project Microsoft Community Total
aspnet/MVC 385 228 613
aspnet/dnx 406 368 774
aspnet/EntityFramework 937 225 1162
aspnet/KestrelHttpServer 69 88 157
Total 1798 909 2706

注意:这里包括了 Kestrel Http Server 项目,因为这是非常有趣的一个事例,当前 #1 贡献者并不是微软员工,他是 Ben Adams,在改进内存使用做了很大的贡献。

每个月创建的 Issues – By Submitter (点击查看原图)

Issues Per Month - By Submitter (Microsoft or Community)

每个月合并的 Pull Request  – By Submitter (点击查看原图)

Merged Pull Requests Per Month - By Submitter (Microsoft or Community)

人们的贡献总和

不同角色 GitHub 用户对每个项目的总贡献程度,issue 创建和 PR 合并:

Project Microsoft Community Total
aspnet/MVC 39 395 434
aspnet/dnx 46 421 467
aspnet/EntityFramework 31 570 601
aspnet/KestrelHttpServer 22 95 117
Total 138 1481 1619

FSharp

Isaac Abraham 指出了之前那篇文章的一些问题:

.NET 在一年之间开源的部分不仅仅是这么多,还有  F# 编译器和 FSharp.Core。

为了确认这个,大概浏览了一下 FSharp 库:

就像 Isaac 解释的,他们的关系是:

… visualfsharp 是微软的库 Visual F#,另一个是社区所有。前者是直接集成到 Visual Studio 的 Visual F# 工具链;后者是类似 Xamarin 的工具。这里有一个 (过时) 关系解释图,其他内容请看 http://fsharp.github.io/

FSharp – Issues 创建数 (2010 年 12 月 – 2015 年 12 月)

Project Microsoft Community Total
fsharp/fsharp 9 312 321
microsoft/visualfsharp 161 367 528
Total 170 679 849

FSharp – 合并的 Pull Requests (2011 年 5 月 – 2015 年 12 月)

Project Microsoft Community Total
fsharp/fsharp 27 134 161
microsoft/visualfsharp 36 33 69
Total 63 167 230

总结

社区越来越多的响应会促使微软开源更多的项目代码。