2007년 7월 18일 수요일

X Window System 그리고 MIT 괴짜들

X가 MIT에서 처음 세상에 나온지 이제 20년이 거의 다되어 가는데 X에 관한 문서가 의외로 많이 없다는것이 이상해서 2주 전부터 인터넷을 뒤지고 전에 사두었던 오렐리의 X에 대한 책을 다시 읽으면서 새삼 X Window System이라는것이 기술이라기 보다는 컬트 문화에 가깝다는 생각이 듭니다.

서버/클라이언트 용어부터 우리가 아는 것과는 정반대의 논리를 펼치는 X 패러다임을 시작으로 X 콘소이엄에 참가한 업체들의 기술은 모두 무시하고 MIT 자기들이 만들것을 모조리 표준으로 만들어 버리고, X의 이념에 위배된다며 여러 업체들이 제시한 User interface를 "policy free" 라는 슬로건하에 모두 폐기(?)시킨 후 twm을 기본 Window Manager로 배포본에 포함시킨 전례를 보면 해커라는 용어를 만들어 낸 MIT 답게, 그리고 리차드 스톨맨의 행동과 비슷하게 남들과 타협을 불허하는 그들만의 리그는 에릭 레이몬드의 성당과 시장의 개념을 빌리자면 그들에게 있어 시장은 MIT를 의미하는것으로 보입니다.

KDE, GNOME과 같은 통일화된 User interface를 주장하는 공동체가 생긴지도 꽤 오래되었지만 제가 보기에는 의외로 X에 대해서 아는 사람이 많이 없는 것으로 보입니다. X 관련서적이 모두 90년대 나온것이 고작이고 수량도 그리 많지 않습니다. 웹사이트를 뒤져봐도 개념적인 설명을 한 곳이 거의 없더군요.

이야기가 조금 다른곳으로 흘렀는데, 결론은 MIT 괴짜들이 만든 X를 정상적인 상태로 이해한다는 것은 무리일 것 같고 xxx 같이 이해하는 것이 정답아닐까요 ^^ 그리고 책을 자꾸 보다 보니 내 컴퓨터에 설치된 X에 언제부터인가 Window Manager가 twm으로 바뀌어 있네요. 어찌보면 엔틱스럽고 빈티지 스타일 느낌도 나서 보기 좋네요. 내 컴퓨터에도 복고 바람 ~

ps) 어느 교수님이 이렇게 말씀하시더군요. "기술은 공부하라고 존재하는 것이 아니라 문화 코드를 만들기 위해 존재한다는 것을..."

2007년 7월 13일 금요일

Xfce4 설치

무려 30개 가까이 되는 패키지를 설치하고 나서야 컴파일 설치가 끝나긴 했는데 역시 이미 만들어둔 binary 패키지를 설치하는게 좋을 듯 싶네요.

컴파일 및 설치에 약 1GB 정도가 쓰입니다. 상대적으로 KDE, GNOME에 비해 가벼운 편입니다.

~/.xinitrc

LANG=ko_KR.UTF-8
LC_ALL=ko_KR.UTF-8
LINGUAS=ko_KR.UTF-8

export XMODIFIERS="@im=nabi"
export LANG LC_ALL LINGUAS
export GDK_USE_XFT=1
export G_BROKEN_FILENAMES=1
export GTK_IM_MODULE=hangul2

nabi &
/usr/pkg/bin/startxfce4

ps) 빨리 pkgsrc 가 cross compile 될수 있는 환경이 되었으면 하는 바램이....

2007년 7월 11일 수요일

Qt4 설치 수기

아직 TS-7200 보드에서 X를 띄울수 있는 상황이 아니라서 필요하지는 않지만 요즘 X Window 프로그램을 작성해볼까해서 지난 5일동안 밤잠도 잊은채 웹을 뒤져가며 삽질했던 내용을 적어볼까 합니다.

가장 먼저 알게 된 것은 X 프로그래밍을 하는것이 예전처럼 어렵지않은 환경을 가지고 있었다는 겁니다. 나만 몰랐나 -:( 지금은 데스크탑을 넘어서 이기종간에 포팅도 자유롭고, 더군다나 임베디드 시스템에 까지 손을 뻗고 있으니 세상 참 많이 좋아졌습니다.

취미로 배워볼 생각으로 우선 위도우 매니저가 얼마나 다양해졌는지 한번 살펴봤습니다. http://www.xwinman.org/ 에 잘 정리가 되어 있습니다. 이젠 추억으로 남아 있는 fvwm이 아직도 개발중에 있다는 것이 참 신기하네요. 호기심에 한번 설치해 보았습니다. 역시 빠른 속도에 감탄하고 하지만, 설정파일을 편집하는 것이 너무나 고전적이네요^^ UI도 이제는 먹어주지도 않고... 바로 삭제해버렸습니다. 다음은 Enlightenment. 최근에 E17로 한참 업그레이드 하고 있는 프로젝트인데 상당히 매력적인 부분이 많이 있습니다. 아무래도 이 프로젝트가 이젠 기존의 윈도우 매니저에서 KDE, GNOME 과 같은 레벨로 진화할려는 노력이 보입니다. 개발하는 입장에서는 너무나도 매력적인 프로젝트입니다. 한가지 단점이라면 한글화가 제대로 지원이 안되고 나아가 국제화에 대한 지원을 할 예정인지 알수가 없네요. 조금 아쉽습니다. 이녀석이 성공한다면 우린 또다른 API 공부해야 될지도 모릅니다. 그래도 아직 쓸만한게 있다면 Window Maker를 따라잡을수가 없나봅니다. 현재 개발중단중인것으로 알고 있는데 조금 아쉽습니다.

GTK 는 조금 공부하다 지쳐서 미루어 오다가 최근에 Qt를 접해보았는데 상당한 매력덩어리 입니다. 거부감이 드는것은 라이센스 보다는 Qt의 철학이 조금은 마음에 들지 않습니다. 필요한 라이브러리를 모두 모아 두어서 나중에 여기에 의존할까 두렵습니다. NetBSD에 설치하기 전에 Linux와 Windows에 설치해보았는데 잘 돌아가더군요. 이번에는 NetBSD에 설치해보기로 했는데 왠만하면 source 컴파일해서 설치하지 말기 바랍니다. 디스크 사용량이 너무 많고 시간이 오래 걸립니다.(거짓말 조금 더해서 하루 정도)

꼭 필요한 패키지는 다음과 같습니다.
x11/qt4-libs, x11/qt4-tools

x11/qt4-docs 도 유용하니 설치해도 좋구, x11/qt4는 이 세가지의 meta-package입니다. 추가적으로 x11/qt4-psql 도 존재하네요.

netbsd ftp의 NetBSD-3.1/i386/All 에 보니 패키지가 다음 처럼 되어 있습니다.

-rw-rw-r-- 1 1115 netbsd 2927 Jun 20 08:52 qt4-4.2.3.tgz
-rw-rw-r-- 1 1115 netbsd 19814564 Jun 19 05:02 qt4-docs-4.2.3.tgz
-rw-rw-r-- 1 1115 netbsd 116137867 Jun 18 20:11 qt4-libs-4.2.3nb1.tgz
-rw-rw-r-- 1 1115 netbsd 435832 Jun 19 04:58 qt4-psql-4.2.3.tgz
-rw-rw-r-- 1 1115 netbsd 47654710 Jun 18 22:04 qt4-tools-4.2.3.tgz

저 엄청난 크기를 보세요. openoffice를 넘어버리는 크기에 놀랐습니다. 참고로 qt4-libs source 컴파일시에 필요한 공간을 보면,

netbsd: {6} df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/wd0a 4.8G 4.4G 145M 96% /
kernfs 1.0K 1.0K 0B 100% /kern

/usr/pkgsrc/x11/qt4-libs/work 삭제 후...

netbsd: {7} df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/wd0a 4.8G 2.8G 1.7G 61% /
kernfs 1.0K 1.0K 0B 100% /kern

library만 컴파일하는데 1.6 GB 정도 필요합니다. 그리고 전 설치시에 다음과 같은 에러가 나더군요.

.obj/release-shared/.libs/qabstractpagesetupdialog.o: could not read symbols: Memory exhausted
gmake: *** [../../lib/../../lib/libQtGui.la] Error 1
*** Error code 2

sysctl 로 사용자 limit를 수정해서 하면 될것 같은데 결국은 해결을 못해서 포기했습니다. 이때 부터 바이너리로 설치 시작...

qt4(4.2.3) 설치 요약
--------------------
qt4-libs: 약 500MB
qt4-tools: 약 165MB
qt4-docs: 약 53MB

설치는 /usr/pkg/qt4/{bin, lib, include, doc. ,,,} 로 됩니다.
PATH, LD_LIBRARY_PATH 환경 변수를 설정해 줘야겠네요.

간단한 build test
-----------------
hello.cpp

#include "QApplication"
#include "QLabel"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QLabel *label = new QLabel("Hello, Qt!");
label->show();
return app.exec();
}

우선 컴파일전에 저는 환경변수를 다음처럼 설정했습니다.
setenv QTDIR /usr/pkg/qt4setenv LD_LIBRARY_PATH /usr/lib:/usr/X11R6/lib:/usr/pkg/lib:/usr/pkg/qt4/lib

QTDIR도 설정을 해야 되더군요.

netbsd: {27} qmake -project
netbsd: {28} qmake hello.pro
netbsd: {29} make
netbsd: {30} ldd hello
netbsd: {31} ldd hello
hello:
-lz.0 => /usr/lib/libz.so.0
-lm.0 => /usr/lib/libm387.so.0
-lm.0 => /usr/lib/libm.so.0
-lpng12.0 => /usr/pkg/lib/libpng12.so.0
-lICE.6 => /usr/X11R6/lib/libICE.so.6
-lSM.6 => /usr/X11R6/lib/libSM.so.6
-lstdc++.5 => /usr/lib/libstdc++.so.5
-lgcc_s.1 => /usr/lib/libgcc_s.so.1
-lpthread.0 => /usr/lib/libpthread.so.0
-lQtCore.4 => /usr/pkg/qt4/lib/libQtCore.so.4
-lX11.6 => /usr/X11R6/lib/libX11.so.6
-lXext.6 => /usr/X11R6/lib/libXext.so.6
-lXi.6 => /usr/X11R6/lib/libXi.so.6
-lXrender.1 => /usr/X11R6/lib/libXrender.so.1
-lXrandr.2 => /usr/X11R6/lib/libXrandr.so.2
-lXfixes.0 => /usr/pkg/lib/libXfixes.so.0
-lXcursor.1 => /usr/X11R6/lib/libXcursor.so.1
-lXinerama.1 => /usr/X11R6/lib/libXinerama.so.1
-lfreetype.6 => /usr/pkg/lib/libfreetype.so.6
-lexpat.4 => /usr/X11R6/lib/libexpat.so.4
-lfreetype.9 => /usr/X11R6/lib/libfreetype.so.9
-lfontconfig.1 => /usr/X11R6/lib/libfontconfig.so.1
-lQtGui.4 => /usr/pkg/qt4/lib/libQtGui.so.4
-lexpat.1 => /usr/pkg/lib/libexpat.
netbsd: {32}

역시 무지 막지하게 DLL을 쓰네요.

PID USERNAME PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND
11557 pjy 2 0 3144K 8796K select 0:00 0.00% 0.00% hello

devel/iconv 가 설치되어 있지 않으면 다음과 같은 warning 메시지가 나옵니다.

QIconvCodec::convertToUnicode: using ASCII for conversion, iconv_open failedQIconvCodec::convertFromUnicode: using ASCII for conversion, iconv_open failed


상당히 무겁게 돌아가네요.

소스가 심플한 대신 메모리 잡어먹는 귀신이 되어 버린것 같습니다. 마지막에 조금 실망...