Changwoo Hacks

Hack n. : A non-obvious solution to an interesting problem

2018/06/07

오픈소스 역사: HANGUL_KEYBOARD_TYPE 환경 변수

by 류창우

내가 1999년에 han.comp.os.linux 뉴스그룹에서 제안해서 한동안 통했던 풀뿌리 표준이 하나 있었다. 바로 HANGUL_KEYBOARD_TYPE 환경 변수. HANGUL_KEYBOARD_TYPE이라는 환경 변수의 값에 따라 두벌식이나 세벌식을 설정하자는 아주 단순한 제안이었는데 꽤 오랫동안 여러 애플리케이션에서 사용되었다.

다음은 당시에 뉴스그룹에 썼던 실제 (최종인지는 불확실) 제안 내용이다.

From: Changwoo Ryu
Subject: [제안] 한글 키보드 타입 결정 방법에 대한 약속 (3rd)
Newsgroups: han.comp.os.linux
Date: 19 Jan 1999 10:29:55 +0900

제안: 

1. 한글 키보드 타입을 알아내 동작하는 프로그램은,
   "HANGUL_KEYBOARD_TYPE" 환경 변수의 값에 따라 한글 키보드 타입을
   결정한다.  

2. 각 한글 키보드에 대한 "HANGUL_KEYBOARD_TYPE"의 값은 다음과 같다.

   이벌식        : "2"
   세벌식 389    : "389"
   세벌식 390    : "390"
   세벌식 최종   : "3FINAL"
   세벌식 순아래 : "3NOSHIFT"

3. 해당 프로그램에 "HANGUL_KEYBOARD_TYPE"과 동일한 목적의
   "HANGUL_KEYBOARD_TYPE" 이외의 환경 변수가 있다면, 그 환경 변수가
   "HANGUL_KEYBOARD_TYPE"보다 우선한다.

4. "HANGUL_KEYBOARD_TYPE"의 값은 프로그램이 기본으로 설치된 상태에
   주어진 어떤 세팅보다 우선한다.


주석:

0. 이 제안은 프로그램이 어떻게 동작해야 하는지 정확히 기술한 스펙도
   아니고, 프로그램을 제한하려는 규칙도 아니다.  누군가 `여기 안 써
   있는 건 어떻게 하지?'라고 질문한다면, 당연히 `어떻게 하든
   상관없다'가 무조건 정답이다.

   아주 자세한 사항이 필요하다고 생각되면 이 제안을 포함하는 좀더
   강력한 "규정"을 새로 만들 수도 있을 것이다.  하지만 여기서는 그러한
   자세한 사항은 배제한다.

1. 모든 유닉스 계열 프로그램에서 사용할 수 있는 방법이 환경변수이므로,
   이 방법을 사용한다.  X 리소스 이름등은 논외로 한다.

   즉, `getenv ("HANGUL_KEYBOARD_TYPE")'의 리턴 값에 따라 결정한다.

2. 기본 자판이 무엇인가의 문제는 여기에서 전혀 언급하지 않았으므로, 각
   프로그램이 알아서 결정한다.

   여기에 열거된 모든 자판을 지원하지 않을 경우, 대체 목적의 자판을
   사용해야 하는 가(예: 값이 "390"인데 이 자판을 지원하지 않아서
   "3FINAL"을 대신 사용해야 하는가?)의 여부도 여기에서 전혀 언급하지
   않았으므로 프로그램이 알아서 결정한다.

3. 지금 이미 사용중인 프로그램별 환경 변수와 "HANGUL_KEYBOARD_TYPE"
   중에 어느쪽이 우선하는 가를 지정함.

4. 기본으로 설치되는 세팅은, 기본 X 리소스 파일(app-defaults/Hanterm
   등), /etc/han.cfg 와 같은 글로벌 세팅 파일들을 포함한다.  사용자가
   "HANGUL_KEYBOARD_TYPE" 값을 결정하는 것만으로 바꿀 수 있도록 함.

   ~/.programrc 와 같이 기본으로 설치되는 것이 아니면서, 사용자별로
   키보드 타입을 바꿀 수 있는 환경 변수 이외의 방법이 있을 수도 있다.
   여기에 대해 어느쪽이 우선하는지는 여기서 지정하지 않는다.


바뀐점:

* "3" 없앰
* "3_89", "3_90", "3_FINAL"의 밑줄 없앰
* "3NOSHIFT" 추가
* 설명 -> 주석
* 주석에 0번 (전체 주석) 추가

-- 
Changwoo Ryu

han.comp.os.linux 뉴스그룹에서 여러가지 의견을 들어가면서 결정된 최종 제안이었다. 한텀, 이맥스 등 한글 입력 기능이 내장된 애플리케이션에서 (당시에는 리눅스 환경에서 한글 입력기라고 할 만한 게 아예 없었다) 실제 구현됐고, 아직도 github에서 검색해 보면 오래전 코드나 문서, 이맥스 설정 파일과 같은 잔재를 찾아볼 수 있다.

https://github.com/search?q=HANGUL_KEYBOARD_TYPE&type=Code

다음과 같이 이맥스의 korea-util.el 파일에도 아직 남아 있으니 꽤 널리 받아들여진 방식이라고 말할 수 있다. (엄밀히 말해서 약간 구현이 잘못됐지만.)

(defvar default-korean-keyboard
   (purecopy (if (string-match "3" (or (getenv "HANGUL_KEYBOARD_TYPE") ""))
      "3"
    ""))
   "The kind of Korean keyboard for Korean input method.
\"\" for 2, \"3\" for 3.")

이 풀뿌리 표준의 성과는 당시 여러 개발자들이 만든 여러 한글 입력 애플리케이션 사이에서 공통 설정 방법을 합의한 것이라고 할 수 있었다. 내가 직접 관리했던 애플리케이션은 하나도 없었고 패치를 만들어 보내는 정도였지만 고맙게도 여러 개발자들이 이 방식을 따라 주었다.

이를 구현했던 애플리케이션은 시간이 지나면서 자연스럽게 하나 둘 (이맥스만 빼고) 수명을 다했다. GTK와 같은 오픈소스 GUI 툴킷이 널리 쓰이면서 하나의 한글 입력기를 통해 여러 애플리케이션을 사용할 수 있는 시대가 되었고 이 풀뿌리 표준의 목적은 사라져 버렸다.

만약 지금 시대에 비슷하게 한국어 사용자 모두가 합의해야 하는 오픈소스 표준이 필요한 일이 다시 생긴다면 상황이 많이 다르기 때문에 이렇게 할 자신은 없다. 오늘날은 유즈넷 뉴스그룹과 같은 대표성 있는 커뮤니케이션 채널도 더 이상 없고, 개발자들의 백그라운드도 다르며, 관련된 여러 업스트림 프로젝트와 연결되어 있는 부분이 많기 때문에 관련된 한국어 사용자들만 얘기해서 결정할 수 있을 정도로 간단하지 않다.

Luke: Vader… Is the dark side stronger? (다스 베이더… 다크 사이드가 더 강한가요?)

Yoda: No, no, no. Quicker, easier, more seductive. (아니. 아니. 아니야. 더 빠르고, 쉽고, 유혹적일 뿐.)

  • 스타워즈 에피소드 5, 제국의 역습 중에서

많은 사람들이 오픈소스 관련 문제에 닥쳤을 때 쉽게 커뮤니케이션을 포기하고 로컬 패치와 한국형 배포판 같은 것을 결론으로 내세우는 이유는 그러는 편이 더 쉽기 때문이다. 하지만 쉬운 것은 쉬운 만큼 취약하기 마련이다. 커뮤니케이션은 어렵고 느리고 노력의 결과가 나쁠 수도 있지만, 누구 말처럼 실패할 것이라고 미리 비관하고 포기한다면 발전은 없을 것이다.

tags: history - opensource - l10n - 역사 - 오픈소스 - 한글 - 의견