[DE |
EN |
FR |
JA |
ES |
KO |
PT]
멋진 GNU 세상 을 찾아주셔서 감사합니다. 이번달에는 조금 기술적인 부분에 대해서 다루려고 합니다. 그렇지만 이번달에 다루게 될 몇몇 프로젝트들이 개발자들뿐만 아니라 이 분야에 능통하지 않은 독자들에게도 많은 흥미를 불러일으킬 수 있을 것입니다.
이번달의 첫번째 이야기는 Massimiliano Ghilardi씨가 제작한 텍스트기반 환경의 멀티 응용프로그램 혹은 멀티윈도우인 Twin입니다. Twin은 "Text WINdows(텍스트윈도우)" 또는, "a Text WINdow environment(텍스트모드 윈도우 환경)"의 약자입니다.
이 프로젝트의 목적은 X11의 모든 특징을 원하거나 필요하는 것이 아닌, 특히 X11의 주요 자원이 부족한 경우와 같은, 몇개의 윈도우 환경만을 갖고자하는 사람들을 위한 것입니다.
Links와 Twin을 이용한 텍스트모드 웹 브라우져는 그래픽 브라우져인 Konqueror를 사용한 X11과 비교하여 약 5%의 자원만을 요구하게 됩니다. 콘솔상에서 사용될 수 있는 또는 터미널 윈도우에서 사용될 수 있는 모든 응용프로그램들 또한 Twin기반 하에서 사용될 수 있습니다.
그래픽 카드들이 새로운 특징들로 서로 앞다투어 가려 하고, 어딘가에서 어제 불가능 했던 것이 그 다음 날 주머니에 사용가능하게 바뀔지 모르는 때에, 이 프로젝트는 어쩌면 시대에 뒤떨어진 것으로 보일 수 있습니다. 하지만, 지난 호에서 RULE 프로젝트에 대해 이미 설명했던 것과 같이, 이것은 단지 인류의 작지만 중요한 부분입니다.
많은 장소에서 사람들은 이미 구형이 되어버린 하드웨어를 오랫동안 사용하고 있으며 이것은 재정적이 부족한 나라에 있는 학교에서는 빈번한 사실입니다.
그러나, 새로운 소프트웨어라는 생각에 정상적으로 초점을 맞추지 않더라도, Twin으로 얻을 수 있는 또 다른 그룹이 있는데 그들은 장님과 눈이 매우 나쁜 사람들입니다. 그들이 브레일식 점자 터미널을 사용하는 것에 의존함으로써, 그들은 그래픽 사용자 인터페이스를 조금이나마 사용을 할 수 있습니다.
Twin을 이용해 그들은 또한 현재 멀티윈도우와 프로그램들을 지원하는 완벽한 환경을 사용할 수 있습니다. 사실 Massimiliano씨는, 처음에는 그를 매우 놀라게 했지만, 지금은 이 그룹의 사용자들로 부터 많은 피드백을 얻는다고 합니다.
이 프로젝트는 전체 프로젝트 이름과 같은 "twin" 라는 이름의 서버로 이루어져 있습니다. 이 서버는 클라이언트에 의한 접속을 허용하고, 그것의 명령에 따라 창을 생성하거나 수정합니다. 또한 이 서버는 다른 디스플레이와 장치들을 동적으로 관리합니다.
현재 Twin은 gpm과 같은 마우스 지원 콘솔과, "xterm" 마우스 프로토콜에 의해 지원되는 마우스를 사용하는 모든 temcap및 ncurses 호환 터미널을 처리합니다. 뿐만 아니라, 이 프로그램은 다른 컴퓨터에 다른 Twin 서버를 실행시킬 수 있는 기능과, 간단한 X11 드라이버 또는 그래픽부분에서 개선된 gfx-driver를 이용해 X11을 출력장치로 사용할 수 있습니다.
일반 그래픽 인터페이스(GGI:General Graphics Interface)또한 지원이 되지만, 키보드 지원 부족의 문제가 여전히 남아 있기 때문에, 이것은 아마도 모든 응용프로그램과 거의 호환이 않될 것으로 예상됩니다.
다른 콤포넌트들 중에는 libTw 라이브러리라는 것이 있는데, 이는 서버간 통신을 관리합니다. 또한, 툴킷 라이브러리인 libTT는 클라이언트에서 더 많은 그래픽 서버사이드 지향 함수들을 더 많은 창/객체 지향 함수들처럼 인식되는 출력을 제공합니다. 세번째 라이브러리인 libTutf는 유니코드 라이브러리로써, 유니코드 방식의 텍스트를 변환하는 기능을 하는데 이 라이브러리는 아마도 향후에 언젠가 마지막 오픈 이슈들이 발표될때, 표준 라이브러리를 사용함으로써 절대적이 될 것입니다.
마지막으로 클라이언트들에 대해 언급을 하겠습니다. 현재는 서버에 두개의 클라이언트가 접속할 정도로 매우 적은 수의 클라이언트를 지원합니다. 환경설정 파일인 "~/.twinrc"를 통해 설정되는 윈도우 메니저와, 콘솔을 에뮬레이트하는 간단한 터미널 모두 기술적인 문제로 서버에 통합되었습니다.
다른 클라이언트로는 추가 터미널 에뮬레이터인 twterm, xdm/gdm/kdm과 같은 로긴 메니저 twdm, 시스템을 모니터 하는 twsysmon, 실제 작업을 테스트하기 위해 사용되는 더 작은 클아이언트와 같이 서버에 출력내용을 기록하거나/하지않는 기능을 하는 유틸리티들이 있습니다.
이 프로젝트는 1993년에 DOS 프로그램으로 시작되었지만 다중 작업이라는 문제들이 곧 프로젝트의 중단을 가져오게 되었습니다. 이 프로젝트는 Massimiliano씨가 1999년에 GNU/Linux로 변환하고, 프로젝트를 새로운 플랫폼으로 포팅하면서 속도를 내게 되었습니다.
이 프로젝트는 모든 부분이 C로 짜여져 있는데, 그 이유중 하나는 Twin server가 보통 Bash shell보다 더 적은 메모리를 요구할 정도로, 프로그램이 매우 적은 메모리를 차지한다는 것입니다. 물론, Twin 또한 자유 소프트웨어입니다. - 이 프로그램은 서버와 클라이언트 모두 GNU 일반 공중 사용허가서 (GPL)을 따르고, 라이브러리들은 GNU Lesser 일반 공중 사용허가서 (LGPL)을 따릅니다.
개발은 Massimilian씨의 자유 시간이 나는데로 진척이 되고 있고, 그는 매우 많은 계획을 가지고 있다고 합니다. 첫번째로 그는 툴킷 라이브러리및 그들의 문서들을 완전히 끝낼 계획을 가지고 있고, 그 후로, 더 많은 에디터들과, 테스크바, 파일 메니저, 웹브라우져, 이메일프로그램, TTY기반 프로그램들 등등의 기능을 확장하려고 하고 있습니다.
이러한 작업들을을 위해 Massimiliano씨는, 여전히 해야할 많은 것들이 남아있기 때문에, 많은 도움에 대한 요청을 강하게 하고 있습니다. 예를 들어 그는 통신 라이브러리 문서화작업, libTW 화면보호기 제작, twdialog 완성, twclip에 대한 Twin 작업및 대화 동일화 작업기, 클립보드의 내용들을 복사하거나 붙이기 기능을 하는 유틸리티에 대한 지원자를 찾고 있습니다.
프로젝트 참여에 관심을 가지고 있는 분들은 메일링 리스트를 훑어보기를 바랍니다. 메일링 리스트를 보면, 예를 들어, 사용자들은 데비안 배포본의 안정버전의 갈래에 이미 Twin이 들어가 있다는 것을 찾을 수 있을 것입니다.
계속해서 C++ 개발자들을 좀더 편하게 해줄 몇가지 프로젝트에 대해 다룰 것인데, 이 프로젝트들은 모두 Christian Holm 이 2002년 12월 1일 경에 발표했습니다.
사람들이 컴퓨터와 의사소통을 하려면, 의사소통 과정에서 사용될 공통의 언어에 대해 합의해야 합니다. 특히 의사소통이 실시간으로 발생하는 것이 아니거나 매우 복잡하다면 더욱 그렇습니다. 예를 들자면 프로그래밍 언어나 환경 설정 파일 같은 경우가 있습니다.
근본적인 문제는 그러한 언어들의 문법 검사, 읽기와 평가를 위한 함수들이 매우 복잡해지기 쉽다는 것입니다. 그리고 정의나 문법의 변화가 필요할 때, 종종 버그를 찾는데 매우 시간이 소모되는 검색을 초래합니다.
게다가 그러한 함수를 작성하는 것은 큰 지적인 업적이 없는 지루한 작업이 되기 쉬운데, 프로그래머들은 이것을 피하고 싶어합니다.
이러한 이유로, 문법 정의의 번역을 문법을 읽어들일 수 있는 함수로 자동화할 수 있는 도구들이 개발되었습니다. 물론 이것은 문법 정의 자체를 기계가 읽을 수 있어야 함을 의미합니다. 그러한 정의중 아마도 가장 흔한 형태는 "Lookahead Left to Right Parsing"(LALR) 문맥-자유 문법일 것입니다.
제일 인기있고 좋은 LALR(1) 파서중의 하나는 Bison인데, [8] Yacc 에 상응하는 GNU 프로젝트입니다. Yacc 자체는 "Yet Another Compiler- Compiler" 를 의미하며 Bison 은 Yacc 에서 Bison 으로의 전환을 쉽게 하기 위해서 의도적으로 Yacc 와 호환되도록 유지되었습니다.
종종 Bison 과 맞물려서 돌아가는 어플리케이션으로는 Flex 가 있는데, [9] 소스 입력을 하나의 식(expression) 으로 분리가 가능하도록 하는 루틴을 생성하는데 사용될 수 있습니다. 왜냐하면 Flex 가 패턴 매칭을 위한 소스 코드의 생성을 자동화하기 때문입니다. 또한 Flex 는 다른 프로그램에 대한 - 이 경우는 "Lex" - GNU-대체물 이기도 합니다.
이 짧은 소개가 전문적이지 않은 독자들에게도 이해되었기를 바랍니다; 만약 이에 대해 더 알고 싶다면 웹은 몇군데의 좋은 진입점을 제공할 것입니다.[10]
Bison [8] 과 Flex [9] 모두 C 소스 코드를 생성합니다. 이 코드가 C++ 에서 사용되면, 전역 이름공간을 더럽히게 됩니다; 또한 C++ 인터페이스도 이용할 수 없습니다.
이러한 이유에서 Christian Holm Christianses 은 Yacc/Lexx-- 라 불리는 헤더 파일 꾸러미를 작성했습니다. 이 꾸러미는 Bison 과 Flex 의 C 코드 출력을 C++ 클래스에서 캡슐화가 가능하도록 합니다. 여기서, 파서/스캐너 규약에 대한 변경사항은 최대한의 유연성이 가능하도록 하기 위해서 의도적으로 최소한으로 유지되었습니다.
사실 Flex 자체가 C++ 소스 코드를 생성하는 기능을 제공하지만, 결과물의 유연성이 없어서 Christian 이 링킹을 할 수 없었고 또한 Bison 에 의해 생성되는 파서 클래스와 잘 맞지도 않았습니다. 그래서 그는 두가지 모두를 위한 공통의 캡슐화를 원했습니다. 사실 그로 하여금 이 프로젝트를 시작하게 한 것은 Bison 의 C 출력과 Flex 의 C++ 출력간의 이러한 비대칭성 이었습니다.
직접 C++ 출력을 생성할 수 있는 장점을 가진 bison++ 과 같은 프로젝트들과 비교해보면, Christian 은 그의 방식의 장점을 사용된 Yacc/Lex 구현의 내부에 독립적이라는 것으로 꼽습니다. 그래서 Yacc/Lex 프로젝트에서의 변화에 대해 보다 안정적이고 그 프로젝트의 내부 수정사항에 의해 바로 영향을 받지 않습니다.
하지만 이상한 동작을 나타내는 Yacc/Lex 클론들도 있고 POSIX 호환이 되지 않는 것들도 있습니다. 이것들은 사용하기에 의심스러울 수 있으며, 이 프로젝트의 특별한 문제입니다.
그래서 Christian 은 가까운 시일안에 보다 많은 Yacc/Lex 구현을 시험해볼 계획을 갖고 있으며 이 부분에서의 도움에 대해 기뻐할 것입니다. 또한 다른 플랫폼, 다른 컴파일러를 이용한 시험을 돕는 것 역시 환영합니다.
GNU Readline Library [11] 는 다용도의 명령행을 다른 프로젝트에 통합할 수 있도록 하는 기능을 제공합니다.
GNU Readline 의 기능 중에는 vi 와 EMACS 모드가 있는데, 이전의 입력을 저장하고, 그것을 다시 만들어내고 다시 편집하거나 csh 쉘과 비슷한 방식으로 이전에 입력된 명령의 처음 부분을 완성시킬 수 있습니다.
Christian Holm Christense 이 작성한 Readline-- 프로젝트는 C++ 프로그래머들이 C++ 클래스를 이용하여 GNU Readline Library 에 접근할 수 있도록 합니다. 자신의 어플리케이션에 명령행 인터페이스를 포함하고자 하는 C++ 개발자가 이 프로젝트의 주 대상이라는 점은 놀라운 일이 아닙니다.
이 프로그램은 Christian 자신이 자신의 C++ 파서를 시험해보기 위해 명령행 인터페이스를 필요로 할 때 시작되었으며, 이전의 프로젝트를 만들기 전의 기간동안에의 작업입니다.
가장 큰 문제는 라이브러리가 현재까지는 아직 완벽한 쓰레드 지원을 하지 못하므로 복잡한 어플리케이션에서는 유의해서 다루어져야 합니다. 인터페이스를 개선하는 것 뿐 아니라 이 문제점을 해결하는 것은 이 프로젝트에 대한 Christian 의 다음 계획입니다. 왜냐하면 그가 인터페이스가 완벽하더라도, 어떤 면에서는 직관적이지 않다고 생각하기 때문입니다.
Option--으로 Christian은 명령줄 옵션에 대해, C++ 프로그램이 프로그램이 시작될때 주어졌던 명령줄 옵션을 찾거나 얻어내도록 하는 라이브러리인 C++ 해독기를 제공합니다.
비슷한 프로젝트와 비교하여 이 프로젝트의 주요한 이점은 가능한 옵션들이 프로젝트를 매우 유연하게 만드는 템플릿-클래스들에 의해 나타내어 진다는 것입니다. 다만 Option--은 오직 위치와 상관없는 문장들에 대해 작동을 하기 때문에, 만약 사용자들이 명령줄에서 특정한 위치에 특정한 옵션을 사용하려고 구문으로 강제 옵션을 주고자 한다면, 옵션은 좋은 선택이 아닐 것입니다.
처음에 이 프로젝트는 Christian씨에 의해 쓰였는데,그 이유는 ROOT 프로젝트에서 명령줄 옵션의 필요에 의한 것이었습니다. 물론, 그 후에 이 프로젝트는 다른 용도로 사용이 되었습니다.
하지만, 그가 스스로 몇가지 필요한 것들이 있다는 것을 발견했을 때, Christian씨는 그 프로젝트를 완성시켰고, 현재까지 추가적인 테스트를 비롯해 별다른 계획이 없을을 정도로 매우 안정화 되었다.
마지막 프로젝트는 Christian Holm Christensen에 의해 진행되고 있는 Thread-- 인데 이 프로젝트는 C++ 프로그램에서 Threads를 사용하기 위해 시작되었습니다.
"Threads"의 개념을 모든 독자들이 잘 알고있는 것은 아닐 것이므로 짧게 설명을 하고 넘어가도록 하겠습니다.
기본적으로 모든 컴퓨터 작업은 선형적입니다. 만일 컴퓨터가 작업을 할당 받으면 내부의 처리 공간에서 차례차례 명령을 실행해 나가며 대부분의 경우 한번에 하나의 프로그램이 실행됩니다.
몇개의 프로그램을 동시에 동작하도록 하기 위해서-"멀티 태스킹" 이라고 불리는 - 컴퓨터의 커널은 작업과 작업을 순차적으로 돌려가면서 실행을 하게 됩니다. 이러한 작업들 각각은 순서대로 반복되며 실행되지만 이러한 방법은 컴퓨터 내의 한정된 자원을 각 프로그램들이 나눠서 일부분씩만 사용하게 할 수 밖에 없습니다.
프로그램들이 보다 복잡하게 동작하는 것이라면 이렇게 직접적으로 순차적인 실행을 하는 것은 점점 더 시스템을 느리게 만들고 자원을 비효율적으로 사용하도록 만든다. 이를 해결하는 하나의 방법은 쓰레드(threads)를 사용하는 것입니다.
서로 다른 쓰레드 간에 정보를 주고받고 함께 동작하도록 하기 위해서는 물론 이를 제어하는 것과 그러기 위한 기준이 있어야 하며 C++ 에서 이러한 역할을 하도록 만들어진 것이 Thread-- 입니다.
Boost::Thread, ZThread 혹은 일반적인 C++ 와 다르게 Thread-- 는 소스코드의 선행처리기로 배포되지 않습니다. 이렇게 특성화 시킨것은 라이브러리를 작고 유연하게 만듭니다.
Christian은 원래 Readline--의 쓰레드의 안정성을 검사하기 위해 Thread-- 를 작성하기 시작했지만 2.95.x 이하 버전의 GCC는 문제가 많고 이때문에 GCC 의 버전도 체크하기 시작했습니다.
따른 문제들은 솔라리스와 Win32에서의 쓰레들이 사용하는 신호(semaphore) 였는데 그는 이러한 문제를 다른 플렛폼들에서 테스트해볼 수 없었습니다. 이 문제에 대해 도움을 줄 수 있다면 매우 환영받을 것입니다.
Christian에 의해 진행중인 이 프로젝트에 대한 소개는 이것으로 충분하리라 생각합니다. 멋진 GNU 세상의 일반 독자들은 다음의 두가지 기본적인 사항에 대해 언급되지 않았다는 것을 깨달아야 합니다.
첫째: 이 프로젝트들에 사용된 프로그래밍 언어는 GNU Autotools 과 C++입니다. 둘째 : 모든 프로젝트들은 GNU Lesser General Public License(LGPL)하에서 자유 소프트웨어로 사용될 때만이 사용 가능합니다. 이들에 대한 모든것들은 Christian의 C++ 페이지에서 찾아볼 수 있을 것입니다. [7]
멋진 GNU 세상의 40호에서 소개되었던 것 처럼, 유럽 자유소프트웨어 재단에서는 2002년 4월 30일에 유럽 위원회에 추천서를 제출했습니다. 유럽의 50개이상의 협회에 걸쳐 지원이 되고 있는 이 추천서는 자유 소프트웨어에 우선권을 주는 것을 제안하기 위해, 첫부분에 유럽 지역및 유럽권 국가들에 대한 자유소프트웨어의 장점이 설명되고 있습니다.
이 추천서의 배경은 지난해에 결정된 연구및 개발에 대한 유럽 지원에 대한 제 6 회 프레임웍 프로그램[15]이었습니다. 이 프로그램은 4년동안 계속 진행되어 왔으며, 과학분야에 대한 대부분의 유럽기금을 포함합니다. 이 프로그램의 중요한 목표중 하나는 연구와 개발에 대한 지원금을 통한 유럽의 경제및 사회의 발전입니다.
제 5 회 프레임웍 프로그램이 자유소프트웨어에 대한 몇개의 초기안을 이미 포함하고 있었기 때문에, 제 6 회 프레임웍 프로그램은 처음에는 어떤 식으로도 자유소프트웨어를 발전시킨다는 계획을 포함하고 있지 않았습니다. 그래서 유럽 자유소프트웨어 재단은 앞에서 이야기한 추천서를 제출하게 된 것입니다.
2002년 12월 17일에 제 6회 프레임웍 프로그램이 종결되고, 이 추천서가 자유소프트웨어를 프로젝트 제안서에 채택하게 했다는 소식을 듣게 되는 것 같았습니다. 컴퓨터 과학및 정보기술의 지원금을 관리하는 "정보 사회 기술" (Information Society Technologies) 작업 프로그램은 현재 평가 과정에서 자유소프트웨어에 프로젝트를 줄 수 있는 문항을 포함하고 있습니다.
이것은 유로화 1,7250억원을 포함한 IST 작업 프로그램의 전체 예산이 자유소프트웨어에 대해 효과적으로 개방되었다는 것을 의미합니다. 이것은 꼭 자유소프트웨어 지원금의 지금까지의 유용했던 기금 중, 이 경우를 제외하지 않는 다면, 가장 많을 듯한 금액입니다.
현재 이 프레임웍 프로젝트안에서 자유 소프트웨어를 위해 혹은 그것을 가지고 프로젝트를 시작하는 회사, 대학교, 연구기관들을 지원하기 위해, 2002년 12월 18일, 유럽 자유 소프트웨어 재단은 모든 관련 모임에 협조를 부탁하는 요청서를 보냈습니다.
이것의 목표는 이 지원금이 독점 소프트웨어에 쓰여지는 것을 보지 않기 위해, 어떻게든 제 6 회 프레임웍 프로그램이라고 이름주어진 각각의 중요한 분야에 자유소프트웨어 프로젝트를 만드는 것입니다.
Brussels에 있는 관리국과 함께, 이 프로젝트들을 조직화하고, 조정하고, 완성시키는 데는 엄청난 시간과 노력이 걸립니다. 하지만, 유럽 자유소프트웨어 재단은 자유소프트웨어 프로젝트들에 재단이 만들어 냈던 그 가능성들이 사용되는 것을 보기위해 최선을 다할 것입니다.
이번 호의 마지막부분으로 다른 주목할 만한 칼럼을 독자들에게 소개하는 것은 필자의 기쁨이라 생각합니다. 멋진 GNU 세상의 오랜 구독자인 Mario Fux 씨는 지난해부터 학교에서 특별히 자유 소프트웨어에만 관련된 칼럼을 쓰기 시작했습니다.
현재까지 그는 독일어와 영어로 쓰여진 " TUX&GNU@school" 의 5번째 칼럼을 끝냈으며, 유럽 자유소프트웨어 재단 홈페이지에 새로운 집도 만들게 되었습니다. [17] 필자는 Mario씨 뿐 아니라, 일종의 편집위원으로서 Mario씨를 지원하고 있는 Christian Selig씨나 Kristian Rink씨 모두 미래에 최고이길 바라고, 특별히 그것을 훑어보는 교육분야의 독자들에게도 찬사를 보냅니다.
멋진 GNU세상의 이번 호를 마치며, 다른 때와 같이 저는 질문, 아이디어및 비평을 이메일로 받고자 합니다. [1]
이 주소는 또한 프로젝트 제안들이 보내지는 주소이기도 합니다. 그리고 시간을 내주는 모든 저자들에게 찬사를 보내고 싶습니다. 이것은 글을 올리게 하려는 의도적인 언급같이 수심쩍어 보일지도 모르지만, 이 방법은 여러분의 프로젝트에 대해 다른 사람들에게 알리는 좋은 방법이 될 것입니다.
그리고, 또한 여러분의 프로젝트가 그리 중요하지 않다는 것에 염려를 하지 말기를 바랍니다. 사실 조금이라도 더 재미있는 내용을 쓰기 위해서 필자는 여전히 흥미가 없을 듯한 프로젝트라도 조금이라도 더 만나야 합니다.
이번달은 이것으로 충분하리라 생각합니다. 다음호에서 뵐때까지 안녕히 계십시요.
자유 소프트웨서 재단과 GNU 프로젝트에 대한 질문은
gnu@gnu.org로 보내주십시오.
그밖의 연락 방법에 대해서는 연락처 안내
부분을 참고하시기 바랍니다.
게오르그의 멋진 GNU 세상에 대한 의견은 영어 또는 독일어로
column@gnu.org 앞으로,
홈페이지 자체에 대한 질문은
webmasters@gnu.org로,
기타 질문은
gnu@gnu.org로 보내주십시오.
Copyright (C) 2003 Georg C. F. Greve
한국어 번역: 멋진 GNU 세상 한국어팀
저작권에 대한 본 사항이 명시되는 한, 어떠한 정보 매체에 의한 본문의 전재나 발췌도 무상으로 허용됩니다.
Last modified: Wed Jan 22 18:38:33 CET 2003