꿈의 입력기 nimf 이야기 12화 - nimf 의 역사

Sun, Jul 22 2018 01:48:00 KST

과거에 홈페이지를 드루팔로 만들었었는데, 관리를 잘못해서 데이터를 모두 날려먹었습니다.
그 후 다시 blogger 를 사용하고 있습니다.
세월이 몇 년 지나니 기억이 가물가물하여 웹 어카이브를 찾아보았습니다.
제가 작성한 글이 약간 남아 있더군요.
nimf 입력기의 역사에 대해 말씀드리고자 합니다.
리눅스에 악명 높은 끝글자 버그로 아주 고통받던 중 끝글자 버그를 잡아보려고 시도했습니다.
처음에 gtk 를 의심하여 gtk 소스를 확인해보았는데, 문제가 ibus 더군요.
ibus 끝글자 버그 잡다가 ibus 구조상 입력기를 새로 만드는게 낫다고 판단하여

https://github.com/ibus/ibus/issues/1282#issuecomment-104839603
https://code.google.com/archive/p/ibus/issues/1264

2015-01 모듈 방식으로 설계 착수
2015-02-02 모두(Modu) 입력기 개발 착수
클라이언트-서버 모듈 방식으로 재설계하여
2015-05-23 다솜(dasom) 으로 개명
2015-10-09 다솜 릴리즈
2015-12-29 다솜에서 님프(nimf)로 갈라짐
2016-04-26 님프 릴리즈
(…중략…)
2018.07.20 버전까지 나온 상태입니다.

그 결과 끝글자 문제 없이 아주 쾌적하게 입력할 수 있으며
처절한 테스트를 거쳐 버그가 거의 없습니다.
dasom 때부터 지금까지 LGPL 라이선스이고,
필요한 비용과 시간을 본인 스스로 부담하여(자비로) 개발하였습니다.
처음부터 현재까지 소스코드, 패키지를 무상으로 제공하고 있습니다.
nimf 프로젝트는 현재 수익이 없는 프로젝트이고,
개발자가 nimf 개발하여 밥먹고 사는 사람이 아닙니다.
따라서 개인 사정에 따라 개발/유지보수가 지연될 수 있으며,
사용자분의 요청/요구 사항을 거부할 수 있습니다.
그런데, 사실상 거부하기 어려운 이유가 있는데,
만약 거부하면 커뮤니티 게시판이나 공개된 웹사이트에 저를 원망하거나 비난하거나 음해를 한다는 것입니다. 이러한 일 꾸준히 있어 왔습니다. 제가 트라우마가 생겼습니다.

아마 다솜이라는 이름을 지금도 사용했더라면

개발자가 한국인이고 다솜(dasom)을 한국 사람이 가장 많이 사용할텐데 설명이 영어로 되어 있습니다. 아… 그래요? 빨리 시정되어야 할텐데 큰일이네요.

제가 인지하지 못하는 곳에서 지금까지도 욕먹고 있겠죠.

개발자에게 스토커짓을 하거나 군대처럼… 어쩌구 저쩌구…

저런 내용의 글을 커뮤니티 게시판에 떡하니 써놓질 않나…
그 글은 삭제되어 현재 찾을 수가 없습니다.

그래서 많은 고민 끝에 다솜(dasom)에서 님프(nimf)로 이름을 2015년 12월 개명했습니다.

nimf 로 개명한 후에는 페도라를 지원해달라는 이슈가 있었는데…
nimf 는 리눅스 입력기이기 때문에 이미 페도라를 지원합니다.
그래서 뭔가 안되나 싶어서 가상머신에 페도라를 설치해서 테스트해보니 잘 됩니다.
나중엔 오픈수세에서 안 된다고 해서 해보니 잘 됩니다.
안 되는 이유가 뭐였냐면, debian 계열과 fedora 계열에 입력기 설정하는 부분이 달라서 안 되었던 것입니다. 간단히 말해서 fedora 패키지를 만들어 달라는 얘기죠.
테스트에 시간 소비가 너무 많아서 이슈를 잠가버렸습니다.
그 일 없었으면 특근해서 약 20만원을 벌 수 있었을텐데, 손실이 생겨버린 겁니다.
좀 이상한 느낌이 들어서 커뮤니티 게시판에 가보니 불만을 써놓으셨더군요.
왜 이런 일이 발생할까요? 제가 잘못한건가요?
부적절한 이슈로 인하여 20만원의 직접적인 금전 손실이 발생했는데 기분 나쁘고 화내야 할 사람은 저이고, 패키지 제공은 의무사항이 아닙니다.
무상 개발, 무상 유지보수, 무상 서비스를 당연하다고 생각하기 때문에 이러한 일이 발생하는 것입니다.

올해 올라온 일본어 관련 이슈를 보면 참 어이가 없는게,
타 프로그램을 nimf 에 넣어서 패키지 해달라는 것도 있었습니다.

여러분들의 경우 이런 상황이면 어떤 선택을 하시겠습니까?
개발 및 유지보수를 계속 하실 수 있겠어요?

제 돈과 시간을 들여서 개발했는데 제가 정신적인 고통까지 겪어야 되겠습니까?

여러분들 외국인 개발자한테는 안 그러시잖아요.
그냥 제가 만만하니까 저한테 이러시는거 저도 알아요.

그래서 저는 제 자신을 보호할 장치를 찾아보았고,
그것은 면책 조항과 서비스 유료화임을 깨달았습니다.
그래서 서비스 유료화를 선언했더니,

아치리눅스 위키에 nimf 프로젝트가 완전히 중단되었다고 허위사실을 써놓지 않나,
공개된 게시판에 제 욕을 하고 AUR nimf-git 를 버리셨더군요.
그래서 그걸 제가 주서다가 파일을 새로 작성하여 올렸습니다.
기존 파일을 참고하여 업데이트하는 수준이 아니라, 아치리눅스 설명 따라서 그냥 새로 작성했습니다. 그 결과 당연히 파일 안에 있던 Contributor 항목이 삭제되었습니다.
그거 삭제되었다고 넣어달라고 이메일 오고 블로그에 악플 달리고 그러네요.
그런데, PKGBUILD 파일은 Makefile 같은 성격의 파일이에요.
파일 내부에 Contributor 를 넣는게 일반적이지 않답니다.
그걸 넣기 시작하면 파일이 Contributor 로 도배된답 말입니다.
제가 작성한 PKGBUILD 파일은 기존에 있던 걸 베끼거나 참고한게 아닙니다.
그래서 원칙적으로 따지자면 넣지 않는게 맞답니다.

그 내용이 이미 여기에 있답니다.

https://gitlab.com/nimf-i18n/nimf/blob/master/debian/control

제가 작성한 파일을 보고 만든게 PKGBUILD 입니다.
애초부터 PKGBUILD 파일은 제가 작성한 파일을 토대로 만들어진 겁니다.

https://github.com/dasom-im/dasom/issues/1

이건 뭐… 주객이 전도되어 오히려 저한테… 뭐라하는데 참.. 어이가 없습니다.

그리고 PKGBUILD 파일을 1년 이상 업데이트 안 하다가 공개된 게시판에 제 욕하고 버렸는데… 그걸 제가 살려놓은 거에요. 기분도 많이 상하고 아무말도 안 하고 참고 있었는데…
블로그에 악플까지 달리니 원..

3년 이상을 제 시간, 제 돈을 투입하여 개발해오고 있고,
소스코드, 패키지를 무상으로 제공해왔는데
제가 무슨 죄가 있다고 욕을 먹고 정신적으로 고통을 겪어야 하나요?
님들 외국인 개발자들에게는 안 그러시잖아요.

도대체 저한테 왜 그러는 거에요?

그래서 저를 보호할 수 있는 장치를 만들었습니다.
그것은 바로 면책 조항과 서비스 유료화입니다.
이렇게 하면 nimf 가 오픈소스가 아니다고 허위 사실 유포하는 사람들이 생겨나겠죠.
그러지 맙시다. 왜 자꾸 저와 싸우려고 하십니까?
저는 지금까지 제 시간과 제 돈을 투입하여 개발해왔고 무상으로 제공하고 있습니다.
오픈소스는 개발 및 유지보수의 의무가 없으며, 요청을 거부할 수 있습니다.
돈받아서 개발하여 오픈소스로 푸는 것도 오픈소스가 맞습니다.
GNOME, 파이어폭스는 돈받아서 개발하여 오픈소스로 풀고 있습니다.

그리고 nimf 에 대한 서비스 유료화는 제가 돈을 벌고 싶어서 그러는것이 아니라,

불특정 다수로부터 제 자신을 보호하기 위한 목적으로
서비스 유료화를 하는 것입니다.

그리고 입력기라는게 상업적인 가치가 없어서 돈을 벌 수 없다는 것도 알고 있습니다.
서비스를 유료화해도 아무도 서비스를 구입하지 않는다는 걸 알아요!!!!
그러면 어떤 이득이 있느냐?
사용자분들이 저에게 말도 안 되는 요구를 할 수 없게 되는거죠.

말도 안 되는 요구를 하면,
“그래요? 그럼, 돈 내세요.”

딱 이렇게 되는거거든요.

면책 조항

nimf 는 오픈소스 소프트웨어입니다.
nimf 개발자는 개발 및 유지보수에 대해 어떠한 의무도 없고 어떠한 책임도 없습니다.
어떠한 경우에도 보증하지 않습니다. 도덕적, 도의적 보증 책임 또한 없습니다.
nimf 프로젝트는 여러분들의 고객 센터가 아닙니다.
자신의 뜻대로 되지 않는다 하여

  • 사람들이 많이 방문하는 커뮤니티 게시판에 개발자를 욕(비난)하거나
  • 욕보이는(음해하는) 글을 작성하거나
  • 허위 사실을 공표하는

등의 행위를 삼가시기 바랍니다.
자신의 뜻대로 하고 싶은 분들은 nimf 개발 및 유지보수 계약을 체결하시기 바랍니다.
nimf 개발 및 유지보수 계약에 대한 기본 조건은 다음과 같습니다.

  • 유상으로 작성한 코드에 대한 저작권은 협의에 따라 개발자 또는 돈 주신 분이 소유합니다.
  • 그리고 그 코드는 nimf 가 현재 채택하고 있는 오픈소스 라이선스로 공개됩니다.

nimf 프로젝트를 고객센터라고 여기지 말고,
nimf 를 함께 가꾸어간다는 생각으로 접근해 주시길 바랍니다.

아래는 nimf 역사에 대한 참고 자료


악명 높은 끝글자 버그를 고칩시다-1

글쓴이: hodong / 작성시간: 일, 2014-12-28 23:17

지인들과 리눅스에 대해 이야기하는 일이 종종 있었는데, 지인들이 리눅스 사용에 대해 큰 호감을 가지고 있었습니다.
사무실 컴퓨터를 리눅스 컴퓨터로 교체하는 것에 대해 제게 문의를 하곤 했었는데,
제가 말렸습니다.
왜냐고요?
리눅스를 사용할 때 겪게 되는 아주 악명높은 끝글자 버그 때문입니다.

자세한 내용은 이곳 참고
https://kldp.org/node/93540
https://kldp.org/node/141357
(..중략..)

악명 높은 끝글자 버그를 고칩시다-2

글쓴이: hodong / 작성시간: 월, 2014-12-29 21:07

gedit에 한글을 쓰다가 마우스를 클릭하면 조합 중인 글자(pre-edit text)가 마우스를 따라가서 엉뚱한 곳에 달라붙는 끝글자 버그가 있는데 gedit는 gtktextview를 사용합니다.
그래서 gtktextview.c 소스를 살펴보았습니다.

키를 누를 때 실행되는 함수
(…중략…)

ibus 끝글자 버그를 고칩시다-3
글쓴이: hodong / 작성시간: 토, 2015-01-24 22:54

오늘 ibus, ibus-hangul 프로젝트에 보낼 패치 작성을 완료했고 ibus 프로젝트에는 패치를 보냈습니다. https://github.com/ibus/ibus/pull/15
이 패치가 수용된다면 ibus에 추가된 속성을 이용하는 패치를 ibus-hangul 프로젝트에 또 보내야 합니다. 벌써 다 만들어놓았죠. 끝글자 버그 잡기를 2014년 12월 28일부터 시작해서 2015년 1월 24일 완료되었네요. 총 28일 걸렸군요. 그동안 잘 쉬지도 못하고 잠도 제대로 못자서 참 힘들었었습니다. 이제 푹 잘 수 있겠군요. 끝글자 버그 잡으면서 주말 알바 못 나가서 발생한 손실액이 17만원 정도 되는군요. 그래도 이렇게 웹 브라우저에 글쓰면서 습관처럼 누르던 컨트롤키를 이제는 안 눌러도 되니 마음이 한결 편안해지는군요.
(…중략…)

다국어 입력기 프레임워크 모두Modu를 시작합니다.
글쓴이: hodong / 작성시간: 월, 2015-02-02 06:36

2015.6.11 내용 추가
프로젝트 이름을 ‘모두’에서 ‘다솜’으로 변경하였습니다.
다솜 프로젝트 주소 https://github.com/cogniti/dasom

그동안 끝글자 버그에 시달리다가 ibus 소스를 보게 되었습니다.
코드를 보아하니 구조가 좀 … 거시기 하더군요.
ibus는 클라이언트 — 서버 — 엔진 사이의 IPC 때문에 아래처럼 어쩔 수 없이 비동기적으로 작동합니다.
(…중략…)

모두 입력기의 이름을 다솜으로 개명하였습니다
글쓴이: hodong / 작성시간: 토, 2015-05-23 00:06

입력기를 개발할 때에 모듈러 구조로 만들면서 “모두”라는 이름을 붙였었습니다.
모듈러 구조로 개발하면서 자원을 중복 소비하는 문제점과 모듈에 문제가 있을 경우, 응용 프로그램이 죽어버리는 치명적인 단점 때문에 서버 모듈 구조로 변경하면서 “모두”라는 이름이 칙칙하게 느껴져서 우분투 포럼에 “입력기 프레임워크 이름을 공모합니다.” http://www.ubuntu-kr.org/forum/viewtopic.php?f=4&t=27999 라는 글을 올렸고,

입력기 프레임워크 이름을 공모합니다.

글올린이: hodong » 2015/03/30 월 11:35 pm
옛날에 유닉스를 사용할 때 한글 입력이 불편하지는 않았습니다.
그런데 이상하게도 세월이 흐르고 환경이 변화되면서 한글 입력이 점차 불편해지게 되었습니다.

현재 ibus가 리눅스용 입력기로 대세인데,,
여러 불편한 점들이 있습니다.

(…중략…)

다솜 입력기 개발 진행 상황
글쓴이: hodong / 작성시간: 토, 2015-05-23 00:29

다솜 입력기는
클라이언트용 im 라이브러리, 서버, 서버 모듈 등으로
구성되어 있습니다.

클라이언트와 서버는 완전 동기적으로 작동하여, 클라이언트에서 im 라이브러리를 호출하면 그에 대응하는 서버 모듈이 동기적으로 작동하므로 예측이 쉽고, 부작용이 없습니다.
한글 입출력이 잘 되고 있습니다.

dasom 서버가 xim 서버의 역할도 수행합니다. 하나의 프로세스에 두 가지 서버가 작동하는 하이브리드 서버입니다.

앞으로 할 일은
후보창, 상태창
입니다.
후보창과 상태창은 서버측에서 작동하게 만들 것입니다.

상태창은 사용자 편의를 위해 데스크탑 환경에 통합될 수 있도록 각각의 환경에 대해 애플릿 형태로 만드는 것이 좋을 듯합니다.
이렇게 되면 상태창은 다솜 서버와는 별개의 프로세스로 작동하므로 다솜 서버와 통신해야 합니다.

후보창은… 고려해 볼 것이 있습니다.

  1. 다솜 서버 프로세스에서 작동하는 방식
    (…중략…)

다솜 입력기 구조 (초안)
글쓴이: hodong / 작성시간: 일, 2015-05-31 20:37

Architecture for Dasom Input Method Framework (draft)
-----------------------------------------------------

      +- a process ---+    +----- a process -------+  +- a process --+
      | gtk im module |    | gnome-shell-extension |  |   X server   |
      +---------------+    +-----------------------+  +--------------+
              |                        |                     ^ |
              | calls                  | calls               | |
              |                        |                     | |
    +------------------+    +---------------------+          | |

(…중략…)

다솜 입력기 소스를 조기에 공개할까 합니다.
글쓴이: hodong / 작성시간: 수, 2015-06-03 00:41

어휴 답답한 정부…
메르스 발생 지역, 발생 병원을 공개해야 사람들이 피하고 주의하지…
그래야 확산이 줄어들지…
정부가 병원 수익을 왜 걱정하냐. 탄저균에 메르스에 우리들은 언제 죽을지 모르는 파리 목숨입니다.
일이 손에 잡히지도 않습니다.
입력기 소스를 미완성 상태로 공개하면 창피해서 자존심 상하고, 이거 해주셈, 저거 해주셈, 세벌식은 왜 지원 안 함? 각종 요구로 피곤해지고,
소프트웨어 출품 대회나 전시회 있으면 호시탐탐 노리는 사람들이 있을텐데…
그래서 완성된 상태로, 공개와 동시에 각종 사이트에 알림글을 올려야 하는데…
현 정권, 현 정부가 취하는 대응을 보면 무정부 상태에 있는 듯한 느낌이라… 어느날 갑자기 죽을 수도 있다는 생각이 많이 듭니다.
그래서 소스코드 조기 공개 여부를 고려하고 있습니다.

우분투 포럼에 글을 남겼습니다.
(…중략…)

다솜 입력기 테스트 버전을 준비하고 있습니다.
글쓴이: hodong / 작성시간: 토, 2015-07-04 16:24

안녕하세요…
다솜 입력기를 만들기 시작한지가 벌써 5개월 정도 지났습니다.
최근 입력기 서버 및 im 클라이언트에 있던 굵직한 버그(race condition)를 잡았습니다.
그걸 잡고 나니 focus out / focus in 이 싱크가 안 맞더군요.
자세히 살펴보니…
창이 2개가 있고, 창1에 포커스가 있을 때, 창2번을 찍으면
창1번은 focus out 신호를 발생시키고 focus out 신호에 대한 처리(reset, commit 등)가 완료되지 않아도
창2번은 바로 focus in 신호를 발생시킵니다.
아마도 윈도 관리자가 창관리를 thread로 처리할 것으로 추정됩니다. 그래서 이러한 현상이 나타나는 것 같습니다.
그래서 focus in / out 싱크 맞추기 위해 아래처럼 작성하였습니다.
(…중략…)

다솜 입력기 개발 일정 순서
글쓴이: hodong / 작성시간: 목, 2015-07-23 23:38

제가 오늘 다솜 입력기가 먹통되는 현상을 겪었습니다.ㅠㅠ

0. 오늘 발견한 먹통 현상(race condition) 해결할 것.

1. 우분투 유니티 한/영 표시기

2. 정음(한글) 엔진 설정기 — 키 설정, 두벌식,세벌식 선택 기능.

이렇게 만들 예정입니다. 다음은 순서는 미정.
열심히 사용해 주세요.
감사합니다.
(…중략…)

다솜 입력기 개발 일정 순서2
글쓴이: hodong / 작성시간: 일, 2015-08-09 02:40

앞으로 qt4, qt5를 지원하기 위한 작업을 할 것입니다.
qt4, qt5를 지원하기 위해서는 제가 C++과 QT를 공부해야 하므로 시간이 좀 걸리겠습니다.
그 다음 작업은 미정입니다.
(…중략…)

다솜 입력기 개발 일정 순서3
글쓴이: hodong / 작성시간: 일, 2015-08-23 22:44

1. qt 환경 테스트

qt4, qt5를 지원합니다. 다만, 테스트 과정에서 다솜 서버 및 qt 어플이 정지되는 경우가 발생하여,
중복적인 set cursor location 함수 호출을 줄이고,
dasom_message_new_full() 함수에서 ref_count = 1 이 없는 것을 확인하여 이를 추가하였습니다.
다솜 서버 및 qt 어플이 정지되는지 좀 더 테스트를 해야 합니다.
제가 KDE, qt 사용자가 아니다보니 테스트를 수행하지를 못하고 있습니다.
KDE, qt 사용자 분들이 다솜 입력기를 설치하셔서 테스트를 수행해주시면 고맙겠습니다.
KDE, qt 테스트라고 해서 특별한 것은 없고 그냥 KDE, QT 환경에서 열심히 사용하시는 것이 테스트입니다.

여기까지 해결한 후에 앞으로 할 일들 — 언제 시작할지 예정없음.

설정창, 상태창, 중국어 입력기
(…중략…)

다솜 입력기 릴리즈 준비 중입니다.
글쓴이: hodong / 작성시간: 월, 2015-09-21 01:22

안녕하세요.
그동안 다솜 입력기를 충분히 테스트하였고, 알고 있는 모든 버그를 잡았습니다.
그런데, daemonize 코드를 적용하는 중 2015년 9월 13일, gnome-terminal 사용 중 gnome-terminal 정지한 적이 있습니다.
이것은 그후 지금까지도 재현된 적이 없습니다. 그래서 다솜 버그인지 아닌지 확인조차 못했습니다.
다솜 입력기는 현재 반드시 필요한 최소한의 기능을 모두 갖추었으며 매우 안정적으로 작동하므로 이제 릴리즈를 준비하고자 합니다.
최종적으로 FIXME, TODO 를 확인하여 수정할 부분을 수정하고, 버전을 붙이고 deb 패키지를 위한 debian 파일들을 작성한 후 릴리즈를 할 것입니다.
약 1개월 전후하여 정식 출시 예정입니다.
(…중략…)

dasom (1.0) stable; urgency=medium

  * Initial Release

  * Dasom is an input method framework, which provides
    - Input Method Server including XIM
    - Language Engines for Korean, English
    - IM Modules for GTK+2, GTK+3, Qt4, Qt5
    - Indicators for GNOME Shell, Unity, KDE, GNOME panel

 -- Hodong Kim <cogniti@gmail.com>  Fri, 09 Oct 2015 01:21:10 +0900


Changed the name of project to Nimf

Author: Hodong Kim <cogniti@gmail.com>
Date:   Tue Dec 29 23:25:54 2015 +0900

nimf (2016.04.26) stable; urgency=medium

  * Initial Release

  * Nimf is an input method framework, it has a module-based client-server
    architecture where applications act as clients and communicate with the
    Nimf server via toolkit-specific input context modules and one socket per
    process.

  * Nimf provides
    + Input Method Server
      - nimf-daemon including XIM
    + Language Engines
      - Chinese:  nimf-sunpinyin (based on sunpinyin, under the development)
      - Japanese: nimf-anthy     (based on anthy, under the development)
      - Korean:   nimf-libhangul (based on libhangul)
    + Client Modules
      - GTK+2, GTK+3, Qt4, Qt5
    + Indicator
      - nimf-indicator (based on libappindicator3) for Unity, GNOME Panel, KDE
    + Development files

 -- Hodong Kim <cogniti@gmail.com>  Tue, 26 Apr 2016 06:31:55 +0900