- X 클라이언트는 두 층을 거쳐 X 서버와 대화한다 — 저수준 라이브러리와 그 위의 툴킷.
- 저수준 라이브러리는 Xlib과 XCB 둘이다. XCB가 X 서버에 더 가까운 저수준이다.
- 툴킷은 GTK+ · Qt · FLTK · Motif · Tk 가 대표다.
- GTK+는 C 언어로 만들어져 GNOME이, Qt는 C++로 만들어져 KDE가 쓴다.
- 짝을 이룬다 — Xlib ↔ XCB(저수준 라이브러리), GTK+ ↔ Qt(툴킷).
기준: 리눅스마스터 2급 출제 기준오류 제보
| 층 | 이 층에서 하는 말 | 맡은 일 |
|---|---|---|
| 응용 프로그램 | "여기에 '확인' 버튼을 둔다" | 무엇을 보여 줄지 정한다 |
| 툴킷 (GTK+ · Qt) | "버튼은 둥근 사각형에 글자, 누르면 색이 바뀐다" | 위젯의 모양과 동작을 만든다 |
| 저수준 라이브러리 (Xlib · XCB) | "좌표 (10,20)에 사각형, 그 안에 글자" | 그리기 지시를 X 프로토콜 메시지로 바꿔 보낸다 |
| X 서버 | (받은 대로 화면에 그린다) | 실제 화면 출력과 입력 장치를 맡는다 |
| 구분 | Xlib | XCB |
|---|---|---|
| 풀네임 | X Library | X protocol C-language Binding |
| 등장 | 전통적, 오래됐다 | 나중에 나온 대체품 |
| 계층 | X 프로토콜을 감싼 라이브러리 | 더 얇다 — X 서버에 더 가깝다 |
| 통신 | 동기(synchronous) 중심 | 비동기(asynchronous) |
| 크기 | 무겁다 | 가볍다 |
"X 서버에 가장 가까운 저수준 X 클라이언트 라이브러리는?" 이라는 문제의 답은 XCB 다. Qt·GTK+·FLTK는 그보다 위층의 툴킷이므로 답이 될 수 없다.
Xlib (동기) XCB (비동기)
요청 1 보냄 요청 1 보냄
… 응답 올 때까지 기다림 요청 2 보냄
응답 1 받음 요청 3 보냄
요청 2 보냄 … 다른 일을 한다
… 기다림 응답 1 · 2 · 3 을 필요할 때 받음
응답 2 받음| 헷갈리는 표현 | 맞는 답 |
|---|---|
| "X 서버에 가장 가까운", "가장 저수준의" 라이브러리 | XCB |
| "전통적인", "가장 오래된" 저수준 라이브러리 | Xlib |
| "Xlib을 대체하려고 만든" | XCB |
| "비동기" 방식 | XCB |
| "위젯을 제공하는" | 툴킷 (GTK+ · Qt …) — 둘 다 아니다 |
xterm·xclock)이 쓰는 Athena 위젯(Xaw) 이 이 위에 만들어졌다.버튼·메뉴·체크박스 같은 위젯(widget) 을 만들어 주는 라이브러리다.
| 툴킷 | 풀네임 · 유래 | 언어 | 쓰는 곳 |
|---|---|---|---|
| GTK+ | GIMP Toolkit | C | GNOME, GIMP, Xfce |
| Qt | (큐트라고 읽는다) | C++ | KDE, VLC |
| FLTK | Fast Light Toolkit | C++ | 가벼운 프로그램 |
| Motif | — | C | CDE, 전통적인 상용 유닉스 |
| Tk | Tcl/Tk의 그래픽 부분 | Tcl | 스크립트용 |
| XForms | — | C | 예전 툴킷 |
| 짝 | 무엇이 같은가 |
|---|---|
| Xlib ↔ XCB | 둘 다 저수준 라이브러리 |
| GTK+ ↔ Qt | 둘 다 대표 툴킷 |
| GNOME ↔ Xfce | 둘 다 GTK+ 를 쓰는 데스크톱 환경 |
| KDE ↔ Qt | KDE는 Qt로 만들어졌다 |
"나머지와 종류가 다른 것" 형태로 묻는다. 예를 들어
Xlib · XCB · GTK+중에서는 GTK+가 툴킷이라 다르고,GTK+ · Qt · FLTK · XCB중에서는 XCB가 저수준 라이브러리라 다르다.
| 구분 | GTK+ | Qt |
|---|---|---|
| 언어 | C | C++ |
| 유래 | GIMP를 만들려고 개발 | 노르웨이 Trolltech |
| 대표 데스크톱 | GNOME, Xfce, LXDE | KDE, LXQt |
| 대표 프로그램 | GIMP, Firefox | VLC, Krita |
1996 KDE 시작 Qt 를 골랐다 — 그런데 당시 Qt 는 자유 소프트웨어 라이선스가 아니었다
│
1997 GNOME 시작 "완전히 자유로운 데스크톱"을 내걸고 GTK+ 를 골랐다
│
이후 Qt 도 GPL · LGPL 로 공개 — 라이선스 문제는 해소됐지만 두 진영은 그대로 남았다| 구분 | GTK+ | Qt |
|---|---|---|
| 라이선스 | LGPL | GPL · LGPL과 상용 라이선스를 함께 제공 |
| 만든 곳의 변천 | GIMP 개발자들 → GNOME 프로젝트 | Trolltech → 노키아 → 지금의 The Qt Company |
| 동작하는 곳 | 리눅스 중심, 윈도·macOS도 지원 | 리눅스·윈도·macOS·모바일까지 폭넓게 |
| 이름 표기 | 최근 버전부터 +를 떼고 GTK 로 쓴다 | — |
GTK+ 로 나온다. GTK와 같은 것이다.| 프로그램 | 종류 | 툴킷 |
|---|---|---|
| GIMP | 이미지 편집기 | GTK+ (이 툴킷의 출발점) |
| gedit · Nautilus | GNOME의 편집기 · 파일 관리자 | GTK+ |
| Firefox (리눅스판) | 웹 브라우저 | GTK+ |
| Dolphin · Konsole · Kate | KDE의 파일 관리자 · 터미널 · 편집기 | Qt |
| VLC · Krita | 동영상 재생기 · 그림 도구 | Qt |
xterm · xclock · xeyes | X 기본 프로그램 | 툴킷 없이 Xlib·Xt·Athena 위젯 |
응용 프로그램
│
┌────┴──────────────────────────┐
│ 툴킷 │ GTK+(C) · Qt(C++) · FLTK · Motif · Tk
└────┬──────────────────────────┘
│
┌────┴──────────────────────────┐
│ 저수준 라이브러리 │ Xlib · XCB ← XCB 가 더 아래
└────┬──────────────────────────┘
│ X 프로토콜
▼
X 서버| 툴킷 | 기억할 한 가지 | 함께 나오는 이름 |
|---|---|---|
| FLTK | 작고 빠른 것이 목표. "풀틱"이라 읽는다 | Fast Light Toolkit |
| Motif | 상용 유닉스 시절의 표준. Xt 위에 만들어졌다 | CDE, OpenMotif, LessTif |
| Tk | 스크립트 언어 Tcl과 짝. 파이썬의 tkinter도 이것을 쓴다 | Tcl/Tk |
| XForms | 예전의 가벼운 툴킷. Xfce가 처음에 이것으로 만들어졌다 | — |
| 이름 | 층 | 틀리기 쉬운 이유 |
|---|---|---|
| XCB | 저수준 라이브러리 | 낯선 이름이라 툴킷으로 착각 |
| Xlib | 저수준 라이브러리 | X 서버의 일부로 착각 — 클라이언트 쪽이다 |
| GTK+ | 툴킷 | GNOME(데스크톱 환경)과 혼동 |
| Qt | 툴킷 | KDE(데스크톱 환경)와 혼동 |
| FLTK · Motif · Tk | 툴킷 | 이름이 생소함 |
| GIMP | 응용 프로그램 | "GIMP Toolkit" 때문에 툴킷으로 착각 |
| GNOME · KDE | 데스크톱 환경 | 툴킷과 한 묶음으로 외우다 층을 섞음 |
| X11 | 프로토콜 버전 | 라이브러리 이름으로 착각 |
| X.org Server | X 서버 | — |
XCB → Xlib → 툴킷(GTK+·Qt) → 응용 프로그램 이다.| 외우는 실마리 | 내용 |
|---|---|
| 이름이 X로 시작하면 아래층 | Xlib, XCB는 저수준 라이브러리 (단, XForms는 툴킷) |
| 끝이 tk·TK면 툴킷 | GTK+, FLTK, Tk — toolkit의 줄임이다 |
| C는 G, C++은 Q | GTK+ = C = GNOME, Qt = C++ = KDE |
| CB는 C Binding | XCB = X protocol C-language Binding |
내일은 이 위에 얹히는 윈도 매니저 · 디스플레이 매니저 · 데스크톱 환경의 구분을 다룬다.
선택지를 클릭하면 정답·해설이 펼쳐집니다.
문제 1
다음 중 X 서버에 가장 가까운 저수준 X 클라이언트 라이브러리로 알맞은 것은?
문제 2
다음 중 GTK+ 툴킷을 작성하는 데 사용된 프로그래밍 언어로 알맞은 것은?
문제 3
다음 중 KDE 데스크톱 환경의 기반이 되는 툴킷으로 알맞은 것은?
문제 4
다음 중 나머지 셋과 계층이 다른 것으로 알맞은 것은?
문제 5
다음 중 GTK+ 툴킷 이름의 유래가 된 프로그램으로 알맞은 것은?