Open Source .NET – 1 year later - Now with ASP.NET

In the previous post I looked at the community involvement in the year since Microsoft open-sourced large parts of the .NET framework.

As a follow-up I’m going to repeat that analysis, but this time focussing on the repositories that sit under the ASP.NET umbrella project:

  • MVC - Model view controller framework for building dynamic web sites with clean separation of concerns, including the merged MVC, Web API, and Web Pages w/ Razor.
  • DNX - The DNX (a .NET Execution Environment) contains the code required to bootstrap and run an application, including the compilation system, SDK tools, and the native CLR hosts.
  • EntityFramework - Microsoft’s recommended data access technology for new applications in .NET.
  • KestrelHttpServer - A web server for ASP.NET 5 based on libuv.

Methodology

In the first part I classified the Issues/PRs as Owner, Collaborator or Community. However this turned out to have some problems, as was pointed out to me in the comments. There are several people who are non Microsoft employees, but have been made “Collaborators” due to their extensive contributions to a particular repository, for instance @kangaroo and @benpye.

To address this, I decided to change to just the following 2 categories:

  • Microsoft
  • Community

This is possible because (almost) all Microsoft employees have indicated where they work on their GitHub profile, for instance:

David Fowler Profile

There are some notable exceptions, e.g. @shanselman clearly works at Microsoft, but it’s easy enough to allow for cases like this.

Results

So after all this analysis, what results did I get. Well overall, the Community involvement accounts for just over 60% over the “Issues Created” and 33% of the “Merged Pull Requests (PRs)”. However the amount of PRs is skewed by Entity Framework which has a much higher involvement from Microsoft employees, if this is ignored the Community proportion of PRs increases to 44%.

Issues Created (Nov 2013 - Dec 2015)

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

Merged Pull Requests (Nov 2013 - Dec 2015)

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

Note: I included the Kestrel Http Server because it is an interesting case. Currently the #1 contributor is not a Microsoft employee, it is Ben Adams, who is doing a great job of improving the memory usage and in the process helping Kestrel handle more and more requests per/second.

By looking at the results over time, you can see that there is a clear and sustained Community involvement (the lighter section of the bars) over the past 2 years (Nov 2013 - Dec 2015) and it doesn’t look like it’s going to stop.

Issues Per Month - By Submitter (click for full-size image)

Issues Per Month - By Submitter (Microsoft or Community)

In addition, whilst the Community involvement is easier to see with the Issues per/month, it is still visible in the Merged PRs and again it looks like it has being sustained over the 2 years.

Merged Pull Request Per Month - By Submitter (click for full-size image)

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

Total Number of People Contributing

It’s also interesting to look at the total number of different people who contributed to each project. By doing this you get a real sense of the size of the Community contribution, it’s not just a small amount of people doing a lot of work, it’s spread across a large amount of people.

This table shows the number of different GitHub users (per project) who opened an Issue or created a PR that was Merged:

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

In the comments of my first post, Isaac Abraham correctly pointed out:

parts of .NET have been open source for quite a bit more than a year – the F# compiler and FSharp.Core have been for quite a while now.

So, to address this, I will take a quick look at the main FSharp repositories:

As Isaac explained, their relationship is:

… visualfsharp is the Microsoft-owned repo Visual F#. The other is the community owned one. The former one feeds directly into tools like Visual F# tooling in Visual Studio etc.; the latter feeds into things like Xamarin etc. There’s a (slightly out of date) diagram that explains the relationship, and this is another useful resource http://fsharp.github.io/.

FSharp - Issues Created (Dec 2010 - Dec 2015)

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

FSharp - Merged Pull Requests (May 2011 - Dec 2015)

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

Conclusion

I think that it’s fair to say that the Community has responded to Microsoft making more and more of their code Open Source. There have been a significant amount of Community contributions across several projects, over a decent amount of time. Whilst you could argue that it took Microsoft a long time to open source their code, it seems that .NET developers are happy they have done it, as shown by a sizeable Community response.