Key Takeaways
- In late 2020, we can expect .NET 5, which will unify all .NETs.
- Performance is a priority when considering feature development.
- C# language advancements directly drive developer adoption.
- The open source community is changing the .NET ecosystem for the better.
This article is part of our .NET educational series which explores the benefits of the technology and how it can help not only traditional .NET developers but all technologists that need to bring robust, performant and economical solutions to market.
With the release of .NET Core 3.0, Microsoft has the next major version of the general purpose, modular, cross-platform and open source platform that was initially released in 2016. .NET Core was initially created to allow for the next generation of ASP.NET solutions but now drives and is the basis for many other scenarios including IoT, cloud and next generation mobile solutions. Version 3 adds a number of oft-requested features such as support for WinForms, WPF and Entity Framework 6.
In 2002, .NET was released. Over the next 12+ years, the .NET developer community patiently grew at a seemingly steady pace. Then, things started evolving rapidly. Microsoft anticipated the changing ecosystem and embraced the open-source development mindset, even acquiring GitHub. Seeing such changes taking place, .NET Framework developers braced themselves for the acceleration that was just getting started. Microsoft later acquired GitHub—the world’s leading software developer platform, and the .NET Framework developers of the world braced themselves for the acceleration.
In November 2014, .NET Core was born. It was the birth of a new revolutionary open-source era for the .NET ecosystem, but that wasn’t without distress. With it came a mass wave of confusion and frustration; developers were not ready for such a dramatic change. There was an attempt to offset this confusion by none other than the Product Manager of the .NET team, Immo Landwerth. He cleverly set out with the task of creating a video series to explain various details of .NET Standard, .NET Core, .NET Framework, and the new .NET ecosystem—often seated by a warm fire with a scotch in hand. Cozy as that seems, I think if a Microsoft PM is willing to scotch up by a fire to explain something, it’s an indicator of concern.
.NET Standard
Developers had to learn about .NET Standard, but years later .NET Standard still confused those who didn’t understand how to use it—they mistook it for a runtime when it was truly just a specification. As a target framework moniker (TFM), developers could author class libraries that targeted .NET Standard and made the package consumable by applications aimed at either .NET Core or .NET Framework. Think multi-targeting. While using compiler directives, package authors could write conditional code that would compile for .NET Core or .NET Framework. This standardization allows numerous implementations to meet the standard. With .NET Standard, versions align with .NET Core and .NET Framework implementations.
".NET Standard is a specification. It represents a set of APIs that all .NET platforms have to implement." -Immo Landwerth
Imagine the maintenance of this code; how does that make you feel—an interesting concept, but not without a bit of angst.
Unifying .NET Core and .NET Framework
Landwerth did a great job and the videos were extremely helpful, but now Microsoft is again pivoting. At the Microsoft Build 2019 conference, they are unifying .NET Core and .NET Framework with their announcement of .NET 5.
"There will be just one .NET going forward, and you will be able to use it to target Windows, Linux, macOS, iOS, Android, tvOS, watchOS, WebAssembly, and more." — Richard Lander
Yes, you read that correctly, but it bears repeating. .NET 5 aims to unify .NET Framework and .NET Core. There is still a lot of work to make this announcement a reality. It simply will not happen in 2019, so look for it in 2020. This should help the developer community tremendously as it simplifies things!
Microsoft is also leveraging the work from the Mono runtime and .NET Core. It might seem scary at first (again, as developers we need to embrace change not fear it), but rest assured knowing all of the work leading up to .NET 5 is built on the successes of .NET Core and Mono. The unification of .NET brings about a true sense of closure around the divided .NET ecosystem that plagued the developer community for the past several years. At this point in time, it’s unclear whether .NET Standard will even exist moving forward.
The Future
While it’s easy to get caught up in the past, and grumble over previous concerns and frustrations, we must move forward. Perhaps, arguably one of the most logical paths forward is to unify .NET Core and .NET Framework ... dare I say, "Let’s make .NET great again!" Maybe, I’ve gone too far, but let’s discuss the future. Where is Microsoft steering us?
Let’s take a step back for a moment and discuss where we’ve come from, before diving into where we’re going. Not all .NET developers are aware of how their code compiles, and what is truly produces.
"From the very beginning, .NET has relied on a just-in-time (JIT) compiler to translate Intermediate Language (IL) code to optimized machine code." — Richard Lander
Revisiting my earlier mention of the Mono project, we know there have been significant efforts around making an ahead-of-time (AOT) compilation for .NET. Mono has achieved with its industry-leading LLVM compiler infrastructure.
"The Mono AOT compiler enables .NET code to be built into a single native code executable that can run on a machine, much like C++ code." — Richard Lander
It is important to realize that no more .NET Framework features will be ported over after .NET 3.0. Again, the schedule to introduce .NET 5 is November 2020, so the timing is an important factor. While it seems like a long time from now, it will come quickly. You might be asking yourself, "What should we do in the meantime?" We’ll discuss that next.
Performance-Centric Innovation
The official recommendation from Microsoft for what you should be doing in the meantime—start new application development with .NET Core. It also would be a good idea to consider porting existing .NET Framework applications over to .NET Core if and where possible.
"New applications should be built on .NET Core. .NET Core is where future investments in .NET will happen."-Scott Hunter
Within the .NET ecosystem, .NET Core has been at the center of innovation. It is an alternative runtime to the .NET Framework and is a complete rewrite from the ground up; this allowed for aggressive innovations specific to performance. With each iteration of .NET Core and ASP.NET Core respectively, we have been able to expect consistency and improvements. "Reducing allocations" is one very common theme that’s emerged as a performance win. A new industry term was coined:
"Allocaty (adjective: al·lo·caty)—code that allocates more than necessary."-David Fowler
A significant number of pull requests continue to come in from the CoreCLR and CoreFX GitHub repositories that focus on improving performance by reducing allocations. These efforts have directly led to ASP.NET Core becoming one of the world’s fastest web servers, according to Tech Empower benchmarks. It is incredible to bear witness to such improvements, but they come from ] time and effort, as well as community involvement. Because Microsoft develops in the open, it enables the open-source developer community to contribute to these innovations. Performance improvements are not limited to reducing allocations; there are even lower-level gains by leveraging hardware intrinsics.
Evolving C#
It goes without saying that I’m a huge fan of the C# language, and .Net Core is built with C# and its performance focus. So, it might come as little surprise that I’d discuss it a bit here.
"As a theme that’s emerged within .NET Core, wherever possible, new performance-focused functionality should not only be exposed for public use, but also be used internally."-Stephen Toub
C# 7, its subsequent point releases, and now C# 8, have all pressed at the boundaries of the community’s tolerance for adoption. I’m a huge believer in the evolution of the language. I advocate for it, but at the same time, I empathize with developers who are confined by business limitations that prevent adoption. I can relate to such concerns; the question you need to ask yourself — "What’s the value proposition?" Certain new features are performance-focused, and those might be something to consider, based on your needs.
In a recent Twitter thread, Nick Craver was quoted, "C# 8 is dead to me," which roughly translates to "StackExchange will not be upgraded to C# 8 for many, many years." This is in part due to the fact that certain C# features rely on updates to the Common Language Runtime CLR. An example is the "default interface members" feature, which currently relies on .NET Core 3.0. The vast majority of the other features rely only on the C# compiler, which is ideal.
.NET Foundation
With all the .NET terms flying around the web, it felt appropriate to throw another one at you.
The .NET Foundation is an independent organization to foster open development and collaboration around the .NET ecosystem. It serves as a forum for the community and commercial developers alike, to broaden and strengthen the future of the .NET ecosystem, by promoting openness and community participation to encourage innovation.
Be sure to visit their site and get involved, or become a member. As a member, you’re eligible to vote on the board of directors—likewise, you’re eligible to become a candidate for the board of directors’ annual election. I was actually one of the 2019 board of director candidates. Here are the current standing board of directors.
I encourage you to sign up for their newsletter and stay informed.
A Meaningful Path Forward
The .NET ecosystem is an ever-shifting landscape, but I believe it is moving in a great direction. With open source and cross-platform as two key priorities, you’re in good hands. I’m personally invigorated by the realization that .NET Core and .NET Framework were a strain on the .NET ecosystem, resulting in the unification of .NET 5. While it was a painful few years, it also made such innovations possible. I encourage you to try porting over to .NET Core and starting any new work with .NET Core; it is the future. Despite the unknown .NET Standard direction, it is still suggested until further notice. I’m hopeful that whatever is decided will be low impact.
About the Author
David Pine is a Microsoft MVP, Google Developer Expert, and Content Developer working at Microsoft. David loves knowledge sharing with the technical community and speaks internationally at meetups, user groups, and technical conferences. David is passionate about sharing his thoughts through writing as well and actively maintains a blog at davidpine.net. David’s posts have been featured on ASP.NET, MSDN Web-Dev, MSDN .NET, Dot Net Curry and InfoQ. David loves contributing to open-source projects and StackOverflow.com as another means of giving back to the community. David sat on the technical board and served as one of the primary organizers of Cream City Code for nearly four years. When David isn’t interacting with a keyboard, you can find him spending time with his wife and their three sons, Lyric, Londyn, and Lennyx. Follow David on Twitter at @davidpine7.
This article is part of our .NET educational series which explores the benefits of the technology and how it can help not only traditional .NET developers but all technologists that need to bring robust, performant and economical solutions to market.
With the release of .NET Core 3.0, Microsoft has the next major version of the general purpose, modular, cross-platform and open source platform that was initially released in 2016. .NET Core was initially created to allow for the next generation of ASP.NET solutions but now drives and is the basis for many other scenarios including IoT, cloud and next generation mobile solutions. Version 3 adds a number of oft-requested features such as support for WinForms, WPF and Entity Framework 6.