Cut to the Web Server Core: Windows Server 2008
Apache not served
Review Windows Server 2008, due for its official launch today, is a major upgrade for Microsoft's server platform, the first for around five years. Requiring a graphical user interface (GUI) on a server operating system always seemed odd, even back in 1993 when Microsoft released Windows NT 3.1.
It has taken Microsoft until now to begin fixing the problem. Server 2008 comes with an installation option called Server Core, and although it is not quite GUI-free (Notepad and Regedit still run), it is command-line driven and lacks most of the baggage that previously came as standard. The snag with Server Core is that it is incomplete.
For example, you can install Microsoft's web server, Internet Information Services (IIS) 7.0, but you cannot install ASP.NET, PowerShell scripting, or SQL Server. PHP, on the other hand runs fine on Server Core. More about that in a moment.
To be precise, Microsoft has organized the capabilities of Windows Server into optional roles and features. There are 18 roles and 35 features available in our installation of Server 2008 Datacenter Edition. However, Server Core only supports eight roles, being essentially file and print, Active Directory and domain services, web server, and virtualization. There is also no way to upgrade a Server Core install to have full features, so it is only useful if you are sure from the outset what the box will need to do.
Beauty beats brains
Another sign of progress in separating Server 2008 from its desktop cousin Windows Vista is that "Desktop Experience" components like Windows Media Player and Desktop Themes are bundled into an optional feature that presumably few will install. This may be why Server 2008 feels snappier than Vista on the same hardware, even though both share the same core code.
Why can you not start with Server Core and build it up to the complete edition? "That's a beautiful design goal and our long-term ambition," according to Microsoft product manager Gareth Hall.
The problem is that Server 2008 is only partially componentized. It is not yet quite what it should be but Server Core is progress, being more lightweight and manageable. According to Microsoft, Server Core is preferable to a full install in scenarios where it will work, such as for Active Directory or virtualization. IIS has a powerful command-line tool called AppCmd that is ideal for Server Core. There are also numerous options for remote management, including Remote Desktop to the command line, Microsoft Management Console (MMC) snap-ins, Windows Management Instrumentation (WMI) scripts, and Windows Remote Shell.
Unfortunately for developers looking for an application server, Server Core is too limited.
That leads us on to IIS 7.0, a major upgrade. Like the open-source Apache web server, it is modular, so that you can install only those parts that are needed, and individual modules can in principle be replaced with custom versions. In addition, IIS 7.0 is more deeply integrated with .NET. In both IIS 6.0 and IIS 7.0, applications are isolated from one another though application pools, each of which can contain one or more applications.
IIS 7.0 has a new integrated application pool, which means the web server calls both native and managed modules in a single integrated pipeline. This is more efficient, and means that ASP.NET authentication applies to all content types, not just ASP.NET pages.
In previous versions, this was a huge annoyance and potential security hole. Developers had to jump through hoops to accomplish what should be simple tasks like protecting a ZIP file from unauthorized download, or use Windows authentication which is not always practical. The new pipeline means that you can use ASP.NET Forms Authentication for any content, even perhaps a PHP application. The old ISAPI application pool mode remains available for compatibility.
Another major change in IIS is the way it is configured. Most settings have been moved to the per-directory XML file called web.config. This uses inheritance, so for a particular site you can have default settings in a root web.config, and override this as needed in sub-directories. ASP.NET has always worked like this, but previously most other IIS settings could only be changed through IIS administration. This makes it easier to move applications, since they are configured in files that can simply be copied across, and makes life better for developers who only have file access to the web server, such as those using shared hosting. It is fascinating to see how Microsoft has retreated from the registry towards text configuration files, which is the Unix and Apache model.