With the release last year of .NET 5, Microsoft switched its platform development away from the 20-year-old .NET Framework to the newer, cross-platform, open source .NET Core. The .NET Framework has moved into maintenance mode, while the new .NET completes its separation from Windows release cycles with a new cadence of annual releases.
In that new cadence, .NET 5 is what’s referred to as a current supported release, with 2021’s .NET 6 intended to be the first long-term support version of the new platform. That gives .NET 6 three years of support, as opposed to .NET 5’s support which ends sometime early in 2022, three months after the .NET 6 release. You can think of current releases as pioneering new features for developers who produce regular updates, mainly for consumer applications. Long-term support fits better with enterprise product lifecycles and support models.
Enterprise developers can best treat .NET 5 as their supported platform for application migration from the aging .NET Framework, with a year to begin those migrations and application rollouts. The arrival of .NET 6 towards the end of 2021 gives you a target to aim for, with more features and increased cross-platform support. Code built for .NET 5 will run on .NET 6, and you can update it to take advantage of the new release’s additional options and APIs.
The highlights of .NET 6 Preview 1
If you want to get started with .NET 6, the first preview release has now rolled out. It’s not complete, but it lets you experiment with building .NET 6 code alongside .NET 5. You can download the .NET 6 SDK and runtimes from Microsoft’s .NET site, ready for use with current preview builds of Visual Studio 2019 (Visual Studio 16.9 Preview 4 or later). Currently .NET 6 has language support for C# 9.0, F# 5.0, and Visual Basic 16.0, with more to come as the platform evolves throughout 2021. The download includes a runtime for new console and server apps, one for Windows desktop apps, and one for ASP.NET Core web apps. Like earlier releases, there’s support for Windows, Linux, and macOS, with ARM support on Windows and Linux alongside x64.
One of the most important parts of .NET 6 is its place in the .NET cross-platform and unification story, bringing Xamarin into the .NET fold as a key part of the framework rather than an alternate implementation. This will allow you to target macOS, Android, and iOS directly from the same set of code, using the under-development Multiplatform App UI (MAUI) framework. It’s a continuation of the process begun in .NET 5, but it goes a lot further than WebAssembly.
The .NET team is taking an approach that allows them to bring in lessons from other parts of the .NET ecosystem. One of these, Hot Reload, is a key element of the Xamarin development model. By allowing code changes to be reflected in running code, Xamarin developers can test code without having to run a complete build cycle. Although it’s not in the current preview, the team intends to bring a similar feature to all XAML and C# development. Treating all code as if it can be tested in a REPL promises to speed up development, especially for graphical elements of an app where design can become an interactive process.
Mixing WebAssembly and the desktop
An interesting new feature in .NET 6 is what the team is calling Blazor Desktop Applications. It’s an approach that mixes the WebAssembly work from .NET 5 with concepts from Electron. The result is a hybrid environment for rich desktop applications that will support Blazor controls from .NET code running in WebAssembly alongside hosted web content. Native application containers will link Blazor Desktop Applications to system-level services. Intriguingly Blazor Desktop Applications can also be hosted inside native .NET UIs, allowing you to surface elements from web apps inside desktop code.
Electron has proven itself to be a powerful way to bring web content to the desktop, so mixing it with high-performance WebAssembly code promises fast, portable desktop applications. The Uno Project’s work to bring WinUI 3 controls to WebAssembly should help deliver applications that can be developed natively while able to run as a Blazor Desktop Application everywhere the new runtime is supported, with a rich, modern set of controls.
More in .NET doesn’t mean larger applications or runtimes. Part of the .NET 6 migration is the start of a wider move to a more composable SDK. Instead of bundling everything into one SDK, the .Net SDK will become increasingly modular, only loading support for the workloads that are targeted by your code. Code running on Windows won’t have mobile support built in, and vice versa. Support for optional workloads like this should make it easier to manage dependencies in your code, as well as to deliver smaller apps to users.
With more interest in ARM support on Windows, .NET 6 will improve ARM64 support for key .NET technologies. With Windows Forms and WPF available on ARM Windows desktops, .NET 6 will help you port older .NET apps to ARM devices. The macOS version of .NET 6 will support Apple Silicon as well, avoiding Rosetta emulation.
Developing .NET in the open
One interesting aspect of the .NET 6 development process is how much is being done in the open. Microsoft has chosen to go beyond open development and is using .NET 6 to try out a new approach to open design. GitHub is being used to host what the development team describes as themes and epic issues. It’s a higher level in the design process than we’ve seen before, and one that makes it easier to understand the design choices that are being made. You can think of themes as a broader version of a user story—one that sets the direction for a product rather than for a feature.
For example, .NET 6’s themes include statements like “.NET appeals to net-new developers, students, and new technologists” and “.NET is recognized as a compelling framework for building cloud-native apps.” These are clearly aspirations, but they give enterprise developers and application users a feel for how well the development team is delivering on its goals. As the target audiences for .NET 6, we need to understand just what these themes imply, and then hold Microsoft and the .NET Foundation to their underlying promises. Having a predictable future with no surprises is important, as it helps architects define their application development strategy and be able to justify it to both engineering and business management.
There’s a lot to look forward to during the rest of 2021 as Microsoft continues to develop .NET 6 in public. This is only the first preview, and we can expect more features to arrive, along with language updates and new tools. With .NET 5 perhaps best seen as a transitional release, .NET 6 is likely to become the default .NET platform for the next couple of years. An early look at both platform and tools is welcome, but what’s even better is the road map and the themes that are being addressed. Now we get to see where we’re going and what the destination will be.