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.
War huh! what is it good for!
Excellent - I'd hoped my post would generate some interesting replies so thanks to all. Both interesting and stuff to learn from. However, with people's brains being a massive overhead I still hold that a server should be easy to install and configure as well as efficient - surely that should go hand in hand? I mean, often someone's paying for my time... Why write stuff like Plesk and WHM for ISP's otherwise if it was enough for Linux to be 'efficient'.
I think a more config-file oriented approach a la linux is good to get real granular control - something windows lacks (for now?) - but for quick common functions and flow/layout a GUI is indispensable and I'd argue better for not missing lines in config files sometimes. Not always NECESSARY, but useful at times.
Just because Idiots CAN install servers doesn't mean they should. You should meet the guy who just 'fixed' my car... Making it easier for professionals to get on with their job is no bad thing though.
Oh and tardigrade - fair point, but yes I can use the windows recovery console - I started out on DOS pre WIndows 3.0 :)
Absolutely, and I use the command line extensively in both Linux and Windows. But I'm the Windows specialist in our shop; if I'm not here then the Padawan has to do the best he can, and he can better find his way around using the GUIs. In an ideal world there are enough gurus on any technology to be there all the time, but this isn't an ideal world. GUIs are indeed more limiting, *but* they have the advantage that you can look around and see what options you have. In Command Line world, you have to already know that. Yes, I also know about man files and so on, but IME the old joke "Recursion: See 'Recursion'" was just made for Linux documentation ;)
The problem with having a server that even an idiot can install, is that you get servers installed by idiots.
I love well-designed GUIs, but for quick work I just want to copy out a few config files prepared earlier. When something bad happens to my server (disks have not the Life Eternal), or I want to make sure that Web Server 2 does exactly the same as Web Server 1, then a point-and-drool interface is the worst thing to have.