4. 윈도우 매니저

아직까지 우리는 X서버가 클라이언트의 화면(윈도우)영역에서의 처리를 어떻게 담당하는지 설명하지 않았다. GUI를 사용해본 사람이라면 클라이언트의 화면영역에 컨트롤이 필요하다는 것을 짐작할 것이다. 사용자는 보통 크기를 달리한다거나 옮기는 등의 작업을 한다. 그러면 X서버는 어떻게 이러한 일을 처리할까? 답은 '하지 않는다'이다.

X의 기본적인 원칙 중 하나는 '메커니즘은 제공하지만 수법은 아니다(we provide mechanism, but not policy)'라는 것이다. 그래서 X서버가 윈도우 조작에 필요한 방법은 제공하지만 정작 이러한 조작이 어떻게 작동하는가는 말하지 않는다.

이러한 메커니즘/수법의 기묘한 사실은 기본적으로 다음과 같이 요약될 수 있다 : 화면상의 공간을 통제하는 것은 다른 프로그램의 몫이다. 이 '다른 프로그램'이 윈도우를 어디에 위치시킬 것인가를 결정하고 윈도우의 겉모습이나 위치 크기 등을 사용자가 다룰 수 있는 메커니즘과, 우리가 윈도우를 제어할 수 있게 윈도우의 틀과 단추 제목 등의 장식을 제공해 준다. 이러한 윈도우를 다루는 프로그램을 '윈도우 매니저'라고 부른다.

윈도우 매니저는 X의 또다른 클라이언트이다 - 이것은 이러한 특별한 이점이 있음에도 X 윈도우 시스템의 일부는 아니다. 또한 유일한 윈도우 매니저가 있는 것도 아니다. 사용자가 서로 다른 방식으로 윈도우와 상호작용하고 상이한 배치와 장식, 그리고 키보드와 칼라맵을 바꿀 수 있다.

X 아키텍처는 윈도우 매니저가 이러한 모든 윈도우 상의 일을 처리할 수 있게 해 주지만 X는 어떠한 윈도우 매니저도 제공하지 않는다.

이런 이유로 많은 윈도우 매니저가 있다. 윈도우 매니저가 X의 외부 요소이므로 당신이 윈도우가 어떻게 보이고 어떻게 행동할 것이며 어디에 있을 것인가 등은 당신의 취향에 달렸다. 어떤 윈도우 매니저는 극히 단순하고 추하며(twm), 또 어떤 것은 화려하고 모든 요소를 갖추었고(enlightenment) 이들 사이에 fvwm, amiwm, icewm, windowmaker, afterstep, sawfish, kwm등 많은 것이 있다. 각 취향에 맞는 윈도우 매니저가 있는 것이다.

윈도우 매니저의 기본적인 임무는 다른 클라이언트를 제어하는 "meta -client"이다. 대부분의 윈도우 매니저는 몇 가지의 추가적인 편이요소를 제공하고 몇몇은 상당한 편이요소를 제공한다. 대부분의 윈도우 매니저가 제공하는 기능은 클라이언트(응용프로그램)를 구동시키는 것이다. 이 중 일부는 당신이 표준적인 명령을 입력할 수 있는 명령박스를 제공하고 어떤 것은 체계화된 메뉴를 제공하기도 한다. 하지만 이것들이 표준은 아니다. 그것은 X가 클라이언트는 어떻게 구동되야 한다고 정하지 않기 때문이며(no policy) 단지 이것은 클라이언트 프로그램에서 구현되는 편이요소일 따름인 것이다. 그럼에도 윈도우 매니저의 전형적인 임무는(서로 다르게 구현되지만) 다른 클라이언트 프로그램을 구동시키는 '클라이언트 프로그램'이라는 것이다. 프로그램 런칭 패드를 생각해 보라. 이렇게 해서 사람들은 많은 프로그램 런칭 프래그램을 갖게 된 것이다.