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:
- .NET Core 5 (corefx) - foundational libraries that make up the .NET Core development stack;
- .NET Core 5 buildtools - Build tools that are necessary for building the .NET Core project;
- .NET Compiler Platform (Roslyn) - open-source C# and Visual Basic compilers with rich code analysis APIs;
- EntityFramework - Microsoft's recommended data access technology for new applications in .NET;
- ASP.NET vNext Home - The Home repository is the starting point for people to learn about ASP.NET vNext;
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.