Windows Server is, without a doubt, a comprehensive and complete platform, composed of hundreds of components supporting a wide array of roles. As we continued to develop the Windows feature set, we saw the need to streamline the footprint of Windows Server by enabling the removal of components that are not always necessary for all Server installations. We refactored the previously “monolithic” features of Windows Server into smaller components which allow us to offer system administrators more granular control of what components and features are installed. The introduction of Server Core as a common base component across all Windows Server editions and installation modes allows us to address many of the previous limitations of Server Core.
In Windows Server 8, users can transition between Server Core and Server Graphical Shell at any time, with a single command and a single reboot. Accordingly, we enabled the installation and removal of server GUI components from the command line, PowerShell, and within Server Manager. In addition, we created over 2,300 PowerShell cmdlets to enable command-line and remote management of all server roles. We also introduced enhancements to Server Core itself to increase application compatibility; for example, the full .NET Framework 4.5 is now available out of the box on Server Core.
Developing Windows Server 8
In Windows Server 8, the recommended application model is to run on Server Core using PowerShell for local management tasks and then deliver a rich GUI administration tool capable of running remotely on a Windows client.
Server applications using this model would:
1. Be capable of running in the Minimal Server Interface configuration to take advantage of the reduced resource utilization and servicing footprint.
2. Detect presence of available components and adapt the application behavior accordingly
3. Fail gracefully when required dependencies are not available
4. Support command line installation which does not require UI interaction
5. Support centralized or remote administration, where appropriate
The Minimal Server Interface
In addition to Server Core and Server Graphical Shell, we are introducing a new experience in Windows Server 8 called the Minimal Server Interface. The Minimal Server Interface enables most local GUI management tasks without requiring the full GUI Shell or Internet Explorer to be installed. It is an intermediate state that is installed by enabling the Graphical Management Tools and Infrastructure Windows feature and not enabling the Server Graphical Shell feature.
Technically, the Minimal Server Interface is a full Windows Server install excluding Internet Explorer, Windows shell components such as the desktop, Windows Explorer, Metro-style application support, multimedia support, and the Desktop Experience. It provides many of the benefits of Server Core (reduced footprint, attack service and serviceability) for those applications that can be made to work without IE or the Shell. We refactored all of the GUI management tools and frameworks (such as MMC.exe) into separate installable packages, and removed extra fonts and graphical resources.
In previous versions of Windows, developers could rely on a relatively large set of dependencies (usually the Windows Foundation) always being available. Because it is now possible to transition between Server Core and Server Graphical Shell, this is no longer the case.
For example, any applications with a dependency on Internet Explorer, the WebBrowser control, or the Microsoft HTML (MSHTML) Engine, can no longer assume those dependencies are available at all times. Furthermore, it is not sufficient to check for these dependencies at installation time, because they can be installed or removed at any time.
In many cases, the limitations of what is not installed (Minimal Server Interface or Server Graphical Shell) inherently prevent access to the parts of your application that are not supported. For example, MMC is not available on Server Core; thus, users wishing to use a snap-in associated with your service would be unable to do so because the *.msc extension is unregistered and MMC.exe itself is not installed. If the Minimal Server Interface or Full Server were later installed, MMC would be installed and registered and your snap-in would be immediately available for use, with no work required on the part of your application.
In other cases, some work is required on the part of the application developer to ensure a great experience on all Server Installation Levels. For example, a MMC snap-in that embeds a WebBrowser control will not work on the Minimal Server Interface, even though MMC is installed and available for use. The same snap-in, however, will work if Server Graphical Shell were installed. In this case, the snap-in should detect that Internet Explorer is not available and display an error message informing the user that a required component is missing. The error message could also provide the user with a hint that the dependency requirement may be met by installing the Server Graphical Shell. The same concept applies to components such as HTML Help and actions that launch URLs using ShellExecute.
When the graphical user interface is not available, command line installation and administration is the preferred solution for management. Consider deploying PowerShell cmdlets to enable the configuration and control of your application’s services. PowerShell cmdlets inherently support remote invocation, which makes it possible for administrators to configure services remotely and in bulk; this scenario is ideal in private cloud deployments.
The Minimal Server Interface fulfills two major purposes. It is a compatibility option for applications that are not ready to support our recommended application model but still want to benefit from some of the benefits of Server Core. Additionally, administrators who are not yet ready to move to remote or command-line based management can install the graphical management tools (the same ones they would otherwise install on a Windows client PC) alongside the Minimal Server Interface or Server Graphical Shell.
The best way to determine if your application is ready for the Minimal Server Interface is to test it. Try installing your application and check that all functionalities work as expected. Many applications will “just work” without any changes required on your part. Other times, adjustments may be required. Keep in mind that it is also possible for a user to install and configure your server application under the Server Graphical Shell, and then scale back to Server Core in production.
Windows Server 8 empowers administrators to deploy servers with “just enough” of content and capabilities to fulfill their server’s desired function. By increasing deployment agility and refactoring monolithic components – such as the Windows Foundation – into smaller, installable packages, we’re putting more power in the hands of system administrators than ever before.
Please keep in mind that this blog article is not meant to be a definitive – or even complete – guide to developing for Windows Server 8. For example, we are still in the process of drafting the official logo requirements and developer best practices. With that said, we wanted to give developers a sneak peek of what is already available in the Windows Server Developer Preview and empower developers to make design decisions now that will enable their applications to work seamlessly on all installation states of Windows Server.
David B. Cross
Director of Program Management