What is .NET Core? Birth of the .NET Framework

What is .NET Core? Released in 2001, the .NET framework made it easier for developers to create applications on the internet. However, the need for faster and more simple deployment (among others) drove the need to develop a more modular system. Its .NET Core, released in June 2016, is a modular and smaller implementation of .NET that is designed to be cross-platform and open source, and it’s optimized for cloud-specific workloads. In this post, we’ll look at the evolution of the .NET framework and family and the developments that have paved the way for .NET Core.

What is .NET Core? Birth of the .NET Framework

To answer the question: What is .NET Core? we need to go back to 1996. If we dial back some 20 years to that year 1996, here’s what was happening in tech. Java had just been announced a few months before. The internet was five years old. With initial server side development and active pages with CGI, JavaScript was experimenting what dynamic pages on the client meant. It was also the time of Intel 486 processor-based PCs with 4Mb of RAM and 400Mb in the hard drive.

At the time, Microsoft was just starting the first browser war on the Windows desktop, Apple was waiting for the return of Steve Jobs and Linux, like the web, was just five years old. Microsoft was focused on a developer experience based mostly on Visual Basic 6.0, and was looking for the successor of COM technology. They also purchased a Java Virtual Machine from a little company called Colusa in order to have a technology that could keep up with Java’s promising features.

In 2001, Microsoft released the .NET Framework in version 1.0. It served as a framework for using multiple languages, from legacy Visual Basic to the new (at the time) C#, to develop on mainly two application models: desktop and web. These applications implemented the “drag & drop” development philosophy that was desirable at the time.
dotnet010001
Since then, the .NET Framework has evolved and grown, and many new versions have been released. By 2012, it was time for something a little more innovative.

What is .NET Core? Meeting future requirements

Since the .NET Framework was released, a lot of things have happened in the IT world that have shaped the need for a new development framework.
dotnet010002

  • The Microsoft ecosystem. The Windows family of operating systems has it market share, most notably in the enterprise market. However, internet companies are born with Linux, and for the desktop, MacOS is adopted for its simplicity. Microsoft is a developer’s company and it wants to bring its tools to other platforms.
  • Open Source. These days, requirements, experience, comparison, and inspiration all come from the community. The community of users and developers make an important contribution of feedback in terms of ideas and for code.
  • Mono. The first open source implementation of the standard Common Language Infrastructure specifications – ECMA – and ISO has become a common framework for some important application models such as Unity and Xamarin.
  • New Architecture. Intel x64 architecture dominates the cloud, server, and desktop market. With the advent of smartphones and tablets, ARM architecture has become dominant with millions of processors and devices sold. The Internet of Things event has increased the phenomenon by putting ARM processors on many connected devices, connecting billions of devices to the Internet.
  • Languages and Tools. In recent years, new or revamped languages have inspired new ways to code or to manage coding. First and foremost, the JavaScript ecosystem that started as a little language written more than 20 years ago and used to animate HTML pages has become one of the most widely adopted languages worldwide. All the tools that have been born around it (NPM, V8, Node.js) have become the de-facto standard in writing server applications.
  • New deployment models. Twenty years ago, we were investing in statically and strongly typed, object-oriented languages to guarantee code and application quality. This is no longer valid, as applications have increased their complexity. Today, we talk about Application Lifecycle Management as a guarantee for code quality. Source Code Management, Continuous Integration, Continuous Delivery, Automated testing, Containerization, Docker, and Microservices are all first requirements when developing a solution. Therefore, we need a tool that can simplify this approach.
  • Command Line. As its name implies, Windows has always been a graphical user interface for simplifying the approach to ordinary tasks that should be executed quickly and easily. Unix and Linux have always inspired the adoption of the command line as the most powerful and flexible way to handle DevOps tasks.
  • Breaking changes. Microsoft is experienced in supporting retro-compatibility with legacy applications. However, legacy can prevent pushing performance and new functionalities to extremes. This is what we need today.
  • Cloud. For us at Cloud Academy, the most inspiring scenario is the possibility of developing services to be executed in the cloud. The cloud brings all these topics together: Performance, portability, openness, architectures, languages, operations. For Microsoft, the cloud represents the center of its new strategy for being a cloud-first company.

A new member of the .NET Family

.NET Core means many things. .NET Full (and to be more precise, the current version that is .NET 2015, or 4.6.2) is Windows specific, and only a subset of it is portable. In this way, “core” emphasizes what is core and portable between the platforms.

“Core” needed to be different from .NET so that it could meet the needs of different platforms. There are some breaking changes that do not allow bringing code from .NET without modifications. And, there are possibilities that you can’t go back. And, we can’t bring a legacy Windows concept on Linux or Mac.

As a member of the .NET family, .NET Core can also embrace Mono, as Microsoft has acquired Xamarin. It is quite unlikely that Microsoft would move that code base from Mono to .NET.

What is .NET core and what does it mean to be part of the .NET family?

Being a .NET Framework means implementing:

  • Common Language Runtime (CLR): Services common for all language implementers (Type System, language features like inheritance, generics, interfaces, and overloading for object-oriented programming). Also, Async Programming, Threading, Structured Exception Handling, Attributes, Garbage Collection, Delegates).
  • Intermediate Language (IL): The generated code from each language compiler.
  • Common Language Specifications (CLS): Rules for interoperability among languages.
  • Base Class Library: A set of types (System.Object, System.Int32, System.String, System.IO.*, …) common to the .NET family.
  • Framework: The implementation of all of these elements.

.NET Core is another .NET framework with other members like .NET 2015 and Mono with Xamarin (4.6.1.5).
dotnet010003
So, what is .NET Core? It’s a modular and smaller implementation of .NET that is designed to be cross-platform and open source to meet the next 10 years of software development. It is optimized for cloud-specific workloads and implements these specific application models:

  • Console applications (worker roles)
  • NET Core (web roles)

There is also a Universal Windows Platform for store applications and devices. This scenario is still under development and we’ll see its potential in the near future.

.NET Standard

One issue that .NET Core is trying to solve is libraries. The three mentioned stacks are three separate stacks, which creates several problems:

  • The two new implementations are codebase fork.
  • If a new implementation is needed, you would most likely need to reimplement them on each platform.
  • With different ship cycles (e.g., Windows for .NET Framework) they will align at different times.

There are also issues for developers:

  • Key APIs are not present on all platforms.
  • Different implementations on each platform.
  • Need to target a small common denominator to reuse code.
  • Need to master 3 base class libraries.

To address these issues, Microsoft came up with a single library solution.
dotnet010004
Starting from the current experience with Portable Class Libraries which are used to solve portability issues among Windows, Silverlight, and Windows Phone apps, the common functionalities have been selected and classified. It has been implemented in a set of reference assemblies that are binary compatible with all platforms. This means that they need to be implemented once for the defined standard. The standard can evolve over time and different platforms can implement different standards.
dotnet010005
All reference libraries are downloadable as nugget packages, identified by a moniker that is an alias to the target platform and the version supported (ex. «netstandard1.6»). This mechanism can support either a standard scenario that is necessary for portability and vertical scenarios where we need to refer to a particular platform that has some specifically required functionalities. The referenced libraries are installed side by side into the application project so it can be compiled and packaged.

The application is complete, but it cannot be executed because the full implementation is missing.
dotnet010006
In fact, the full implementation is inside the framework that is installed on the specific machine where the application is run. Every released framework adheres to some platform and standard. In case of “netstandard1.x”, every framework that implements it can run any application built with the platform independently from the Operating System.
dotnet010007
Every supported platform is now listed and identified with a Runtime Identifier – RID. Inside the .NET Core project you can target specific platforms so that the build system can understand at compile time whether all functionalities are supported for the required platforms.

Breaking Changes and project migration

If you’re already a .NET developer, here is a list of major breaking changes that have been introduced. This is important to know if you’re evaluating costs for a possible migration:

  • No AppDomains (Infrastructure exists but it is no longer usable in terms of API. There is a new AppContext object and AssemblyLoadContext to dynamically load assemblies.)
  • No Remoting
  • No Binary Serialization
  • No Code Access Security (CAS)
  • No Global Assembly Cache
  • Anything Windows-specific (registry, ACLs, perf counters, etc.)
  • All assemblies are deployed privately
  • An assembly for each namespace (no more mscorelib.dll)

In .NET Core, the following application models are no longer supported:

  • WPF
  • Winforms
  • WebForms

To be continued…

In future posts, we will dive into more details (running the dotnet.exe CLI, introducing ASP.NET Core apps) to help you understand whether .NET Core is right for you.

For now, we can say that .NET Core has inherited all the good aspects that .NET has implemented in the last 20 years. And, it has been rewritten to be updated with all the modern challenges that the cloud now requires. You can implement applications in a mature, evolved, high-performance environment for statically typed, strongly typed languages like C#. With this language, we can target Windows and Linux for building cloud workloads, and we can develop on Windows, Linux, and Mac OS.

If you want to learn more about Microsoft’s cloud and technology offerings, visit our Training Library.

Avatar

Written by

Marco Parenzan

Marco Parenzan is a Research Lead for Microsoft Azure in Cloud Academy. He has been awarded three times as a Microsoft MVP on Microsoft Azure. He is a speaker in major community events in Italy about Azure and .NET development and he is a community lead for 1nn0va, an official Microsoft community in Pordenone, Italy. He has written a book on Azure in 2016. He loves IoT and retrogaming.


Related Posts

Alisha Reyes
Alisha Reyes
— April 9, 2020

New on Cloud Academy: AWS Solutions Architect – Associate Exam Prep, Azure Courses, Google Associate Cloud Engineer Exam Prep, Programming Labs, and Much More

Free content on Cloud Academy More and more customers are relying on our technology and content to keep upskilling their people in these months, and we are doing our best to keep supporting them. While the world fights the COVID-19 pandemic, we wanted to make a small contribution to he...

Read more
  • AWS
  • Azure
  • Google Cloud Platform
  • programming
Avatar
Logan Rakai
— April 7, 2020

How to Effectively Use Azure DevOps

Azure DevOps is a suite of services that collaborate on software development following DevOps principles. The services in Azure DevOps are: Azure Repos for hosting Git repositories for source control of your code Azure Boards for planning and tracking your work using proven agil...

Read more
  • Azure
  • DevOps
Alisha Reyes
Alisha Reyes
— March 17, 2020

Cloud Academy’s Blog Digest: How Do AWS Certifications Increase Your Employability, How to Become a Microsoft Certified Azure Data Engineer, and more

With everything going on right now, it's likely that the only thing you've been reading lately is related to the coronavirus pandemic. It's important to stay informed during these times, but it's also good to jump into something that can take your mind off of the current situation for j...

Read more
  • AWS
  • Azure
  • blog digest
  • Certifications
  • Cloud Academy
  • programming
  • Security
Avatar
Cloud Academy Team
— March 13, 2020

Which Certifications Should I Get?

As we mentioned in an earlier post, the old AWS slogan, “Cloud is the new normal” is indeed a reality today. Really, cloud has been the new normal for a while now and getting credentials has become an increasingly effective way to quickly showcase your abilities to recruiters and compan...

Read more
  • AWS
  • Azure
  • Certifications
  • Cloud Computing
  • Google Cloud Platform
Avatar
Guy Hummel
— March 10, 2020

How to Become a Microsoft Certified Azure Data Engineer

Data engineering is one of the most sought-after skills in the job market. According to a 2019 Dice.com report, there was an 88% year-over-year growth in job postings for data engineers, which was the highest growth rate among all technology jobs. If you want to become a data enginee...

Read more
  • Azure
  • Data Engineer
  • DP-200
  • DP-201
  • Microsoft
Alisha Reyes
Alisha Reyes
— March 7, 2020

New on Cloud Academy: Intro to GitOps; AWS Courses; Java, Python, Amazon Linux 2, Ubuntu, & Docker Playgrounds; and much more

New Lab Playgrounds This month, our Content Team released six new "playground labs." Our playground labs provide a safe and secure sandbox environment for you to explore your own ideas, follow along with Cloud Academy courses, or answer your own questions — all without having to instal...

Read more
  • AWS
  • Azure
  • gitops
  • Google Cloud Platform
  • lab playground
  • programming
Alisha Reyes
Alisha Reyes
— March 6, 2020

New on Cloud Academy: Intro to GitOps; AWS Courses; Java, Python, Amazon Linux 2, Ubuntu, & Docker Playgrounds; and much more

New Lab Playgrounds This month, our Content Team released six new "playground labs." Our playground labs provide a safe and secure sandbox environment for you to explore your own ideas, follow along with Cloud Academy courses, or answer your own questions — all without having to instal...

Read more
  • AWS
  • Azure
  • gitops
  • Google Cloud Platform
  • lab playground
  • programming
Avatar
Thomas Mitchell
— February 27, 2020

5 Steps to Vulnerability Management for Containers

Organizations have begun embracing containers due to their simplicity and to the fact that they allow for a faster development and deployment velocity. Although developers are thrilled with containers because they allow them to deliver solutions more quickly, security teams are sometime...

Read more
  • AZ-500
  • AZ-500 Exam
  • Azure
  • vulnerability management
Avatar
Chandan Patra
— February 21, 2020

Elasticsearch vs. CloudSearch: AWS Cloud Search Choices

Elasticsearch vs. CloudSearch: What's the main difference? Let's compare AWS-based cloud tools: Elasticsearch vs. CloudSearch. While both services use proven technologies, Elasticsearch is more popular, open source, and has a flexible API to use for customization; in comparison, CloudS...

Read more
  • AWS
  • Azure
  • cloudsearch
  • elasticsearch
Avatar
Andrew Larkin
— February 13, 2020

Cloud Academy Content Roadmap Updates

Welcome to our Q1 2020 roadmap. This is the content we plan to build over the next three months, between February 1 - and April 30, 2020. Let's look at some of our roadmap highlights. Atlassian Bamboo for CI/CD We had a lot of requests for practical guides on how to apply DevOps tool...

Read more
  • Artificial Intelligence
  • AWS
  • Azure
  • Docker
  • Google Cloud Platform
  • Kubernetes
  • Machine Learning
Alisha Reyes
Alisha Reyes
— February 7, 2020

New on Cloud Academy: Git Labs, CKA and CKAD Lab Challenges, AWS and Azure Learning Paths, AGILE, and Much More

We just kicked off our first Free Weekend of 2020. This means we've unlocked our Training Library for just 72 hours. Until Sunday at 11:59 pm (PST), you can get unlimited access to our industry-leading learning paths, courses, certification prep exams, and our most popular hands-on labs...

Read more
  • agile
  • AWS
  • Azure
  • Google Cloud Platform
  • Linux
  • OWASP
  • programming
  • red hat
  • scrum
Alisha Reyes
Alisha Reyes
— January 31, 2020

How to Unlock Complimentary Access to Cloud Academy

Are you looking to get trained or certified on AWS, Azure, Google Cloud Platform, DevOps, Cybersecurity, Information Security, Python, Java, or another technical skill? Then you'll want to mark your calendars. Starting Friday, February 7 at 12:00 a.m. PST (3:00 a.m. EST), Cloud Acade...

Read more
  • AWS
  • Azure
  • cloud academy content
  • complimentary access
  • GCP
  • on the house