Thursday, November 13, 2014

Microsoft released .NET Core as open source. Find out what's inside!

Microsoft announced that .NET Core will be open source, including the runtime and the framework libraries.
There are several open source Microsoft .NET projects on GitHub and CodePlex:

So what's in this stuff, anyway? Let's dissect it using sloccount and cloc (count lines of code) and find out!

Grab the code for Roslyn:
$ GIT_CURL_VERBOSE=1 git clone -v https://git01.codeplex.com/roslyn

Cloning into 'roslyn'...
error: RPC failed; result=56, HTTP code = 200
GnuTLS recv error (-9): A TLS packet with unexpected length was received.

Whatever - no time to rebuild git against OpenSSL. Let's use a workaround:
$ mkdir roslyn; cd roslyn; git init
$ git remote add origin https://git01.codeplex.com/roslyn
$ git checkout -B master origin/master

Great. Now let's grab the .NET Core dev stack, libraries and build tools (github clones fine):
$ git clone https://github.com/dotnet/corefx.git
$ git clone https://github.com/dotnet/buildtools.git

Analyze the .NET Core 5 (corefx) and buildtools

$ cloc --xsl=1 --xml corefx/ buildtools/

Language Files Blank Comment Code
C# 565 17312 24750 104192
XML 2 0 7 4456
MSBuild scripts 15 54 90 1820
SKILL 2 11 0 52
Visual Basic 1 17 1 43
ASP.Net 6 0 0 32
C/C++ Header 1 5 1 7
DOS Batch 1 0 0 5
Total 593 17399 24849 110607


Analyze Roslyn
$ cloc --xsl=1 --xml roslyn/Src


Language Files Blank Comment Code
C# 4138 186147 131956 1173792
Visual Basic 1767 178277 140738 981301
XML 4 1870 1920 12451
MSBuild scripts 74 0 216 10066
C/C++ Header 15 1607 428 7361
SKILL 33 888 0 4954
C++ 12 322 186 1698
XSD 3 74 217 401
ASP.Net 44 4 0 351
XAML 3 3 1 128
DOS Batch 6 22 11 79
PowerShell 3 7 0 13
Total 6102 369221 275673 2192595


$ sloccount roslyn/Src

Total Physical Source Lines of Code (SLOC)                = 1,205,824
Development Effort Estimate, Person-Year (Person-Month) = 343.86 (4,126.29)
 (Basic COCOMO model, Person-Months = 2.4 * (KSLOC**1.05))
Schedule Estimate, Years (Months)                         = 4.93 (59.14)
 (Basic COCOMO model, Months = 2.5 * (person-months**0.38))
Estimated Average Number of Developers (Effort/Schedule)  = 69.78
Total Estimated Cost to Develop                           = $ 46,450,431
 (average salary = $56,286/year, overhead = 2.40).
So - what have we learned?
  • sloccount COCOMO estimates are just that - estimates;
  • We have over one million lines of C# to play around with;
  • Porting this thing will likely depend on Mono and will require quite a lot of work;
  • It still doesn't make up an ecosystem - there's work to be done here to turn this into a cross-platform .NET environment;
  • Microsoft is most likely pushing for the clouds - this open source seems consistent with their recent partnership with Docker.