35. 오픈소스 이미지 편집 프로그램 김프와 GTK+ 시작

김프(GIMP)의 탄생

1995년 스펜서 킴벨(Spencer Kimball)피터 매티스(Peter Mattis)는 UC 버클리에서 전산학을 공부하고 있었다.

“LISP 컴파일러 과제 시작했어?”
“컴파일러 보다 다른 것을 만들어보고 싶어.”

“나도, 대신에 리눅스용 포토샵 같은거 만들어보면 어떨까? 포토샵은 맥하고 윈도에서만 실행되잖아.”
“좋은 생각이다. 우리 교수님한테 한번 이야기해보자.”

“저희가 LISP 컴파일러 프로젝트 대신에 포토샵 같은 이미지 편집 프로그램을 한번 만들어보고 싶습니다.”

“교수님도 유닉스 쓰고 있잖아요? 그런데, 포토샵 같은 이미지 편집 프로그램이 없어요. 저희가 한번 만들어보고 싶습니다.”

“음.. 좋은 생각이네. 대신 윈도용 그림판 수준으로 만들면 C 밖에 못줘.”
“포토샵에 보면 클릭만 하면 자동으로 비슷한 색깔 영역이 선택되잖아? 그거 신기한데, 그걸 구현하면 내가 A+를 주지.”

“아, 네 물론이죠.”

“그 기능이 뭔지 알어?” “뭔데?”
“포토샵을 그냥 구현하라는 말씀이야.”

두 사람은 이미지 편집 프로그램 이름을 김프 GIMP(General Image Manipulation Program)라고 짓고, 거의 10개월 정도 개발에 몰두한다.

“이제 김프를 공개해도 될 것 같아.”
“플러그인도 지원하고, 교수님이 이야기한 자동 영역 선택 기능도 있고, 그림 그리기 도구에에 채널까지.”
“게다가 포토샵에 없는 다단계undo/redo 기능까지.”

1996년 김프 0.54가 소스코드와 함께 공개되었고, 리눅스, SGI-IRIX, HP 유닉스를 지원했다. 주요 기능은 다음과 같다.

  • 8, 15, 16, 24 비트 컬러 지원
  • 8 비트 디스플레이를 위한 디더링(dithering) 지원
  • RGB, 흑백, 인덱스 컬러로 그림 보기 지원
  • 동시 여러 이미지 파일 편집 가능
  • 실시간 줌(zoom)과 스크롤 지원.
  • GIF, JPEG, PNG, TIFF, XPM 이미지 포맷 지원
  • 사각형, 타원형, 자유, 퍼지(fuzzy), 베지어(bezier), 자동 선택 도구를 이용한 영역 선택 지원
  • 회전, scale, shear and flip images.
  • bucket, brush and airbrush painting tools
  • 이미지 복사, convolve, 블렌딩 지원
  • 텍스트 툴, 필터 효과(blur와 edge detect), 지원
  • 채널과 컬러 조작 지원(add, composite, decompose).
  • 플러그-인 시스템 지원 (새로운 파일 포맷 및 새로운 필터 추가 가능).
  • 다단계 undo와 redo 지원

김프가 공개되지 마자, 수 많은 사용자들이 생겨났다.

“리눅스에서 이미지를 편집할 수 있다니… 감동”

“와, 기능이 거의 포토샵 수준이라니까…”

“사람들이 플러그인도 많이 만들어서 이미지 필터 효과도 아주 많네.”

당시 김프 사용자였던 자흐 빈(Zach Beane)는 자신의 홈페이지에 사용자 튜토리얼을 만들어 공유했다.

다른 사용자들도 김프로 만든 작품과 자신만의 테크닉을 공유했고. 이를 통해 더 많은 사람들이 김프를 사용하기 시작했다.

“내가 김프 튜토리얼을 만들어봐야겠다.”

당시 튜토리얼 페이지 일부(출처: archive.org)

리눅스 마스코트 펭귄 턱스

레리 이윙(Larry Ewing)은 김프 0.54 버전을 이용해서 리눅스 마스코트인 펭귄 턱스(tux)를 그렸다.

“리눅스 로고 컨텐스트가 있네. 주제는 펭귄! 리눅스가 자유 소프트웨어이니까, 김프로 한번 펭귄을 그려보자.”

레리가 작업하던 김프 화면(출처: 레리 홈페이지)

사람들의 투표로 레리가 그린 펭귄이 선정되었지만, 로고 대신 리눅스 마스코트로 현재까지 사용되고 있다. 당시에 이 그림이 김프로 그려진 사실 때문에 김프가 많은 조명을 받았다.

GTK 위젯

하지만, 사용자들이 플러그인을 추가하면서 김프가 불안해지는 현상이 나타났다.

“큰일이네. 플러그인 떄문에 자꾸 김프가 죽는다고 하네.”
모티프(motif) 때문에 플러그인 기능이 불안정한 것 같아.”

“김프가 상용 위젯인 모티프에 의존성이 있는 것도 문제야.”
“내가 위젯을 만들어볼까? 그래야 사람들이 리눅스에서도 쉽게 사용할 수 있지.”

“어떻게?”
“위젯과 윈도우 시스템이 연동하는 부분은 분리하는거야. 그래야 나중에 다른 플랫폼에 쉽게 포팅할 수 있지.”

나중에 위젯은 GTK(GIMP toolkit)로, 윈도 시스템과 연동하는 포팅 레이어는 GDK(GIMP drawing kit)로 부르게 된다.

이때 부터 피터는 주로 위젯을 개발하고 스펜서는 김프 자체에 주력한다.

“나 HP로 부터 오퍼 받았어.”
“축하해.. 당분간 밤낮없이 일해야겠는데? 툴킷도 완성시켜야하고.”

GPL 적용

“오~ 기특한 두 젊은이기 포토샵 대체 프로그램을 만들었다니, 이름도 김프(GIMP). G가 General이긴하지만… 메일을 하나 보내야겠다.”

“대단한 이미지 편집 도구를 만드셨네요? 혹시 GPL 라이선스로 공개할 생각은 없나요?

“네, 현재 모티프 의존성을 없애는 작업을 하고 있습니다. 그러면 GPL로 코드를 공개할 수 있을 것 같습니다?”

“오.. 대단합니다. 혹시 이름에서 G를 GNU로 바꿀 생각은 없는지요?”

“네, 물론이죠. 저희도 이맥스 에디터를 잘 쓰고 있고 GCC, 리눅스와 같은 자유 소프트웨어 덕에 이렇게 김프도 만들었는데…”

“정말 생각이 바른 젊은이들야. 이로써, 포토샵을 대신할 새로운 자유 소프트웨어 확보!”
“이제 부터 GNU Image Manipulation Program로 불러주세요~”

1997년 6월 김프 0.60이 릴리즈 되었다. 더 이상 모티프 툴킷에 대한 의존성이 없었고 처음으로 GPL 라이선스가 적용되었다.

“모티프 의존성이 없으니, 개발도 쉽고 배포도 자유로워졌네.”
“그런데, 사람들이 이제 윈도 버전을 만들어달라고 하네”

“기술적으로 GDK 윈도 백엔드를 구현하면 되는데, 난 이제 취직도 했으니, 누군가 구현하지 않을까? 오픈소스니까..”

1998년 토어 릴크비스트(Tor Lilqvist)가 드디어 김프를 윈도용으로 포팅하기 시작한다.

“김프 만든 사람들 천재군. 어떻게 위젯을 따로 다 만들었지? 게다가 포팅하기 쉽게 GDK로 포팅 레이어를 분리해놨어. 윈도용 포트 작업이 수월하겠는데..”

1997년 2월 26일 두 사람은 김프 0.99 버전을 릴리스 한다. 이때 부터 GTK에 객체지향(OOP) 개념을 추가해서 GTK+라고 부르기 시작했다. 1997년 6월 9일 0.99.10을 마지막으로 두 사람 모두 취직을 하면서 더 이상 개발을 진행하지 못하게된다.

“김프 새 버전은 안나오는거야?”

“두 사람이 모두 직장을 잡아서 새롭게 릴리즈할 시간이 없는 것 같아.”
“누군가 대신에 버그도 잡고 릴리즈도 하면 좋은데…”

페데리코(Federico Mena Quintero)는 여러 버그 픽스를 모아서 간헐적으로 릴리즈를 진행했다. 하지만 새로운 기능이 추가되지는 않았다.


“두 사람이 바쁜 것 같으니까, 나라도 메일링 리스트에 올라온 버그 패치를 적용해서 김프를 릴리즈해야겠다”

1997년 2월 김프 공동체의 원활한 소통을 위해 IRC채널이 만들어졌고, 자연스럽게 몇몇 사람이 나서서 프로젝트를 계속 진행시켰다.

마니시(Manish Singh, yosh)는 릴리스를 맡았고, 안드리안(Adrian Likins)은 서버를 관리하고 김프 캐릭터를 그렸던 래리(Larry Ewing, lewing)와 메튜(Matthew Wilson, msw)외 사람들이 버그를 잡고 새로운 기능을 구현했다.

“내가 김프의 릴리즈를 맡을께요”, “내가 서버를 관리하지요”, “버그는 나에게 맡기고”, “내가 새로운 기능을 구현하지”

1998년 6월 2일 마침내 김프 1.0이 정식으로 출시되었고, 이 때 부터 GTK+는 별도의 프로젝트로 독립을 한다.

오늘날의 김프

김프 2.0 (출처: 위키피디아)

현재 김프는 리눅스, 맥OSX, 윈도, BSD, 솔라리스를 지원하며 대표적인 오픈소스 그래픽 소프트웨어로 자리잡았다.

그놈(GNOME) 프로젝트

일부 김프 개발자가 독자적인 프로젝트로 GTK+를 분리시켰고 이를 기반으로 또다른 오픈소스 데스크탑 프로젝트인 그놈(GNOME) 프로젝트가 탄생하게 된다. 이에 대한 이야기는 다음에 소개할 예정이다.

두 사람은 이후 구글에서 함께 일하면서 구글 파일시스템, 서블릿 엔진 등 개발에 참여했고 Viewfinder라는 스타업을 만들어 스퀘어에 매각했다. 현재는 함께 새로운 스타트업에서 구글 빅테이블의 오픈소스 버전인 CockroachDB를 만들고 있다.

참고

34. 오픈소스 GUI 툴킷 Qt와 KDE 프로젝트의 시작

Qt의 시작

1990년 하바드 노드(Haavard Nord)와 아이릭 참베(Eirik Chambe-Eng)는 노르웨이 공과대학에서 전산학을 공부하는 대학원생이였다.

“아이릭, 나하고 프로그램 하나 개발 안할래?”
“뭔데?”

“초음파 사진을 저장하는 데이터베이스 애플리케이션을 개발하려고 하는데, 유닉스, 매킨토시, 윈도에서 실행되어야해.”
“그러면, UI를 전부 따로 만들어되잖아. 나 맥 프로그래밍 안해봤는데..”

“나도 알아, 그래서 크로스 플랫폼을 지원하는 UI 툴킷을 만들어보는거야. C++ 사용해서 객체지향 기반으로 새로운 디스플레이 시스템을 만드는거지.”

두 사람은 이 때 부터 C++으로 GUI 툴킷 개발을 시작한다.

“바닥 부터 모든 UI 위젯(Widget) 만든다는 생각을 하니까 정말 흥미진진한데..”

“드디어 개발이 끝났네.”

“우리가 만든 GUI 툴킷(Toolkit)이 유닉스, 맥, 윈도에서 다 실행되는데, 이제 뭘하지?”
“좀 더 위젯(widget)을 추가해서 완성도 높은 애플리케이션 프레임웍(Framework)으로 발전시키면 따로 팔 수 있을 것 같아. PC에서도 윈도3.1이 이제 많이 사용되잖아. 앞으로는 GUI시대가 올거야.”

“하지만 제대로 만들려면 우리둘이서 전업으로 몇년 이 일을해야할 것 같은데..”
“ㅎㅎ 방법이 있겠지.”

1994년 3월 4일 하바드와 아이릭은 Quasar Technologies라는 회사를 차리고 본격적으로 개발에 몰두한다. (나중에 Trolltech로 회사 이름을 변경한다)

“툴킷 이름을 뭘로 할까?”
“글쎄, Qt 어때? 난 알파벳 중에 Q가 제일 이쁜 것 같아. 뒤에 toolkit에 t를 붙이는 거지. Xt를 따라해서 Qt?”

어느날 모교 교수로 부터 전화가 왔다.

“하바드군 자네가 창업을 했다고 들었네, 내가 아는 분이 소프트웨어 개발을 원하는데 가능한가?”

“물론이죠 교수님”

“드디어 첫 고객이 생겼어. 하지만, 이런식으로는사업을할수는없지. Qt를 알릴 좋은 방법은 없을까?”
“우리 Qt를 소스 코드와 함께 공개하면 어떨까? Qt로 만든 앱 코드를 공개하면 무료로 사용하도록 하는거지, 상업적으로 사용할 때만 돈을 받으면 되지.”

1995년 5월 20일 Qt 0.90 버전이 sunsite.unc.edu 에 업로드되었고, 6일 후에 comp.os.linux.announce에 그 사실을 알렸다. 이것이 바로 Qt의 첫번째 공개 릴리스였고, Qt Free edition 라이선스로 공개되었다. 이 라이선스는 비록 소스코드는 공개되었으나, 재배포를 허락하지 않아 자유 소프트웨어 재단(FSF)가 정의한 자유 소프트웨어 정의와는 호환되지 않았고, 이 문제는 1.45버전까지 계속된다.

“Qt를 공개했지만 10개월이 되도록 상업용 라이선스를 하나도 못팔았네..”
“몇년째 아내 수입으로 버티고 있는데, 큰일이군.”

“Qt라고 들어봤어? 새로운 UI 툴킷이 나왔는데, C++로 만들었어.. 윈도와 리눅스를 지원하고 있지. Visual C++ MFC랑 비슷해.”
”뭐라고? 리눅스도 된다고? 라이선스가 어떻게 되? 소스는 공개되어 있나?”

“라이선스가 약간 애매해. 소스 코드는 공개되어 있는데, 상업용 소프트웨어를 만들 때는 로열티를 내야 하고, 코드를 공개하는 소프트웨어를 만들면 무료로 사용할 수 있어.”

1996년 3월, 유럽 우주국(the European Space Agency)이 Qt의 두번째 고객이 된다.

“드디어 두번째로 Qt 라이선스를 파는구나.“

1996년 Qt 1.0이 출시되고 그해말, Qt가 1.1이 될때까지 18개의 라이선스를 판매한다.

“드디어 18개의 라이선스를 팔았어!”
“1.0버전이 나오니까 이제 장사가 좀 되네.”

KDE 프로젝트 시작

독일 출신의 마티아스 에트리히(Matthias Ettrich)는 LyX 프로젝트를 진행하다가, GUI를 만들 목적으로 Qt를 접하게 된다.

“LaTeX는 사용하기 어려우니까 UI만들면 좋을 것 같아. 그런데, 리눅스에서 Qt 툴킷이 쓸만하군, 소스코드도 공개되어 있고, 이걸로 X11기반에 새로운 데스크탑 환경을 만들면 어떨까?”

그는 이러한 생각을 여러 인터넷 뉴스 그룹에 공유했고, 반응은 폭발적이였다.

“저와 함께 Qt로 리눅스 데스크탑을 만들어 볼 사람이 있나요?”

“제가 Qt로 애플리케이션을 만들어 본 경험이 있어요. 동참하고 싶어요.”

“나도”, “Qt 좋아요.”, “윈도 관리자도 만들어요?”, “프로젝트 이름이 뭔가요?”

“이름은 CDE(Common Desktop Environment)에서 가져오지. 그냥 C대신 K을 붙이는거야. 발음이 같으니까. 바로 KDE 프로젝트.”

1996년 이렇게 KDE 프로젝트는 시작된다

“누가 Qt로 리눅스 데스크탑을 만든다고 하는데? 윈도 관리자 부터 응용 앱까지..”
“드디어 사람들이 진정한 객체지향 크로스 프레임웍의 진가를 알아보는군..”

하지만, 이러한 상황에 불편을 느끼는 사람들도 있었다.

“KDE는 왜 자유소프트웨어가 아닌 Qt로 GNU 리눅스용 데스크탑을 만드는거야”

“소스코드만 공개하면 뭐하나? 수정해서 재배포도 못하고. Qt가 GPL과 호환이 안되는데, KDE 애플리케이션을 GPL로 배포하겠다고? 몰상식하군”
“그놈(GNOME) 공동체와 함께 Qt의 자유 소프트웨어 버전을 만들어야겠다.”

Qt 사용을 반대해온 사람들이 그놈 공동체를 만들었고 FSF와 함께 하모니라는 Qt의 자유 소프트웨어 버전을 만들기 시작한다.

“그 이야기 들었어? FSF와 GNOME이 하모니라는 Qt 호환 GUI 툴킷을 만든다는 소식”
“심각한 문제인데, 이 문제를 KDE 프로젝트 리더와 이야기를 해봐야겠어.”

1998년, 결국 두 사람은 이 문제를 해결하기 위해 KDE 프로젝트 리더인 마티아스 에트리히((Matthias Ettrich)를 영입한다. 그리고 Qt의 라이선스는 Qt 2.0 릴리스와 함께 자유소프트웨어 정의와 호환되는 QPL(the Q Public License)를 채택한다. 마침내, 2000년 Qt/X11 2.2부터는 GPL v2로 릴리스되어 GPL 호환 문제를 모두 해결한다.

“Qt도 KDE 커뮤니티를 위해 이제 부터 GPL 라이선스로 공개됩니다.”
“고맙습니다. 이제 자유롭게 Qt를 가지고 GPL라이선스를 가진 애플리케이션을 만들 수 있겠군요.”

하지만, Qt의 이러한 실책은 GNOME과 Gtk+를 탄생시켰고 이후, 리눅스 데스크탑은 GNOME과 KDE로 양분되는 결과를 만들고 만다.

“그래봐야 Qt는 회사 소유잖아”
“아직도 C언어로 UI를 만들어?”

Qt의 현재

Qt 공식 개발도구인 Qt Creator 모습 (출처: 위키피디아)

Qt로 만들어진 LG webOS UI(출처: 위키피디아)

Qt는 Qt Embedded 버전을 만들어, 최초의 리눅스 기반의 스마트폰에 사용되었고, 노키아에서 만든 Maemo 플랫폼블랙베리 10에도 사용되었다. LG webOS도 Qt를 사용하고 있다.

참고

P.S.
다음 만화에서는 Gtk+와 GNOME에 관해서 이야기 나누려고 합니다.