Given the volume of entries in this category, I can't hope to cover all of them in any sort of detail, so instead I will concentrate on a select few in more detail. I've tried to pick a selection representing a range of styles and philosophies, weighted by their current popularity and importance in the development of windowing technologies. Many of the features explained along the way are found in other window managers, and each window manager's level of support for the GNOME and KDE environments is also discussed. I'll offer my apologies in advance to all those great window managers that haven't been mentioned in this article.
FVWM is one of the oldest window mangers that is still in widespread use and actively maintained. It dates back to around 1993 and was originally developed by Robert Nation, based on the then dominant TWM, which stands for either Tab Window Manager or Tom's Window Manager. The "VWM" in FVWM stands for Virtual Window Manager, as virtual desktop functionality had been added, but the meaning of the "F" has been lost in the mists of time -- see the FVWM FAQ for some possibilities.
The early days of FVWM development were exciting times. After being stuck with the bland and somewhat featureless TWM, the new appearance and functionality offered by the rapid stream of FVWM releases breathed new life into the X Window System, even on a monochrome X terminal. In more recent times, it has been overshadowed to some extent by newer window managers and the GNOME and KDE desktop environments, but it has stood the test of time well and remains a solid, popular, and feature-rich window manager. We will now examine a few of its many features in a little more detail.
In addition to the virtual desktop capability mentioned above, one of the main selling points of FVWM in the early days was its high speed and low memory consumption. Many years of feature adding can lead to bloated software, and FVWM has tried to tackle this by providing some of the extra functionality as separate modules which are only loaded if required. Also, two different releases were maintained for some time: FVWM 1.xx (ending with 1.24r) was the streamlined version for low resource environments, and FVWM 2.xx (2.4.13 is the latest stable release at the time I write this) is the slightly larger but more capable version. The 1.xx versions are no longer supported or distributed; the recommended version is the latest 2.xx stable release, which, in terms of resource requirements, still compares favorably with many other window managers.
The first and foremost FVWM module was called GoodStuff, which was later renamed "FVWM Buttons". It was primarily an application launcher, consisting of a grid or line of buttons, typically with icons, each of which launch a particular application or command when pressed. Variations and extensions of this are present in a large number of window managers, including Afterstep's "Wharf" (and also "Zharf"), Window Maker's "dock", and the "slit" from Blackbox and its descendants. Another important feature of this FVWM module is its ability to swallow other applications. This involves running a program (for example, an email watcher such as xbiff), and, instead of FVWM adding window borders and placing it on the desktop as a normal window, it is captured by the GoodStuff/Buttons module and displayed inside the module's window. This functionality was so popular that a large number of small applications have been written specifically for this purpose, and are known variously as applets, epplets (for Enlightenment), and dockapps.
Some of the other features common to both the 1.xx and 2.xx versions are full support for keyboard operations (which improves usability and accessibility), full color shaped (non-rectangular) icons, switching of viewports or virtual desktops by "pushing" the pointer against the edges of the screen, automatic raising of windows when they receive the input focus, and support for multiple policies for icon placement and initial placement of opened windows. Many of these features are now provided by other window managers, but some of them were pioneered by FVWM.
We will now briefly cover some of the additional features present in the latest stable 2.4 series. First, there is full support for internationalization, so FVWM can handle the fonts and conventions of the languages and locales supported by the underlying operating system. Standards are also important to FVWM, which provides full compliance with the ICCCM (Inter-Client Communication Conventions Manual) version 2 and recognition of windows hints for Open Look, Motif, and GNOME. Support for KDE 2.xx and later and GNOME 2.xx is available as a patch, or in the latest development versions. Various font rendering capabilities are available, such as anti-aliasing, vertical text, and shadows on text. The "WindowShade" function allows windows to be temporarily "collapsed" out of the way. This function can operate horizontally or vertically, or even diagonally. A very useful feature for those with two or more physical displays is support for the Xinerama X11 extension, which allows all of the available displays to be combined into a single seamless desktop. Finally, there is also support for session management, dynamic changes to most properties, mouse strokes (executing functions based on patterns of mouse movement), PNG image support (including alpha blending), and modules for building GTK+ dialogs and Perl extensions.
As you can see, FVWM has an almost endless feature set, and there's plenty more that hasn't been mentioned. The modular approach of FVWM works well to reduce the "bloat" factor of all these features, so the only real drawback is the work required to customize your setup to make use of the desired features.
IceWM was first released in 1997 by Marko Macek, who coded it from scratch in C++ instead of starting with an existing window manager (as is more common). It is designed primarily to be small, fast, and lightweight. A key feature of the early versions was the ability to emulate the look and feel of Motif, OS/2, and Windows desktops. Since then, this feature has evolved into a flexible theme engine, with a large number of readily-available themes. IceWM is a popular window manager which is still in active development.
Other features of IceWM include full keyboard support, multiple focus modes, sound support, multiple workspaces, dynamically updating menus, a taskbar, and complete internalization support. It is also compliant with a number of standards and conventions, such as Motif window hints, KDE hints, almost full ICCCM compliance, and full GNOME integration support.
Window Maker is designed to emulate the look and feel of part of the NEXTSTEP GUI. The AfterStep window manager has a similar goal, but was based on FVWM, whereas Window Maker is written largely from scratch. The first release of Window Maker (or "WindowMaker" as it was then -- the space in the name came later) was made in 1997, and the principal author was (and still is) Alfredo K. Kojima. Window Maker is part of the GNU project, and is designed to integrate with the GNUstep desktop framework.
The application dock provided by Window Maker is powerful and easy to use, supporting drag-and-drop operations. A large number of specifically-written "dockapps" are available. Another good usability feature is the built-in GUI configuration utility which allows you to adjust the window manager's settings without having to edit the configuration files directly with a text editor.
Like many modern window managers, support for themes is also present, with a large number of themes available. Support for different window hints is also very good, covering GNUstep, GNOME, KDE, Motif, and OpenLook, which improves the integration of Window Maker with those environments.
Other features of this fast and easy-to-use window manager include internationalization support, near ICCCM compliance, icon dithering for displays with low color depths, multiple workspaces, and the ability to change all preferences and menus without having to restart.
Developed by John Harper, Sawfish began life in 1999 as Sawmill, but later changed its name to avoid a clash with another product. It is a lightweight and highly configurable window manager which makes use of an Emacs Lisp-like language. It is designed to implement only core window manager functionality, and not any extras such as panels and desktop backgrounds. This makes it ideal for use with desktop environments (particularly GNOME, as both use the GTK+ toolkit). In fact, Sawfish is the default window manager for 1.xx versions of the GNOME desktop (replacing Enlightenment), and a version for use with GNOME 2.xx is available.
Configuration can be done by writing Lisp code, but more accessible is the GUI customization system, which provides a quick and easy way of controlling the many aspects of this flexible window manager's behavior and appearance. It supports themes, so complete frame decoration can be changed in one go. Global and window-based keyboard shortcuts can be easily defined for a very large number of operations. Different focus policies are available with many options, such as auto-raise delay, and different properties can be set for individual windows or groups of windows, specified by name or wildcard.
The first release of Metacity, by Havoc Pennington, was version 2.3 in 2001, so it is still in a fairly early state of development. Like Sawfish, the intention is to only implement core window manager functionality, but Metacity takes this even further and only implements a very low level of flexibility and configuration options. Current versions require GTK+ 2.0, and it does not work with 1.xx versions of the GNOME desktop. It is now the default window manager for some GNOME 2.xx configurations, although it can also be used with KDE, version 3.xx onward. The current trend with GNOME 2.xx and Metacity seems to be to follow the approach of other windowing systems, to hide the window manager separation from the user and present a single desktop interface. This means that the limited configuration options available for Metacity are shown as desktop options, not as Metacity options (although there is an optional "Metacity-setup" panel which conflicts with this approach). There is also currently no panel to allow the user to switch to a different window manager (this can be done manually by killing one window manager and starting another, relying on session management to record the change).