Can you imagine that .NET has been around for 20 years? When we’ve realized that, we invited our colleague Veselin Dachev, a Senior Full-Stack .Net Engineer at the TPXimpact team, to make an expert overview of the .NET evolution, its current state, as well as its advantages and drawbacks. Read on.
It all started in the late 90s, when Microsoft started working on the .NET framework. The idea was to create a platform based on the so-called managed code. This code had to be executed under a runtime environment to improve the development experience and relieve engineers from handling security operations, active memory management and other low-level efforts.
What is the .NET Framework?
.NET is a software development framework – and an accompanying ecosystem of tools, languages, and runtimes – created by Microsoft to ease application development across various platforms (from desktops to mobile devices). Although, .NET was originally tied to Microsoft’s Windows operating system when it was launched, .NET applications can now be written for the web, MacOS, iOS, Android and Linux. What’s more, currently, .NET is a formal standard and is officially available as open source.
Microsoft describes .NET as “a consistent object-oriented programming environment, whether object code is stored and executed locally, executed locally but Internet-distributed, or executed remotely.”
How does the .NET Framework work?
Code that is written in any of the .NET languages is compiled to an intermediate bytecode language called the Common Intermediate Language (CIL). This code isn’t human-readable but can be ported across operating systems and platforms. The CIL is then compiled again by the Common Language Runtime (CLR). CLR implementations are platform-specific, and they compile CIL code into machine-readable code that can be executed on the platform of the moment. Different CLR versions support both just-in-time and ahead-of-time compilations.
In the process of creating local machine-readable code, the CLR also manages a lot of low-level application functionality, such as garbage collection and threading, that is crucial to app performance but often tedious for developers to deal with. Together, the CIL and the CLR make up the .NET Common Language Infrastructure (CLI, and yes, I know all these abbreviations are kind of confusing).
All of this should sound familiar to anyone who’s worked with the Java platform, as it follows the same basic paradigm – the large available class libraries, the intermediary bytecode and the platform-specific runtime that automates memory management. .NET was developed in the late ‘90s, during the initial heyday of Java, and was originally positioned as a competitor to the Java Enterprise Edition platform.
Most of the .NET development happens with C#, F#, and Visual Basic. All three saw great improvements within the .NET 6 release. C# 10 and F# 6 were introduced, both aiming at simplifying code and making it more performant.
The .NET Framework era
The first release of the .NET Framework in 2002 introduced C#, a language for writing managed code that had a design similar to C++. The framework itself was aimed at Windows-based computers and servers. It had WinForms, a GUI library for desktop applications; ASP.NET, a framework for Web; and ADO.NET for data access.
The .NET CORE era
In 2014, Microsoft announced a dramatic shift in the way .NET exists by presenting .NET Core, a new cross-platform, cloud-friendly and open-source version of the framework. .NET Core made it to a release in 2016, becoming the main technology to consider for new .NET projects. Gradually, Microsoft started porting existing services to work with Core.
.NET Framework vs. .NET Core
You’ll notice I’ve been using “.NET Framework” throughout this article to refer to the platform in general. Strictly speaking, that’s not correct. Microsoft uses that phrase to refer to their own longstanding implementation of .NET Standard, which exclusively focuses on Windows. There have historically been other implementations of .NET. One of the most famous is Mono, an open-source implementation first released in 2004 that made it possible to run .NET applications on Linux.
The third major .NET implementation from Microsoft is .NET Core, a cross-platform implementation of .NET Standard that was released as open-source in 2016. .NET Core was built fresh from the ground up and removed some of the cruft that had been accumulated in .NET Framework, though it also lacked the full range of features. Having multiple versions of the .NET Standard is understandably somewhat confusing.
The .NET 5 and .NET 6 era
In May 2019, the company announced the big release that would tie the ecosystem together and unify the three .NET implementations in the so-called .NET 5. In essence, it was set to be the next generation of .NET Core, with a lot of components from the .NET Framework and Xamarin rolled into it. The move aimed to simplify things for developers and focus Microsoft’s own efforts.
The successor to .NET Core 3.1 and .NET Framework 4.8, .NET 5 was finally introduced in November 2020. It has put an order into the fragmentation of the .NET world and provided a lot of features to build applications on Windows, Linux, macOS, iOS, watchOS, Android, tvOS, or using WebAssembly. The platform introduced new APIs, language features, and runtime capabilities. It also included ASP.NET Core, Xamarin, Entity Framework Core, WPF, WinForms, and ML.NET.
While .NET 5 has set the unification foundations, the newest .NET 6 version delivered the final parts of it in November 2021, with Visual Studio 2022 released the same day. This is a unified platform for building projects across cloud, browser, IoT, mobile, and desktop environments, enabling all to use the same .NET libraries, SDK, and runtime.
One of the most prominent .NET 6 features is .NET MAUI (Multi-platform App UI) which acts as the cross-platform framework for developing native desktop and mobile apps with C# and XAML.
Apart from being the final step of the unification, .NET 6 can boast of:
- Better performance with decreased project execution time, latency time, and memory use.
- APIs for HTTP/3, JSON processing, mathematics, and direct memory manipulation.
- Improved security with support for OpenSSL 3 and ChaCha20Poly1305 encryption scheme.
- Stable version and long-term support for 3 years.
.NET popularity and community
For those of you who are wondering just how popular .NET is, a large community of developers is the answer. Interestingly, it unites engineers from small, midsize, and enterprise-grade companies. This means that almost any issue can be resolved with the help of community members.
Since .NET Core is open source, its libraries, runtime, and compiler are available on GitHub and have many contributions. According to the Stack Overflow 2021 survey, ASP.NET took fifth place among the most popular web frameworks.
Source: Stack Overflow Survey 2021
At the same time, .NET Framework with .NET 5 and .NET Core placed first and second respectively as the most used frameworks beyond web development.
Source: Stack Overflow Survey 2021
Pros of .NET development
- Object-oriented software development model.
- Reliable and simple caching system, allowing keeping the data in a temporary storage place to call it faster when needed.
- Visual Studio IDE, that makes application development easier by providing all the tools needed to write and test software.
- Cross-platform design of .NET Core – an implementation that allows the code to run on macOS, Windows, and Linux.
- Flexible deployment and easy maintenance. .NET Core can be installed as a part of your application or require a separate installation.
- Universal .NET Standard. Since 2016, the .NET ecosystem has been enhanced with a large class library called .NET Standard. It’s based on the number of base class libraries for .NET Framework, .NET Core, and Xamarin.
- Automatic monitoring in ASP.NET
- Active Microsoft support
- Relatively easy migration from .NET 5 to .NET 6
- .NET popularity and community
Disadvantages of .NET development
- Limited Object-Relational Support. As we mentioned above, .NET uses the object-oriented programming (OOP) language model. This model is centered around objects rather than “actions” and data rather than logic. The support of data-oriented software application development in .NET Framework and Core are provided by the Entity Framework.
- Licensing cost. Major amount of the expenses is for Visual Studio IDE and other additional collaboration and quality assurance services that Microsoft offers to simplify your work.
- Gap between release and stability. The newly released products lack proper documentation, support, stability, and are prone to drastic changes.
- Memory leaks. The problem of memory leaks is not uncommon in any technology. Simply put, the framework doesn’t release the memory that it no longer needs.
- Bumpy transition to .NET Core. .NET Core is the next big step in Microsoft’s platform development. As always happens, the transition period may be long and difficult. The applications built with the old .NET Framework outnumber those with .NET Core. And it doesn’t necessarily mean that all of them will experience this transition. In corporate environments, the transition may not be prioritized as much. Nonetheless, these systems need support.
More about the author
Veselin Dachev (Ves) is a Full-stack web developer based in Sofia, Bulgaria. He has been building web products for the last 20 years, working on projects across various countries (Bulgaria, the UK and the Netherlands), companies (Sky, BBC, etc.) and industries. He is currently part of the TPXimpact team at Questers.
In his work, he had the pleasure to work and meet with amazing professionals, who gave him useful guidance throughout his career. He himself also strives to be a responsive and supportive colleague.
Are you a .NЕТ guru who seeks a new career challenge? Check out our current vacancies and make sure to apply. We’d love to chat about .NET and other topics with you as well.