Windows Server 20H1 Getting Smaller Containers and Faster PowerShell
Microsoft is promising to deliver a smaller container size and improved PowerShell performance with its next release of Windows Server.
The next Windows Server release, dubbed "20H1" for its release in the first half of 2020, is expected to have a container base image size that will be 40 percent smaller than the container base image size of Windows Server version 1903 (released back in May). In addition, Windows PowerShell will be 30 percent faster with that release, according to a Tuesday Windows Server team announcement.
"This [reduced container size] should be a big win for scaling applications in production, CI/CD [continuous integration/continuous development], and any other workflow that benefits from faster startup or pulls uncached images," the announcement explained.
Available for Insiders
The reduced container size is already apparent for Windows Server Core Insider testers. They can currently get the smaller container image from the Docker Hub Windows Server Core Insider page.
Windows Server 20H1 bits are said to be pretty much baked already, but are expected to arrive as a polished channel release, as usual, sometime in the spring (March/April) of 2020. This notion comes from press accounts like this one, which credits an account by veteran Microsoft reporter Mary Jo Foley. According to Foley's unnamed sources, Microsoft has been working to align its Windows releases with its Azure releases, which accounts for why its Windows bits are getting finalized earlier. There's apparently been no public explanation to that effect from Microsoft, though.
Technical Aspects and Guidance
Microsoft produced a smaller container base image when it tried to streamline the performance of ".NET pre-compiled native images generated by the Native Image Generator tool (Ngen.exe)" for containers. In a nutshell, the .NET Framework doesn't play well with Docker layers. A deep elaboration on this technical point can be found in this .NET blog post by Richard Lander, a program manager on the .NET team.
How Microsoft's improvements will affect organizations will somewhat depend on whether they are using the .NET Framework with Windows containers, or if they are using .NET Core. To that end, Lander offered some "forward-looking guidance" for when Windows Server 20H1 arrives, as follows:
Starting with the next version of Windows Server, we have the following guidance for Windows container users:
- If you are using .NET Framework applications with Windows containers, including Windows PowerShell, use a .NET Framework image.
- If you are not using .NET, use the Windows Server Core base image, or another image derived from it.
- If you need better startup performance than the .NET Framework runtime image has to offer, we recommend creating your own images with your own profile of NGEN images. This is considered a supported scenario, and doesn't disqualify you from getting support from Microsoft.
The PowerShell speed improvement will show up for organizations using Windows containers on Windows Server 20H1, and they should use the .NET Framework-based images. Here's how Joey Aiello, a senior program manager at Microsoft, explained it in a PowerShell team post:
If you depend on Windows Server container images for usage of Windows PowerShell, and you value performance, you should switch from the windows/servercore images to the dotnet/framework/runtime images. The latter are specifically optimized for .NET Framework workloads like Windows PowerShell.
However, organizations that are already using PowerShell Core should continue to use Windows Server Core images. They'll automatically get the smaller container image sizes when Windows Server 20H1 arrives, Aiello explained.
Microsoft released .NET Core 3.1 earlier this month, which coexists with .NET Framework, although Microsoft is aiming toward creating a unified platform to be called ".NET 5," which is expected to appear in Nov. 2020.
PowerShell is also getting unified as "PowerShell 7." It reached the preview 6 stage last month, with "general availability" commercial release expected in January, according to a Nov. 21 PowerShell blog post. A "release candidate" version is expected this month. PowerShell 7 is aligned with .NET Core 3.1. Microsoft has been working to upgrade the modules in PowerShell 7 with the aim of supporting PowerShell Core 6.x and most of Windows PowerShell 5.1.
During a Nov. 6 Ignite session, Aiello said that PowerShell 7 had 85 percent module compatibility with Windows PowerShell. Microsoft is also planning to include desired state configuration, group policy and secrets management support in PowerShell 7, as well as a new error viewer via a "Get-Error" cmdlet, Aiello said.
Kurt Mackie is senior news producer for 1105 Media's Converge360 group.