본문 바로가기
오픈소스 읽기 (OLD)/리눅스 어플리케이션 만들기 - Gtk4

1. GTK란 무엇인가?

by 커널패닉 2021. 4. 15.
반응형

www.kernelpanic.kr/category/%EC%98%A4%ED%94%88%EC%86%8C%EC%8A%A4%20%EC%9D%BD%EA%B8%B0/%EB%A6%AC%EB%88%85%EC%8A%A4%EC%97%90%EC%84%9C%20%EA%B0%80%EC%9E%A5%20OOO%ED%95%9C%20GUI%20%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC%20-%20GTK

 

'오픈소스 읽기/리눅스에서 가장 OOO한 GUI 라이브러리 - GTK' 카테고리의 글 목록

 

www.kernelpanic.kr

 

1.1 GTK란? 왜 GTK인가?

GTK(Gimp ToolKit)은 리눅스에서 GUI를 다루기 위한 가장 대표적인 라이브러리 중 하나이다. 대표적으로 최근 우분투에서 기본으로 채택한 Gnome 데스크탑 환경이 GTK로 만들어졌다. 그 외에도 텍스트 에디터 Gedit, IDE builder, 웹 브라우저 Web(구 epiphany), midori 등 수많은 프로그램이 GTK에 기반하고 있다.

GTK는 수많은 GUI 라이브러리 중에서도 다음과 같은 굉장히 독특한 특징들을 가지고 있다.

 

1.1.1. GTK는 C로 구현된 객체지향 GUI 라이브러리이다.

GUI 프로그래밍은 윈도우, 버튼, 메뉴바 등 수많은 객체들을 관리해야 하며, 각각의 객체들은 비슷한 객체들끼리 묶이곤 한다. 따라서 객체지향 프로그래밍의 개념이 직관적으로 잘 어울리는 분야 중 하나가 GUI 프로그래밍이다. 따라서 많은 GUI 라이브러리들은 객체지향 개념을 적용하기 위해 C++ 또는 객체지향 언어로 개발되었다. 대표적으로 QT나 MFC가 있다.

하지만 GTK는 객체지향 언어를 사용하는 대신  C로 객체지향을 구현하였다. 따라서 C언어로 데스크탑 앱을 만드려고 한다면 아마도 GTK가 가장 좋은 선택지가 될 것이다.

(물론 ELF나 SDL이 있기는 한데, ELF는 커뮤니티 규모가 작고, SDL은 범용 앱 제작에 적합한 라이브러리는 아니다.)

 

* C로 객체지향 프로그래밍을 하는 방법은 아래 포스트 참조

www.kernelpanic.kr/11  

 

1-1. 객체지향 C언어? (클래스, 다형성)

객체지향이란? C언어의 객체지향이라는 주제로 이야기를 하려면, 우선 "객체지향"이란 무엇인지부터 짚고 넘어가야 한다. 나는 개인적으로 "클린 아키텍쳐"에서 말하는 객체지향 개념을 선호한

www.kernelpanic.kr

1.1.2 GTK는 소스코드 공개 의무가 없는* 자유 오픈소스 라이브러리이다.

*단, Gtk라이브러리는 공개해야 하며, 라이브러리의 변경이 있는 경우에는 변경점에 대해서도 공개해야 한다. 자세한 내용은 아래 링크 참조(www.olis.or.kr/license/Detailselect.do?lId=1004ko.wikipedia.org/wiki/GNU_%EC%95%BD%EC%86%8C_%EC%9D%BC%EB%B0%98_%EA%B3%B5%EC%A4%91_%EC%82%AC%EC%9A%A9_%ED%97%88%EA%B0%80%EC%84%9C)

 

Gtk는 LGPL2.1 라이센스를 따른다. 라이센스에 "GPL"이 붙으면 일단 흠칫하게 되기는 하는데, LGPL은 GPL보다 훨씬 제약사항이 적다. (물론 MIT나 BSD 보다는 많다.) 상업적인 용도로 사용해도 문제가 없으며, 라이브러리 부분(= Gtk)을 제외하고는 소스코드 공개 의무도 없다.

반면 QT는 라이센스가 약간 복잡하다. 비상업적 용도로 사용시에는 GPL, LGPL을 선택해서 사용할 수 있기 때문에 Gtk와 큰 차이는 없다. 다만 상업적 용도로 사용하게 되면, Qt Commercial License에 따라서 트롤테크社에 라이센스 비용을 지불해야 한다.

어떤 소스코드 공개도 없이 제품을 개발해야할 필요가 있다면, 라이센스 측면에서 Qt가 더 좋은 선택이 될 수 있다. 하지만 (어차피 오픈소스인) GUI 라이브러리를 공개하는 것 정도는 상관이 없다면 Gtk가 조금 더 비용 측면에서 효율적이라고 보인다.

*수정내용: QT를 상업적으로 사용하더라도 Commercial License를 반드시 사용해야 하는 것은 아닙니다. 대신 소스공개 등의 의무가 발생할 수 있다. QT라이센스에 대해서는 아는 게 부족해서 길게 적지는 못하니, 자세한 내용은 각자 구글링 해 보자.

 

1.1.3 Gtk는 한국어에 친절하다.

리눅스 데스크탑을 메인으로 사용하는 분들은 한글 입력 문제로 고생 깨나 해본 경험이 있을 것이다. 파편화된 한글 입력기들, 유서깊은 Ibus의 끝글자 버그, Flatpak에서 한글 미지원 이슈 등 수 많은 이슈들이 있었다. 그 중 하나가 입력기에 따라서 Qt 앱에서 한글 입력이 정상적으로 안되는 문제이다. 나의 경우에는 이전에 Skype를 사용할 때, 이 문제로 깨나 골머리를 앓았던 기억이 있다. 대부분의 한글 입력 이슈는 이래저러 삽질을 하다보면 해결되는 경우가 많기는 한데, 굳이 삽질을 할 일을 없애는 것이 최선이 아닐까 한다.

적어도 내가 아는 한에서 현재 Gtk의 경우에는 한글 입력 이슈가 없다. 물론 과거에는 ibus 한글 끝글자 이슈가 악명높기는 했지만, 현재는 모두 해결되었다. 따라서 한국어를 사용하는 우리들 입장에서는 Gtk가 Qt보다 더 편한 솔루션이 될 수 있다.

 

1.2 GUI 라이브러리 비교 (vs QT)

리눅스에서 GTK와 경쟁하는 대표적인 GUI 라이브러리로는 QT가 있다. 두 라이브러리는 사용되는 분야가 유사하고, 둘 모두 리눅스 세상에서 많이 사용된다. 아래는 두 라이브러리의 특징을 비교한 표이다.

  GTK QT
지원언어 C, C++, Python 등 C++, Python 등
플랫폼 Linux, Windows, MacOS Linux, WIndows, MacOS
라이센스 LGPL2.1 LGPL, GPL, 상용 라이센스
대표 데스크탑 환경 Gnome, Xfce KDE
반응형