‘개발’에 관한 글모음

#NetBSD Community Blog10 things i would change if i were king of NetBSD라는 글이 올라왔더군요. 하지만 “King of NetBSD”가 되어야 할 수 있는 일은 1, 2, 3번 뿐이고, 나머지는 능력, 시간, 돈에 여유가 있다면 누구나 할 수 있는 일입니다. 이 중에서 2번 “커뮤니티 기능을 웹사이트에 추가하자”는 것은 굳이 NetBSD 공식 웹사이트여야 할 필요는 없는 것 같습니다. NetBSD 위키처럼 NetBSD 재단과 별도로 사용자들의 자발적인 참여로 운영, 발전하는 모습이 더 좋아보입니다. NetBSD 재단 차원에서 나설 필요가 있는 것은 1번 “모든 메일링 리스트를 공개하자”와 3번 “웹사이트 디자인을 개선하자”인데요, 1번의 경우 기술적인 문제는 모두 공개 메일링 리스트를 이용하는 것이 기본 방침이지만, 간혹 부득이하게 공개할 수 없는 내용을 주고받아야 할 필요가 있습니다. 인사 문제 등이 대표적인 예가 되겠죠. 당사자들의 사적인 정보가 거론되기도 하니까요. 그러니 프로젝트 운영상 비공개로 논의할 수 밖에 없는 일들이 있음을 이해해주셨으면 합니다. 진짜 문제는 3번인데요, 디자인이란건 취향의 문제이고 사람마다 워낙 호불호가 엇갈리다보니 쉽게 의견을 모으기가 쉽지 않습니다. 얼마 전에도 제 생각에 지금 디자인보다는 훨씬 나은 디자인을 제안한 분이 있었지만, 한동안 메일링 리스트에서 의견이 오고 가다가 결국 흐지부지되었던 걸로 기억합니다. 로고 선정처럼 공모를 통한 후 채택되는 디자인으로 무조건 이전하는 형태가 아니고서는 수많은 사공들을 설득하는 건 힘들 것 같습니다.

다른 항목은 맡아서 할 “사람”만 있으면 되는 것들이므로 이 글을 보시는 NetBSD 사용자분들만이라도 어떻게 기여할 수 있을지 조금씩 생각해보셨으면 합니다. 보다 구체적인 실천으로 이어질 수 있으면 더 좋겠죠. 그 시작으로 일단 제가 파악하고 있는 내용을 적어보도록 하겠습니다.

(4) 베이스(src)의 코드를 pkgsrc로 옮기려면 선행되어야 할 것이 있습니다. src는 크로스컴파일이 되지만 pkgsrc는 아직 그렇지 못합니다. 그러니 속도 문제로 크로스컴파일에 의존하고 있는 오래된 기종들의 경우는 pkgsrc에 있는 소프트웨어를 쓰기가 매우 힘듭니다. pkgsrc의 크로스컴파일은 이제 걸음마단계인데요, 지금까지의 결과물은 pkgsrc/crosspkgtools에 있습니다.

(5) 패키지 업그레이드 문제는 다른 말이 필요없는 “반드시” 해결되어야 할 과제입니다. 기존의 패키지 관리 코드가 많이 지저분한 탓에 업그레이드를 구현하는게 골치아팠는데, 이번 구글 Summer of Code 프로젝트의 결과로 새 pkg_install 툴이 나왔으므로 이 코드가 정착되고 나면 이제 한 번 해 볼만한 상황이 될 겁니다. 바이너리 패키지의 구조를 알고 C를 쓸 줄 알면 그 다음은 시간과 노력의 문제입니다.

(6) 파일 시스템은 그다지 전망이 밝지 않습니다. 지금의 파일 시스템이 성능상 심각하게 뒤쳐지는 상황이지만, 다른 뛰어난 파일 시스템들이 전부 BSD와는 다른 라이센스를 채택하고 있어서 바로 가져다 쓸 수가 없습니다. 그렇다고 ZFS 같은 것을 BSD 라이센스로 새로 구현한다면 몇 년이 걸릴지 모르는 일입니다. 단기적으로는 LFS를 안정화시키는게 그나마 가능성이 있습니다.

(7) 연구하시는 분들중에 NetBSD를 쓰시는 분들이 얼마나 되시는지 모르겠지만, 적어도 네트워크 분야에서는 별로 없습니다. 대부분 FreeBSD나 리눅스를 쓰시더군요. 일단 NetBSD 홍보가 우선일 듯 싶습니다. 제가 속한 연구실에서는 NetBSD를 쓰고 있습니다. :) 저한테 물으신다면 6번부터 해결해달라고 하겠습니다.

(8), (9) 기부 많이 해주세요. :)

(10) 국내에서는 문서 번역, 생산이 더 시급해 보입니다. (이 자리를 빌어 고군분투하고 계신 luapz님께 감사를…)

끝으로, 여기서 밝힌 제 의견은 순전히 개인적인 것이며, NetBSD 재단의 입장과는 전혀 무관합니다.

Gtk 2.10.0부터는 맥 OS X에서 엑스 윈도우 없이도 직접 쿼츠를 써서 출력하도록 되었다고 해서 pkgsrc를 좀 고쳐서 시험해봤습니다. devel/pango도 최신 버젼으로 갱신해야 하더군요. 결과는 보시는 것처럼 일단 맥 화면에 잘 뜨긴 합니다. 하지만 알맹이는 전형적인 Gtk의 모습 그대로군요. gtk-demo를 실행해서 이것저것 시험해봤는데, GDK 수준에서 포팅한 것이라 맥 OS X의 유저 인터페이스하고는 거리가 멉니다. 위젯의 반응이 맥과 달라서 영 어색하네요. 아직은 좀 불안한 면도 있습니다. 몇몇 Gtk용 애플리케이션을 돌려봤는데, Sylpheed는 무난한게 돌아가는 반면 Pan은 실행이 안 되네요. 그래도 X11 없이 Gtk용 프로그램을 돌릴 수 있게되었다는 걸로 만족해야겠습니다.

패치는 pkgsrc의 그놈 패키지들이 2.16으로 갱신되는대로 pkgsrc에 추가하도록 하겠습니다. 지금은 libgnomeui-2.14.1이 Gtk 2.10.0으로 빌드가 되지 않아서 Gtk를 갱신할 수 없거든요. 하지만 pango까지는 전부 X11 없이 빌드 가능하도록 해 놓았습니다. mk.conf에 다음을 추가해주시면 됩니다.

PKG_DEFAULT_OPTIONS+=-x11

옵션을 바꾼 다음에는 graphics/glitz, graphics/cairo, devel/pango를 새로 빌드하시면 됩니다.

지난번에 거의 봐줄 수 없는 수준의 NetBSD 사용자 안내서 PDF판을 만들어놓고 무책임하게 방치하고 있다가 오늘 다시 print/tex-dhucs로 조판을 시도해봤습니다. 이번에는 db2latex을 부르기 전에 한글 문서에 맞는 몇몇 설정을 해 주는 XSL 스타일시트를 추가하고 PDFLaTeX으로 바로 PDF 문서를 생성하도록 해서 지난번보다 절차가 많이 간단해졌습니다. 결과물도 제법 그럴싸하게 나오더군요. 닥북에서 FOP로 얻은 PDF보다 품질이 좋아서 조금만 더 다듬으면 일반적인 닥북 문서 변환용으로 쓰기에도 손색이 없을 듯 싶습니다.

자세히 보면 몇군데 거슬리는 곳(머릿글, 액센트가 붙은 영문자 등)이 있지만, 전체적으로는 그럭저럭 참고 출력해 볼만한 수준은 된다고 봅니다. 다만 영문판 사용자 안내서가 EPS와 GIF로만 그림을 제공하고 있어서 EPS를 전부 PDF로 바꿔주고 DocBook에도 PDF 포맷을 추가해줘야 한다는 점, 그리고 참고문헌에서 쓰인 “&”를 그냥 .tex 파일에 집어넣기 때문에 이걸 특수문자로 인식되지 않도록 변경해줘야 한다는 점 등이 골치군요. 후자는 db2latex 스타일시트의 해당 템플릿을 적절히 바꿔주면 될 것 같은데, 그림 포맷 문제는 NetBSD의 WWW팀과 상의를 해야 할 것 같습니다.

번역된 부분이 얼마 없는 줄 알았는데, PDF로 만들어 놓으니 34쪽이나 나오는군요. luapz님께서 번역해주신 X 관련 내용도 어서 추가해야겠습니다.

(6월 16일 추가) NetBSD의 CVS 저장소에 올렸습니다. htdocs 모듈을 체크아웃하면 guide/ko/share/default-tex.xsl에 db2latex 설정 내용이 들어있습니다. print/tex-dhucs, print/latex-mk 등을 설치하면 guide/ko에서 make pdf 명령으로 사용자 안내서의 PDF 파일을 생성합니다.

작년에 처음 실시되어 매우 성공적으로 끝난 구글의 Summer of Code가 올해도 열립니다. 오픈 소스에 기여도 하고 상금도 받을 수 있는 흔치 않은 기회이기에 여름을 알차게 보내고 싶은 학생분들의 참여를 적극 권장합니다. 참여한 학생만이 아니라 멘터로 도움을 준 오픈 소스 프로젝트에도 상금이 돌아가는터라, 참가하는 프로젝트 수도 많이 늘은 것 같습니다.

NetBSD의 경우 tmpfs나 curses 라이브러리의 멀티바이트 지원(이건 거의 완성되었으나 개발자의 개인 사정으로 통합이 잠시 지연되고 있습니다. 4.0에는 못 들어갈 것 같아서 아쉽네요. 한글 지원은 yui님께서 테스트를 해 주셨습니다.) 등이 작년 Summer of Code의 결과물로 개발된 것들입니다. 올해에도 많은 프로젝트 아이디어가 나와 있습니다. 꼭 Summer of Code에 참여하지 않더라도 오픈 소스에 참여하고는 싶으나 마땅히 뭘 해야할지 모르셨던 분들께도 좋은 정보가 될 겁니다. 저널링 파일 시스템하고 pkginstall 재작성이 이번에 꼭 되었으면 좋겠군요. 지금의 파일 시스템은 많이 느려서 CVS로 pkgsrc 갱신하고서 빈 디렉토리들 지우는 동안 한참 기다려야 합니다. ext3에서는 디렉토리 삭제가 거의 순식간에 끝나더군요. pkginstall에는 패키지 갱신 기능이 없다보니 pkgsrc 사용자들마다 거의 하나씩 나름대로의 꽁수를 쓰고 있는 것 같은데요, 정작 고쳐보려고 해도 코드가 워낙 엉망이라 아무도 손 댈 엄두를 못내고 있습니다. 이번 기회에 새로 깔끔하게 구현하면서 새 기능도 추가되었으면 합니다.

FreeBSD에는 The Design and Implementation of the FreeBSD Operating System처럼 운영 체제의 내부 구조를 잘 설명해주는 훌륭한 책이 있는 반면, NetBSD에 관해서는 문서조차 빈약해서 대개의 경우 소스 코드를 직접 들여다봐야만 합니다. 그동안 NetBSD 개발자들간에 책, 위키 등등 이 열악한 상황을 타개하기 위한 방책이 여러번 논의되었지만 늘 고양이 목에 방울 달 사람이 없어서 흐지부지되다가, 최근 Julio M. M. Vidal씨가 결국 칼을 빼들었습니다. Vidal씨는 구글의 작년 Summer of Code에 참여해서 그 결과물로 NetBSD에 tmpfs를 추가했었습니다. 그때의 경험을 문서화하고자 하던 중, 아예 NetBSD의 내부 구조를 설명하는 문서를 만들자고 제안을 한 겁니다. 그 결과가 NetBSD Internals입니다. 아직 시작단계인만큼 많은 내용이 있지는 않지만, Vidal씨가 tmpfs를 구현하면서 알게 된 파일 시스템 부분에 대해서만큼은 상세하게 나와있습니다. 앞으로 많은 개발자들이 참여해서 완성도 높은 문서가 되기를 기원해봅니다(만 워낙에 개발자들이 문서화엔 유난히 게으른 모습을 보여온지라…).

새로 pkgsrc에 추가한 한글라텍으로 NetBSD 사용자 안내서를 조판해봤습니다. 닥북으로 된 원본 문서를 textproc/db2latex을 써서 라텍 파일로 변환한 것을 print/tex-hlatex으로 처리해서 PDF를 만들었습니다. 한글 문서는 영문판처럼 dsssl과 JadeTeX을 쓸 수가 없는 상황이라 닥북 스타일시트로 FO를 만들어서 PDF를 얻거나 db2latex을 쓰는 방법밖에 없는데, 두 방법 다 아직 갈 길이 멀어보이네요. db2latex과 원본 XML을 여기저기 주석으로 막아가며 간신히 에러를 피해 얻은 결과물을 보면 제목 등에서 띄어쓰기가 안 되고 참고 문헌이 아예 생성이 안되는 등 문제가 아주 많습니다. 그냥 지금 수준에선 이정도가 가능하구나 정도로 봐 주세요.

(6월 15일 갱신) print/tex-dhucs를 이용한 새 PDF판을 올렸습니다.

정확히 2년간 pkgsrc-wip에서 잠자고 있던 한글라텍 패키지를 1.0.1로 갱신해서 print/tex-hlatex에 집어 넣었습니다. pkgsrc의 teTeX 패키지가 설정 파일 등의 관리를 제대로 안하고 있어서 그런 것들을 고치느라 시간이 많이 걸렸네요. 덕분에 teTeX3-bin은 PKGREVISION이 4까지 뛰었습니다.

tex-hlatex은 3.0nb4 이상의 teTeX-bin이 필요하기 때문에 print/teTeX-bin이 아니라 print/teTeX3-bin을 설치하셔야 합니다. 최근 pkgsrc의 텍 선택 방식이 바뀌어서 etc/mk.conf에 다음과 같이 추가하면 늘 teTeX 3을 기본으로 쓸 수 있게 됩니다.

TEX_DEFAULT=teTeX3

print/tex-hlatex을 설치하면 fonts/tex-uhc-fonts-base가 같이 설치되어서 명조, 고딕, 타자 글꼴을 쓸 수 있습니다. 그 외의 다양한 글꼴을 원하시면 fonts/tex-uhc-fonts-extra도 설치하시면 됩니다.

이제 한글판 NetBSD 사용 안내서와 pkgsrc 안내서를 텍으로 조판하는 일이 남았네요. ;-)

NetBSD의 향후 로드맵이 CVS 저장소에 추가되었습니다. src/doc/ROADMAP을 보면 NetBSD 프로젝트에서 어떤 일들이 진행중이고 앞으로 어떤 것들을 계획하고 있는지를 일목요연하게 정리해 놓았습니다. 조만간 나올 3.0 이후의 NetBSD에 대해 궁금하신 분들은 한번 읽어보세요.

NetBSD 2.1 RC6 이후 일주일만에 CVS에 NetBSD 2.1 태그가 생겼습니다. -rnetbsd-2-1-RELEASE로 소스 트리를 갱신하면 받을 수 있습니다. 2.0.2가 4월에 나왔으니 거의 반년만에 안정판 버젼이 올라가는군요. 2.0.2를 쓰고 계신 분들은 슬슬 업그레이드 준비를 하셔야 할 것 같습니다. 2.0.2용 pkgsrc 바이너리 패키지를 빌드하던 개발자들도 점차 2.1로 전환할 것으로 보입니다.

2.1 발표에 맞추어 발표문을 한국어로 번역중입니다. 아무래도 마이너 업그레이드여서 번역할 분량이 그리 많지 않으니 조금씩 도와주시면 금방 마칠 수 있을 것 같네요. 많은 참여 부탁드립니다.

주말동안 pkgsrc의 GNOME 패키지들이 2.12.1로 갱신되었습니다만, 번역 문자열과 관련해서 조금 문제가 있었습니다. .po 파일로부터 .gmo 파일을 생성하는 과정에서 msgfmt를 불러쓰는데, NetBSD에 포함된 msgfmt가 좀 오래된 것이다보니 단복수를 구분해서 번역하는 경우(this와 these 등등)를 처리하지 못하거든요. 꽤 여러 패키지에서 같은 문제가 발생한 것으로 봐서 GNOME 패키지를 담당하고 있는 Julio M. Merino Vidal씨의 기계에서는 잘 동작했던 걸로 보입니다만, NetBSD 3.0 베타나 그 이하 버젼에서는 문제가 있었습니다. 일단 meta-pkgs/gnome을 설치하는데에는 아무 문제가 없도록 고쳐놓았습니다. meta-pkgs/gnome-devel은 아직 확인을 못해봤는데요, 빌드시 msgfmt과 관련해서 문제가 있으면 알려주세요. .po 파일 자체에 문제가 있는 경우만 아니라면 Makefile에 USE_MSGFMT_PLURALS=yes를 추가하는 것으로 해결됩니다.

(10월 18일) meta-pkgs/gnome-devel도 잘 됩니다.