到目前为止,我们已经了解了X窗口系统是如何拥有客户端-服务器架构的,其中客户端是我们的应用程序。在这个客户端-服务器图形系统下,我们有几种可能的窗口管理器,它们管理着我们的屏幕空间;我们也有客户端应用程序,这才是我们实际完成工作的地方,并且客户端可以使用几种不同的工具包进行编程。
混乱就从这里开始了。每个窗口管理器都有不同的客户端管理方法;行为和装饰从一个到另一个都不同。此外,根据每个客户端使用的工具包,它们的外观和行为也可能彼此不同。由于没有任何规定要求作者必须对所有应用程序使用相同的工具包,因此用户完全有可能运行,比如说,六个不同的应用程序,每个应用程序都使用不同的工具包编写,并且它们的外观和行为都不同。这造成了混乱,因为应用程序之间的行为不一致。如果您曾经使用过用Athena widgets编写的程序,您会注意到它与使用Gtk编写的程序不太相似。而且您也会记得,使用所有这些外观和感觉如此不同的应用程序是一种混乱。这基本上否定了首先使用GUI环境的优势。
从更技术的角度来看,使用大量不同的工具包会增加资源使用量。现代操作系统支持动态共享库的概念。这意味着,如果我有两到三个应用程序使用Gtk,并且我有一个Gtk的动态共享版本,那么这两个或三个应用程序将在磁盘和内存中共享同一个Gtk副本。这节省了资源。另一方面,如果我有一个Gtk应用程序、一个Qt应用程序、一个基于Athena的程序、一个基于Motif的程序(例如Netscape)、一个使用FLTK的程序和另一个使用XForms的程序,我现在将在内存中加载六个不同的库,每个库对应一个不同的工具包。请记住,所有工具包提供的基本功能都相同。
这里还有其他问题。启动程序的方式因窗口管理器而异。有些窗口管理器有漂亮的菜单来启动应用程序;另一些则没有,它们期望我们打开一个命令启动框,或使用特定的组合键,甚至打开一个xterm并通过调用命令来启动所有应用程序。同样,这里没有标准化,因此变得混乱。
最后,还有一些我们期望从GUI环境获得但我们的方案尚未涵盖的优点。例如配置实用程序,或“控制面板”;或图形文件管理器。当然,这些可以编写为客户端应用程序。而且,以典型的自由软件方式,有数百个文件管理器和数百个系统配置程序,这可能进一步加剧了处理大量不同软件组件的混乱局面。