인터넷/컴퓨터/Korweb Issue

해커가 되는 방법 (How To Become A Hacker)

코웹 2008. 8. 17. 13:18
해커가 되는 방법

최근 개인적인 문제로 인해 인터넷 검색을 하다가 우연히 내게 다가온 글이 있어서 소개하고자 한다. 복잡한 현대를 살아가는 우리에게 한번쯤은 자신을 돌아보고 생각을 하게 만드는 글이기에 여러분이 컴퓨터 관련분야에 종사를 하든 하지 않든간에 어떠한 분야의 전문가가 되고 싶어한다면 끝까지 읽어보기를 권한다.

원문 :
How To Become A Hacker     저자 : 에릭 S.레이먼드 (Eric S.Raymond)


왜 이 문서를 만들었는가?

자곤 파일 (주1)의 편집자로서, 나는 "어떻게 하면 일류 해커가 될 수 있는가?"라는 질문을 자주 받는다. 그러나 한가지 이상한 점은 이러한 중요한 질문에 대한 어떠한 FAQ나 문서도 없어 보인다는 것이었다. 이러한 이유로 인해서 나는 이 문서를 만들게 되었다.

(주1) 자곤(jargon)이란 특정한 분야에서 사용되는 기술 전문 용어를 뜻하는 말이며, 이글에서 언급된 자곤 파일은 컴퓨터 분야의 용어들에 대한 정의를 담고 있는 일종의 용어 사전이다.

해커란 무엇인가?
자곤 파일에는 "해커"라는 단어에 대한 많은 정의들이 포함되어 있는데, 대부분 문제를 해결하고 한계를 극복하는 기술적인 숙련도와 명석함에 초점을 맞추고 있다. 그러나 만약 여러분이 해커가 되는 방법을 알고 싶다면 2가지만이 그 정의에 부합할 것이다. 숙련된 프로그래머들과 네트워크 전문가들이 문화를 공유하는 공동체가 있으며 그 역사는 최초의 시분할 미니 컴퓨터와 아르파넷(ARPAnet)이 실험되던 초기 시절인 수십년 전으로 거슬러 올라갈 수 있다 . 이 문화의 구성원들이 바로 "해커"라는 말의 기원이 되었다. 해커들은 인터넷을 만들었으며 현재와 같은 형태의 유닉스 운영체제를 만들었다.

또한 해커들은 유즈넷을 운영하고 WWW를 움직이게 만들고 있다. 만약 여러분이 이러한 문화에 속해 있거나 이러한 문화에 기여한 바가 있다면, 그리고 이 문화에 속해 있는 사람들이 여러분을 알고 있고 여러분을 해커라고 부르고 있다면 다름아닌 여러분이 자신이 바로 해커인 것이다.
해커의 사고 방식은 소프트웨어 해커 문화에 국한되지는 않는다. 예를 들면 해커의 마음가짐으로 전자 공학이나 음악과 같은 분야에 관심을 쏟는 사람도 있으며 실제로 고품격의 예술과 과학 분야에서 이러한 사실을 발견할 수 있다.

소프트웨어 해커들은 그들과 유사한 정신을 가진 문화가 있다는 것을 인정하며 그러한 문화에 참여하고 있는 사람들을 해커라고 부를 수도 있을 것이다. 그리고 어떤 해커들은 해커의 본질은 해커가 일하고 있는 특정한 분야나 수단에는 관계가 없다고 주장하기도 한다. 그러나 이글의 나머지 부분에서 우리는 소프트웨어 해커의 기술과 마음가짐, 그리고 해커라는 말의 기원이 된 공유된 문화의 전통에 대해서 조명해 볼 것이다.

실제로는 그렇지 않지만 자신들이 해커라고 큰소리로 주장하는 또하나의 집단이 있다. 이들은 주로 청소년기의 남자 아이들로 구성되며 컴퓨터 시스템에 침입하거나 전화를 무료로 사용할 수 있도록 시스템을 조작 (주2)하는 일을 한다. 그러나 실제 해커들은 이들을 "크래커(craker)"라고 부르며 자신들과 연관시키는 것을 원하지 않는다.

대부분의 해커들은 크래커들이 게으르고 무책임하며 그리 명석하지 않다고 생각한다. 또한 열쇠없이 자동차 시동을 걸 수 있다(주3)고 해서 자동차 엔지니어가 되는 것은 아니듯이 시스템의 보안을 뚫고 들어갈 수 있다는 것이 해커를 의미한다고 생각하지 않는다. 그러나 불행하게도 많은 저널리스트와 작자들은 크래커를 지칭할 때 해커라는 단어를 사용해 왔으며 이점이 해커들을 항상 못마땅하게 만들어 왔다.

(주2) 원어인 phone phreak는 전화를 무료로 사용할 수 있도록 시스템을 불법 개조하거나 조작하는 행위를 말한다.
(주3) 원어로 쓰인 hotwire는 점화 플러그에 연결된 전선을 단락시켜서 열쇠없이 자동차의 시동을 거는 것을 말한다.

해커와 크래커의 근본적인 차이점은 해커는 무엇인가를 만드는데 반해서 크래커는 그것을 파괴한다는 것이다. 만약 해커가 되고 싶다면 이글을 계속 읽어나가면 되겠지만 크래커가 되기를 원한다면 뉴스 그룹으로 가서 그곳의 글들을 읽고 5년에서 10년 정도의 세월을 교도소에서 보내게 될 크래킹을 준비하면 된다. 자신이 생각만큼 그리 똑똑하지 못하다는 사실을 깨달았을 때는 이미 늦은 후가 될 것이다. 이것이 내가 크래커에 대해서 말하고 싶은 전부이다.

해커의 마음가짐

해커는 문제를 해결하고 무엇인가를 만들며 자유를 신뢰하고 자발적인 상호 협력을 믿는다. 해커로 인정받기 위해서는 이러한 마음가짐를 갖고 있는 것처럼 행동해야 할 뿐 아니라 진심으로 이러한 태도를 갖고 있어야만 한다. 그러나 단지 해커 문화 안에서 인정을 받기 위해서 이러한 태도를 취하고 있다면 그것은 중요한 점을 간과한 것이다. 그러한 것들을 믿는 사람이 된다는 것은 여러분 자신이 학습하는데 도움이 되고 지속적인 동기를 제공할 수 있기 때문에 중요한 일이다. 모든 창조적인 분야가 그러하듯이 대가가 되는 가장 효과적인 방법은 대가들의 품성과 태도를 지식뿐만 아니라 감성적인 측면까지 그대로 모방하는 것이다. 따라서 만약 해커가 되기를 원한다면, 다음과 같은 것들을 믿을 때까지 계속해서 반복하라.

1. 이 세계는 풀리지 않은 매력적인 문제들로 가득차 있다.

해커가 되는 것은 매우 재미있는 일이지만 많은 노력이 필요하며 그러한 노력을 기울이기 위해서는 동기가 부여되어야 한다. 성공한 운동 선수들은 자신의 신체를 발달시키거나 육체적 한계를 극복함으로써 얻을 수 있는 기쁨으로부터 동기를 부여받는다. 이와 유사하게 해커가 되기 위해서는 문제를 해결하고 자신의 기술을 숙련시키고 지적 능력을 훈련시키는 과정으로부터 원초적인 희열을 느낄 수 있어야 한다.

만약 여러분이 이러한 느낌을 가길 수 없는 사람이라면 해커가 되기 위해서 그러한 사람이 될 필요가 있다. 그렇지 않다면 여러분의 해킹 에너지는 섹스나 돈 그리고 명성과 같은 종류의 유혹에 의해서 약해질 것이다. 또한 문제를 해결하기 위해서 필요한 모든 사항을 알고 있지 못한다 하더라도 조그만 부분을 해결하면 그것을 통해서 나머지 부분들도 순차적으로 해결할 수 있다는 자신의 학습 능력에 대한 확신을 해커가 될 때까지 증진시켜 나가야 한다.

2. 이미 해결된 문제를 중복해서 풀어서는 안된다.

창조적인 사람은 매우 가치있고 제한된 자원이다. 따라서 이들은 새롭게 해결해야 할 매력적인 문제가 많이 있는 상황에서 이미 해결된 문제를 다시 해결하기 위해서 소모되어서는 안된다. 해커로서 행동하기 위해서는 다른 해커들의 연구 시간이 소중하다는 사실을 믿어야만 한다. 정보를 공유하는 것과 다른 해커들이 오래된 문제를 다시 해결하는 대신 새로운 문제를 해결할 수 있도록 자신이 해결한 문제의 해답을 다른 해커들에게 공개하는 것은 거의 도덕적인 의무 사항이다.

(자신의 창조적인 성과물을 모두 공개하는 해커들은 다른 해커들로부터 최상의 존경을 받겠지만, 이것이 자신의 성과물을 모두 공개해야만 한다는 의미는 아니다. 숙식을 해결하거나 컴퓨터를 사용하는 등의 생계를 유지하기 위해서 자신의 창조적인 성과물을 유료로 판매하는 것은 해커의 가치나 윤리에 전혀 어긋나지 않는다. 또한 가족을 부양하거나 심지어 많은 돈을 벌기 위해서 자신의 해킹 기술을 판매하는 행위도 그 일을 하고 있는 동안 자신이 해커라는 사실을 망각하지만 않는다면 문제되지 않는다.)

3. 권태와 단순 반복 작업은 해악이다.

일반적으로 창조적인 사람들과 해커들은 권태를 느끼거나 단순 반복적인 일을 계속해서는 안된다. 왜냐하면 이러한 것들은 새로운 문제를 해결할 수 없게 만들기 때문이다. 이렇게 인적 자원을 낭비되는 것은 모든 사람에게 유감스러운 일이다. 따라서 권태와 싫증은 단순한 나쁜 것이 아니라 실제적인 해악을 끼치는 것이다.

해커로서 행동하기 위해서는 자신을 위해서가 아니라 모든 사람들, 특히 다른 해커들을 위해서 자동화를 통해 가능한 모든 반복적인 요소를 없앨 수 있다고 믿어야만 한다.

(그러나 이러한 점에도 한가지 분명한 예외가 있다. 해커들은 때때로 의심점을 확인하거나 기술을 습득하기 위해서 또는 다른 방법을 통해서 얻을 수 없는 경험을 얻기 위해서 반복적이고 싫증을 느낄 만한 일을 하기도 한다. 하지만 이것은 선택에 의한 것일 뿐이다. 그 누구도 권태롭고 지루한 일을 강요 받아서는 안된다.)

4. 자유는 좋은 것이다.

해커들은 본질적으로 권위주의를 싫어한다. 여러분에게 명령을 내릴 수 있는 사람이 있다면 그 사람은 여러분이 매력을 느껴서 해결하고자 하는 문제를 풀지 못하도록 중단시킬 수도 있을 것이다. 또한 권위주의적인 방식으로 이루어진 일들은 일반적으로 끔찍할 정도로 어리석은 이유로 시작된 것들이다. 따라서 권위주의적인 태도를 발견하면 여러분과 다른 해커들이 질식하지 않기 위해서 싸워야만 한다.

(이것은 모든 권위에 대항해서 싸워야 한다는 것을 의미하는 것은 아니다. 아이들은 선도가 필요하며 범죄자들은 격리될 필요가 있다. 해커는 권위에 의한 명령을 따름으로써 동일한 시간에 자신이 원하는 것보다 많은 것들을 얻어낼 수 있다면 특정한 종류의 권위를 수용하는 것에 동의할 수 있다. 그러나 이러한 형태는 제한되고 의식적인 타협일 뿐이며 권위주의자들이 원하는 개인적인 복종의 형태가 되어서는 안된다.)

권위주의자들은 검열과 비밀을 통해서 세력을 확장한다. 그들은 자발적인 협력과 정보의 공유를 믿지 않고 오직 그들의 통제에 의한 협력만을 신뢰한다. 따라서 해커로서 행동하려면 검열과 비밀 그리고 자신의 의지에 반대되는 행동을 강요하기 위해서 사용되는 무력이나 기만에 대한 반감을 가져야 한다. 그리고 그러한 신념을 갖고 기꺼이 행동해야 한다.

5. 해커는 마음가짐만으로 되는 것이 아니다. 능력이 필요하다.

해커가 되기 위해서는 위에서 설명한 마음가짐들을 갖고 있어야만 한다. 그러나 이러한 태도를 갖고 있다고 해서 해커가 될 수 있는 것은 아니다. 하고자 하는 의욕이나 각오만으로 육상 챔피언이나 톱가수가 될 수 있는 것은 아니듯이 해커가 되기 위해서는 실질적인 노력이 필하다. 해커가 되기 위해서는 지식과 노력 그리고 헌신과 고된 노동이 필요하다.

그러므로 올바른 자세만 갖고 있으면 된다는 생각을 버리고 모든 종류의 능력을 존중하라. 해커는 시간을 낭비해서는 안되고 어떠한 것에 대한 능력도 좋지만 특히 해킹 능력을 추구해야 한다. 소수의 사람만이 정통할 수 있는 기술에 대한 능력은 좋은 것이다. 더욱이 정신적인 예리함과 기술 그리고 집중이 필요한 기술에 대한 능력은 최상의 것이다.

만약 여러분이 능력을 외경한다면 여러분 자신이 그러한 능력을 가질 수 있도록 노력하는 것을 즐기게 될 것이다. 힘든 작업과 헌신은 권태나 싫증이라기 보다 강도 높고 즐거운 놀이가 될 것이다. 이것은 해커가 되기 위해서 필수적인 부분이다.

기본적인 해킹 기술

해커에게는 마음가짐이 중요하지만 기술은 더욱 중요하다. 마음가짐과 태도가 능력을 대신할 수 있는 것은 아니다. 해커라고 불리기 위해서는 다음과 같은 기본적인 기술들을 갖고 있어야 한다. 그러나 이러한 종류의 기술들은 새로운 기술이 개발되고 기존의 기술이 낡고 쓸모없는 것이 되어감에 따라서 천천히 바뀌어 간다. 예를 들면, 기계어를 이용한 프로그래밍이 예전에 필요한 기본적인 해킹 기술이었고 HTML은 최근에야 포함된 것이다. 그러나 현 시점에서는 다음과 같은 것들이 필요하다.

1. 프로그래밍을 학습하라.

프로그램을 만드는 방법을 배우는 것은 해킹의 가장 기본적인 기술이다. 어떠한 컴퓨터 언어도 모르고 있는 상태라면 Python(파이썬) 언어부터 학습할 것을 권하고 싶다. 파이썬은 매우 간결하게 디자인되어 있으며, 관련 문서가 풍부하고 비교적 초보자에게 쉬운 언어이다. 초보자들에게 좋은 언어임에도 불구하고 파이썬은 결코 단순한 작업만을 위한 언어는 아니다. 파이썬 언어는 매우 강력하고 유연하며 대형 프로젝트에 매우 적합한 언어이다.

그러나 한가지 종류의 언어만을 알고 있다면 해커나 단순한 프로그래머 수준의 기술에도 결코 도달하지 못한다는 사실을 알고 있어야 한다. 이러한 수준에 도달하기 위해서는 특정한 언어가 아닌 일반적인 관점으로 프로그래밍 문제에 접근하는 방법을 배울 필요가 있다. 진정한 해커가 되기 위해서는 기존에 알고 있던 지식과 매뉴얼에 설명된 새로운 언어의 내용을 연관시켜서 빠른 시일안에 새로운 언어를 학습할 수 있는 능력을 키워야 한다. 이것은 몇가지 다른 언어를 배워야만 한다는 사실을 의미한다.

만약 본격적인 프로그래밍을 하고 싶다면 유닉스의 핵심 언어인 C 언어를 배워야만 한다.(그럼에도 불구하고 C 언어는 초보자들이 처음에 배울만한 언어는 아니다.) C 언어 이외에 해커들에게 특히 중요한 언어는 Perl(펄)LISP(리스프)이다. Perl은 실용적인 이유로 인해서 배울 가치가 있다. Perl은 동적 웹페이지를 만들기 위한 CGI와 시스템 관리를 위한 스크립트를 작성하기 위해서 매우 널리 사용된다. 따라서 Perl 언어로 프로그램을 만들 일이 없다고 하더라고 Perl 소스를 해독할 수 있는 능력을 갖고 있어야 한다. LISP은 심오한 개발의 경험을 얻고 싶을 경우에 배울만한 훌륭한 언어이다. 이러한 경험은 여러분들이 LISP을 실제로 사용하지 않게 되더라도 남은 날들을 통해서 여러분들이 보다 좋은 프로그래머가 될 수 있도록 만들어 줄 것이다.

Python과 C, Perl, LISP 네개의 언어를 모두 배우는 것이 실제로 최상의 방법이다. 이들은 가장 중요한 해킹 언어라는 점 이외에도 프로그래밍에 대한 다른 접근 방법을 갖고 있기 때문에 여러분들에게 프로그래밍에 대한 가치있는 방법들을 알려줄 것이다.

프로그램을 작성하는 방법은 매우 복잡한 기술이기 때문에 이글에서 구체적이고 완벽한 지식을 설명할 수는 없다. 그러나 책과 교육 과정이 이러한 기술을 알려줄 수 있는 것은 아니라는 사실은 말할 수 있다. 많은, 아마도 대부분의 일류 해커들은 독학을 하고 있으며 (a) 코드를 읽는 것과 (b) 코드를 직접 작성해 보는 것으로 프로그램을 만드는 방법을 배울 수 있다.

프로그래밍을 배우는 것은 컴퓨터 언어가 아닌 일반적인 언어 작문을 배우는 것과 같다. 좋은 프로그램을 만드는 방법은 대가가 만든 코드를 읽고 자신이 직접 프로그램을 만들어 보는 것이며, 또다른 소스를 읽고 다시 만들어 보고 더욱 많은 소스를 읽고 또다시 만들어 보는 과정을 자신이 구상했던 형태에 맞는 힘과 효율성을 갖출 때까지 계속해서 되풀이 하는 것이다.

참고할 만한 좋은 코드를 발견하는 것은 일반적으로 어려운 일이다. 왜냐하면 초보 해커들이 읽고 변형해 볼 수 있을 만한 대형 프로그램의 소스 코드를 구하는 일이 매우 힘들기 때문이다. 그러나 이러한 상황은 이제 극적으로 바뀌었다. 왜냐하면 오픈 소스 소프트웨어와 프로그래밍 툴 그리고 해커들이 만든 운영체제의 소스 코드를 이제 쉽게 구할 수 있기 때문이다.

2. 오픈 소스 유닉스 중의 하나를 구해서 학습하고 운영해 보자.

우선, 여러분이 개인용 컴퓨터를 갖고 있거나 이러한 시스템을 사용할 수 있다는 전제하에 얘기를 해 보고자 한다.(실제로 오늘날에는 이러한 것들을 어렵지 않게 가질 수 있다.:-)) 초심자들이 해킹 기술을 습득할 수 있는 가장 확실한 첫번째 단계는 리눅스나 BSD 유닉스 중의 하나를 구해서 개인용 컴퓨터에 설치한 뒤에 이를 운영해 보는 것이다.

이 세상에는 유닉스 이외에도 많은 운영체제들이 있다. 그러나 이러한 운영체제들은 바이너리 형태로만 배포되기 때문에 소스 코드를 읽거나 수정할 수 없다. DOS나 윈도우즈 또는 MAcOS가 설치된 시스템에서 해킹 기술을 배우려고 하는 것은 마치 깁스를 하고 춤을 배우려고 하는 것과 같다.

유닉스는 인터넷 운영체제이다. 유닉스를 모르는 상태에서도 인터넷을 이용하는 방법을 배울 수는 있지만, 유닉스를 모르면 결코 인터넷 해커가 될 수 없다. 이러한 이유로 인해서 오늘날의 해커 문화는 특히 유닉스를 중심으로 이루어져 있다.(해커 문화의 중심이 언제나 유닉스 중심으로 이루어 졌던 것은 아니며 몇몇 오래된 해커들은 이러한 부분에 대해서 여전히 불만스러워 한다. 그러나 유닉스와 인터넷의 공생 관계는 마이크로소프트의 세력이 그것을 약화시키지 못할 정도로 꾸준히 강화되어 왔다.)

따라서 유닉스를 배우고 익혀서 가능한 많은 시간을 함께 보내고 소스 코드를 읽고 코드를 수정해 가면서 시스템을 운영해 볼 것을 권하고 싶다.(개인적으로 나는 리눅스를 선호하지만 동일한 컴퓨터에 리눅스와 DOS/윈도우즈를 함께 설치하는 방법을 사용할 수도 있다.) 여러분은 마이크로소프트의 운영체제에서보다 월등하게 좋은 C와 LISP, Python, Perl을 포함한 프로그래밍 툴들을 얻을 수 있다. 여러분은 즐거움을 얻을 수 있을 것이며 또한 훗날 대가가 된 후에 뒤돌아 보기 전까지는 알 수 없을 만큼 자신이 배울 수 있다고 생각하는 것 이상의 많은 지식을 얻을 수 있을 것이다.

유닉스를 학습하는데 필요한 보다 많은 사항들에 대해서는 Loginataka (주4)를 참고하기 바란다.

(주4) Loginataka는 1993년에 "Dialogue between a Guru and a Newbie"라는 부제를 달고 유닉스 그루(guru)가 되기를 원하는 사람의 질문에 대한 답변으로 유즈넷에 올려진 글이다. Loginataka는 범어(Sanskrit)로 축도(祝禱, blessing)라는 뜻을 담고 있다.

리눅스를 구하기 위해서 http://www.linuxjournal.com/xstatic/community 사이트를 참고할 수 있으며, BSD 유닉스에 대한 정보와 도움말은 http://www.bsd.org/ 사이트를 통해서 구할 수 있다.

(주의: 만약 여러분이 초보자라면 리눅스나 BSD를 혼자서 설치할 것을 권하지 않는다. 리눅스의 경우에는 리눅스 유저 그룹의 도움을 요청하거나 리눅스 인터넷 지원 협동 조합(Linux Internet Support Co-operative)를 통해서 방법을 찾을 수 있을 것이다. LISC는 여러분 이 도움을 얻을 수 있는 IRC 채널 을 운영하고 있다.

3. WWW를 사용하는 방법과 HTML을 작성하는 방법을 배우라.

해커 문화가 만들어 온 대부분의 것들은 눈에 보이지 않게 움직이며 공장과 사무실 그리고 대학들이 일반인들의 삶에서 충돌없이 운영되도록 도와준다. 하나의 큰 예외인 웹은 해커들의 빛나는 커다란 작품으로 정치가들 조차 그것이 이 세상을 바꾸도 있다고 인정하고 있다. 다른 많은 이유들이 있지만, 이 한가지 사실만으로도 웹이 어떻게 움직이는 가를 배울 필요성이 있다.

웹의 작동 방법을 배운다는 것은 누구나 할 수 있는 브라우저 사용법을 배운다는 것이 아니라 웹의 마크업(markup) 언어인 HTML을 작성하는 방법을 배운다는 것을 의미한다. 만일 여러분이 프로그램을 작성하는 방법을 모르고 있다면 HTML을 작성하는 방법은 프로그래밍을 위한 사고 방식에 약간의 도움이 될 것이다. 따라서 HTML을 이용해서 홈페이지를 만들어 보자.

그러나 단지 홈페이지를 만드는 것이 해커가 되는 길에 근접하는 것은 아니다. 웹은 많은 홈페이지로 가득 차 있으며 별다른 가치를 갖고 있지 않거나 내용도 없는 경우가 많다.

홈페이지를 가치 있게 만들기 위해서는 의미있는 내용이 있어야 하며 다른 해커들에게 흥미나 도움을 줄 수 있어야 한다. 그럼, 이제 다음 주제로 넘어가 보자.

해커 문화 안에서의 지위

화폐 경제가 개입되지 않는 대부분의 문화가 그러하듯이 해커 문화는 명성으로 움직인다. (주5) 여러분이 흥미있는 문제를 풀려고 노력하고 있다면, 그것이 얼마나 흥미있는 것인지 그리고 여러분의 해답이 얼마나 좋은 것인지는 일반적으로 기술적으로 같은 수준의 동료나 기술적 우위가 있는 사람에 의해서 판단될 수 있다.

(주5) 인지권의 개간 에서 이러한 측면을 자세하게 분석하고 있다.

따라서 해커 게임을 한다고 할 때, 다른 해커들이 여러분의 기술을 어떻게 평가하느냐에 의해서 여러분의 점수가 정해진다는 점을 알고 있어야 한다.(이러한 이유로 인해서 다른 해커들이 여러분을 계속해서 해커라고 부르기 전까지는 여러분은 해커가 아닌 것이다.) 그러나 이러한 사실은 해킹은 혼자서 작업하는 것이라는 이미지와 현재는 점차 사라져 가는 경향이 있기는 하지만 아직도 유효한 자아와 다른 사람들의 인정이 본인의 동기에 영향을 준다는 것에 반대하는 해커 문화의 금기에 의해서 가려져 있다.

특히, 해커 문화는 인류학자들이 말하는 "증여 문화" (주6)에 해당된다. 해커 문화에서는 다른 사람을 지배하거나 아름다워지거나 또는 다른 사람들이 원하는 것을 획득하는 방법을 통해서가 아니라 자신의 것을 주는 방법으로 지위와 명성을 얻을 수 있다. 특히, 자신의 시간과 창의성, 기술 결과물들을 무상으로 공개하는 방법으로 지위와 명성을 얻을 수 있다.

(주6) 인지권의 개간 에서 이러한 측면을 자세하게 분석하고 있다.

다음은 다른 해커들의 존경을 받을 수 있는 다섯 가지 기본적인 것들이다.

1. 오픈 소스 소프트웨어를 작성하라.

가장 전통적이고 기본적인 방법은 다른 해커들이 흥미를 느끼거나 유용하게 사용할 수 있는 프로그램을 만들고 프로그램의 소스 코드를 해커 문화에서 쓸 수 있도록 공개하는 것이다.

우리는 이러한 프로그램을 "자유 소프트웨어(free software)" 라고 부른다. 그러나 자유 소프트웨어에서 사용된 "자유"의 영어 표기인 "free"는 자유와 무료라는 두가지 뜻을 모두 갖고 있기 때문에 사람들에게 그 정확한 의미가 무엇인지 혼동하게 만들곤 한다. 이러한 이유로 인해서 근래에는 "오픈 소스" 소프트웨어라는 말을 보다 많이 사용한다.

해커 문화 안에서 존경받는 대부분의 해커들은 많은 사람들의 요구를 충족시킬 수 있는 광범위하고 유용한 프로그램을 많은 사람들이 사용할 수 있도록 하기 위해서 무료로 공개한 사람들이다.

2. 오픈 소스 소프트웨어의 테스트와 디버깅에 참여하라.

오픈 소스 소프트웨어의 디버깅에 참여하는 사람도 해커들의 인정을 받을 수 있다. 불완전한 현실 세계에서는 필연적으로 소프트웨어 개발 시간의 대부분을 디버깅에 할애할 수밖에 없다. 바로 이러한 점이 오픈 소스 개발자들이 좋은 베타 테스터를 그들의 몸무게 만큼의 보석과 같은 가치가 있다고 생각하는 이유이다. 좋은 베타 테스터는 상태을 명확하게 설명할 수 있고, 문제의 원인을 잘 찾아낼 수 있으며 촉박하게 만들어진 프로그램에 포함된 버그들을 참을성 있게 테스트 할 수 있고 또한 기꺼이 간단한 진단 테스트를 수행해 줄 수 있는 사람이다. 오랫동안 지연되는 악몽 같은 디버깅 작업이 되느냐 아니면 단지 가벼운 골치거리가 되는가의 차이는 심지어 이러한 기준 중 한가지에 의해서 달라지기도 한다.

만약 여러분이 유닉스의 초심자라면 흥미를 갖고 좋은 베타 테스터가 될 수 있을만한 프로그램을 찾아서 참여해 보라. 이것은 프로그램을 테스트하는 것을 돕는 것으로부터 시작해서 프로그램을 디버깅하는 단계로, 그리고 프로그램을 개작하는 단계까지 자연스럽게 발전할 수 있는 방법이다. 이러한 방법을 통해서 많은 것을 배울 수 있으며 훗날 여러분을 도와줄 사람들과 좋은 인연을 만들 수 있을 것이다.

3. 인터넷으로 유용한 정보를 제공하라.

해커들의 존경을 받을 수 있는 또하나의 좋은 방법은 흥미있고 유용한 정보들을 모아서 웹페이지나 FAQ 형식의 문서로 만든 뒤에 다른 사람들이 쉽게 이용할 수 있도록 제공하는 것이다. 주요 기술 FAQ의 매인테이너들은 오픈 소스 프로그램 저작자에 버금가는 존경을 받는다.

4. 하부 구조를 유지하는 작업에 참여하라.

해커 문화 -- 실제로 인터넷의 기술 개발은 자원자들에 의해서 운영되는 것이다. (주7) 인터넷이 지속되기 위해서는 메일링 리스트를 관리하거나 뉴스 그룹을 조정하는 일 그리고 대규모 소프트웨어 아카이브 사이트를 유지하고 RFC와 기타 기술적인 표준 문서들을 개발하는 것과 같은 멋지고 재미있지는 않지만 꼭 필요한 일들이 많이 필요하다.

(주7) 인터넷과 해커 문화의 하부 구조를 유지하는 작업은 인터넷 엔지니어링 태스크 포스와 밀접한 관계를 갖고 있다.

이러한 종류의 일을 하는 사람들은 많은 존경을 받는다. 왜냐하면 이러한 일에는 많은 시간이 투자되어야 하며 프로그램 코드를 갖고 작업하는 일들보다 지루한 작업이라는 것을 모든 사람들이 알고 있기 때문이다. 이러한 일은 한다는 것은 해커 문화와 공동체에 헌신한다는 것을 의미한다.

5. 해커 문화 자체에 봉사하라.

마지막 방법은 해커 문화 자체에 기여하고 해커 문화를 보다 널리 확산시키는 것이다. 예를 들면, 이글과 같은 해커가 되는 방법에 대한 확실한 입문서를 쓰는 일 등이다. :-) 이와 같은 일은 많은 경험이 필요하거나 앞에서 언급한 4가지 사항들을 잘 모르는 상태에서도 할 수 있는 것이다.

정확히 말해서 해커 문화는 지도자를 갖고 있지 않다. 그러나 영웅과 장로 그리고 역사가와 선구자들은 존재한다. 만약 여러분이 해커 문화 안에서 오랫 동안 남아있다면 그러한 사람들 중 한 사람이 될 수도 있을 것이다. 그러나 해커들은 자신을 떠들썩하게 내세우는 장로를 싫어하기 때문에 그러한 평판을 얻는 것은 위험하다는 사실을 명심하라. 명성과 지위를 획득하려고 분투하지 말고 그것이 자신에게 스스로 찾아올 수 있도록 노력하라. 그리고 자신이 얻은 지위에 대해서 겸손하고 감사해야 한다. 

널리 알려진 신화에도 불구하고 해커가 되기 위해서 널드(Nerd) (주8)가 될 필요는 없다. 그러나 널드가 되는 것이 해커가 되는데 도움이 되며 실제로 많은 해커들은 널드이기도 하다. 사회적인 접촉으로부터 자신을 격리시키는 것은 사색과 해킹과 같은 중요한 일에 집중하는데 도움이 된다.

(주8) 널드(nerd)란 MIT의 해커 문화에서 유래된 말로 사회적인 접촉을 멀리하고 오직 하나의 일, 특히 컴퓨터와 기술 분야의 일을 위해서 자신의 모든 역량을 집중하는 사람을 말한다. 이와는 달리 BBS에 접속하거나 인터넷을 활용하는 등의 컴퓨터와 관련된 사회적 활동을 활발히 하는 사람들은 지크(geek)라고 말한다. 널드와 지크는 사전적인 의미로 모두 "바보", "괴짜" 또는 "멍청이"라는 뜻을 갖고 있지만 해커 문화에서 사용하는 의미는 이와는 조금 다른 것이다. 해커와 널드, 지크는 모두 조금씩 다른 뜻을 갖고 있지만 이글에서는 거의 같은 의미로 사용되고 있다.

이러한 이유로 인해서 많은 해커들은 자신이 널드라고 불려지거나 심지어 조금 더 농도짙은 표현인 지크(geek)라고 불려지는 것을 자랑스럽게 생각한다. 이러한 형태은 자신이 사회의 일상적인 예상과 기대로부터 벗어나 있는 자유로운 존재, 즉 아웃사이더라고 선언하는 방법의 하나인 것이다.

만약 여러분이 해킹에 전념해서 좋은 성과를 얻을 수 있는 동시에 생활 또한 만족스럽게 유지할 수 있다면 이것은 매우 좋은 것이다. 이것은 내가 초심자였던 1970년대보다 근래에 보다 수월해 졌다. 왜냐하면 현재의 메인스트림 문화는 널드에 대해서 보다 우호적이기 때문이다. 심지어 해커가 보다 좋은 배우자감이라고 인정하는 사람들도 점점 늘어나고 있다.

만약 여러분이 일상적이고 정상적인 생활을 갖고 있지 않았기 때문에 해킹에 매력을 느끼게 되었다고 해도 그또한 나쁘지 않다. 최소한 집중하는데는 문제가 없을 것이기 때문이다. 시간이 가면 아마도 정상적인 생활로 돌아가서 집중하는데 방해가 되는 문제를 갖게 될 것이다.

해커에게 어울리는 것들

다시 한번 반복하면 해커가 되기 위해서는 해커들의 정신을 익히지 않으면 안된다. 여기에 여러분이 컴퓨터 앞에 없을 때 할 수 있을 만한 것들이 있다. 이러한 것들이 해킹을 대신할 수 있는 것은 아니지만 많은 해커들이 이러한 것들을 하고 있으며 해킹의 본질과 통하는 기본적인 공통점이 있다고 느끼고 있다.

  • 공상 과학 소설을 읽으라. 공상 과학 소설 모임에 참석하라.(이것은 해커와 원로 해커들을 만날 수 있는 좋은 방법이다.)
  • 선(禪)과 태권도와 같은 격투기를 배우라.(이러한 것들의 정신적인 훈련은 해킹과 유사한 면이 있다.)
  • 음악을 분석적으로 듣을 수 있도록 노력하라. 특정한 쟝르의 음악을 평가할 수 있도록 견문을 넓히라. 악기를 잘 연주하거나 노래를 잘 부를 수 있게 연습하라.
  • 농담이나 언어 유희에 대한 이해를 높이라.
  • 자신의 모국어를 잘 사용할 수 있도록 훈련하라.(내가 아는 최고의 해커들을 포함해서 매우 많은 해커들이 작자로서의 소양을 갖고 있다.)
이러한 것들 중에서 이미 하고 있는 것이 많으면 많을 수록 해커로서의 자질 또한 많이 갖고 있다고 할 수 있다. 왜 이러한 것들이 도움이 되는 지에 대해서 명백하게 밝혀진 것은 없지만, 이러한 것들은 우뇌와 좌뇌를 균형있게 사용하게 하는데 도움이 되는 것으로 보인다.(해커에게는 논리적인 추론 능력과 문제를 직관적으로 파악할 수 있는 감성이 모두 필요하다.)

마지막으로, 해서는 안 될 다음과 같은 것들에 주의하기 바란다.

  • 어리석고 과장된 이름이나 영화에 나온 이름을 ID로 사용하지 말라.
  • 유즈넷(또는 어느 장소에서도)에서 싸움에 끼어들지 말라.
  • 자신을 사이버펑크(cyberpunk)라고 부르지 말라.
  • 자신의 시간을 누구나 하고 있는 일에 소모하지 말라.
  • 철자가 틀리고 문법에 맞지 않는 메일을 보내거나 포스팅하지 말라.

위와 같은 것들을 해서 얻을 수 있는 명성은 비난과 조소뿐이다. 해커들은 쉽게 잊지 않는다. 따라서 자신의 실수를 만회하기 위해서는 많은 세월이 필요하다.

영화에서 나온 이름이나 별명을 ID로 사용하는데 따른 문제점은 별명을 이용해서 자신의 신분을 감추는 것이 warez d00dz (주9)이나 다른 저급한 형태의 크래커들이 갖고 있는 어리석고 치기어린 행동 양식이기 때문이다. 해커들이 이렇게 하지 않는다. 해커들을 그들이 해 놓은 것들을 자랑스럽게 여기며 여기에 그들의 실명이 관계되는 것을 원한다. 따라서 만약 여러분이 별명을 갖고 있다면 그것을 버리도록 하라. 해커 문화에서 별명을 사용하는 것은 자신이 3류라는 것을 의미할 뿐이다.

(주9) warez d00dz는 BBS를 중심으로 활동하는 크래커들이다. warez doodz는 (soft)wares와 dude를 발음대로 표기한 것이며 정품소프트웨어가 판매되는 당일에 이를 크래킹한 버전을 동시에 해적 BBS를 통해서 유포하는 것으로 유명하다. 최근의 크랙 활동으로는 2000년 6월 24일에 블리자드사의 디아블로2의 영문 복제판을 해적 BBS에 올린 바 있다.

참고할 만한 다른 문서들

피터 씨바흐(Peter Seebach)는 해커들을 어떻게 처리해야 할 지 이해하지 못하고 난감해 하는 관리자들을 위한 훌륭한 해커 FAQ 문서를 유지하고 있다. 피터의 사이트가 접속상에 문제가 있다면 다음의 검색 결과를 통해서 해당 문서를 얻을 수 있을 것이다. Excite 검색

유닉스 해커의 자세와 바람직한 교육 방법에 대해서는 전술했던 Loginataka를 참고할 수 있다.

또다른 나의 글인 해커 문화의 짧은 역사도 도움이 될 것이다.

리눅스와 오픈 소스 문화가 어떻게 움직이는 가에 대해서 자세히 설명한 논문인 <성당과 시장-The Cathedral and the Bazaar> 과 그 주제를 보다 세부적으로 분석한 속편인 <인지권의 개간>도 참고가 될 수 있을 것이다.

빈번한 질문들에 대한 답

Q: 해킹 방법을 가르쳐 줄 수 있는가?

이글이 발표된 직후부터 일주일에 몇번씩(가끔은 하루에도 몇번씩) "해킹 방법에 대한 모든 것을 가르켜달라."는 메일을 받고 있다. 그러나 불행히도 나는 그럴만한 충분한 시간과 에너지가 없으며 나 자신의 해킹 프로젝트에만도 내 시간의 110% 이상을 투자해도 모자란 것이 현실이다.

비록 내가 해킹 방법을 알려줄 수 있다고 해도 해킹은 기본적으로 자기 스스로가 익혀나가야하는 기술과 태도이다. 만약 여러분을 도와줄 해커를 찾았다고 해도 여러분이 지식을 수동적으로 받기만을 원한다면 그들로 부터 존중받지 못하게 될 것이다. 몇가지 정도를 먼저 배우고 노력해 보라. 학습할 수 있는 능력이 있다는 것을 스스로 입증해 보라. 그런 후에 갖게 되는 특정한 질문들을
해커들에게 물어보도록 하라.

Q: 어떻게 시작해야 하는가? 그런 후에는 무엇을 해야 하는가?

최선의 방법은 LUG (Linux User Group)를 이용하는 것이다. LUG에 대한 정보는 LDP (Linux Documentation Project) 사이트의 리눅스 일반 정보 페이지 를 통해서 참고할 수 있다. (주10) 아마도 자신의 대학이나 학교와 관련된 가까운 곳의 LUG 정보를 얻을 수 있을 것이다. LUG 멤버들은 여러분이 요청한다면 리눅스 배포판을 제공해 주거나 설치와 사용에 관한 도움을 줄 것이다.

(주10) 한국의 경우에는 KLDP 사이트 에 있는 페이지에 포함된 LUG 세부 항목이나 리눅스 공동체 세미나 사이트 를 통해서 LUG 정보를 참고할 수 있다.

Q: 시작하기에 너무 늦은 나이인 것 같다. 당신은 언제부터 시작했는가?

시작하고 싶은 동기를 느낀 나이가 가장 좋은 나이이다. 늦었다고 생각할 때가 가장 빠른 때인 것이다. 대부분의 사람들은 15에서 20살 사이에 시작하는 것 같다. 하지만 나는 이보다 많은 나이나 적은 나이에 시작한 경우를 모두 알고 있다.

Q: 해킹을 배우는데는 시간이 얼마나 걸리는가?

갖고 있는 재능과 노력을 얼마나 열심히 하느냐에 달려있다. 대부분의 경우에는 최선의 노력을 한다고 할 때 약 18개월에서 2년 정도의 시간이면 고급 기술들을 익힐 수 있다. 그러나 거기에 만족해서는 안된다. 만약 진정한 해커가 되고자 한다면 자신의 기술을 갈고 닦기 위해서 남은 여생을 모두 투자해야 한다.

Q: 처음 배우는 언어로 비주얼 베이식과 델파이가 적당한가?

그렇지 않다. 왜냐하면 이러한 언어들은 이식성이 없기 때문이다. 이 언어들은 오픈 소스 차원에서 구현되지 못하기 때문에 제작 업체가 지원하기로 결정한 플랫폼에 한정될 수밖에 없다. 이러한 독점적인 상태를 인정하는 것은 해커의 방식이 아니다. 비주얼 베이식은 더욱 그러하다. 마이크로소프트의 독점적인 언어라는 사실 만으로도 충분한 이유가 되며, 다른 종류의 베이식 언어와 마찬가지로 비주얼 베이식은 잘못된 프로그래밍 습관에 젖게 하는 잘못 디자인된 언어이다.

Q: 시스템을 크랙하는 것을 도와주거나 그 방법을 가르쳐 줄 수 있는가?

No. 이 FAQ를 읽고도 여전히 이러한 종류의 메일을 보낼 수 있는 사람은 비록 내게 그러한 시간이 있다고 하더라고 교육을 받을 수 없을 만큼 어리석은 사람이다. 나는 이러한 종류의 질문을 담고 있는 메일들을 모두 무시하거나 극도로 거친 답장을 보낸다.

Q: 시스템이 크랙을 당했다. 앞으로의 공격을 막을 수 있게 도와줄 수 있는가?

도와줄 수 없다. 이런 종류의 질문을 하는 사람들은 십중팔구 윈도우즈 시스템을 사용하는 사람들이다. 윈도우즈는 코드와 아키텍처에 너무도 많은 결함이 존해하기 때문에 시스템 크랙에 효과적으로 대처하는 것이 불가능하다. 그것은 마치 보트로 새들어 오는 물을 체로 퍼내는 것과 같다. 가장 신뢰할 만한 대책은 리눅스나 보안을 담보할 수 있는 다른 운영체제로 교체하는 것이다.

Q: 얘기를 나눌 수 있는 실제 해커들은 어디서 만날 수 있는가?

가장 좋은 방법은 모임에 참석할 수 있는 주변의 리눅스 유저 그룹에 참여하는 것이다. 참고할 수 있는 유저 그룹들의 목록은 LDP 사이트 를 통해서 얻을 수 있다.

(나는 IRC에서는 실제로 해커를 만날 수 없다고 말하곤 했다. 그러나 이제는 상황이 변화되었다고 생각된다. GIMP나 Perl 등과 같이 특정한 해커 공동체들은 이제 IRC 채널을 갖고 있다.)

Q: 해킹에 관련된 유용한 책에는 어떤 것들이 있는가?

내가 유지하고 있는 리눅스 도서 목록 HOWTO 문서가 도움이 될 수 있을 것이다. 이 문서의 한글 번역문은 다음의 사이트를 통해서 참고할 수 있다. http://kldp.org/

Q: 어떤 언어를 제일 먼저 배워야 하는가?

아직 HTML을 모르는 상태라면 제일 먼저 배워야 할 언어는 HTML이다.

그러나 HTML은 본격적인 프로그래밍 언어는 아니다. 프로그래밍을 시작할 준비가 되었을 때는 Python 부터 학습할 것을 권하고 싶다. 많은 사람들이 추천하고 있는 Perl은 아직까지는 Python보다 널리 사용되고 있지만, 배우기 어렵고 또한 개인적으로 잘 디자인된 언어는 아니라고 생각한다. Python을 배울 때 참고할 수 있는 자료들은 다음의 웹사이트를 통해서 참고할 수 있다. http://groups.google.com/group/comp.lang.python/msg/cf35ef4179cd1621

C는 정말로 중요한 언어이다. 그러나 이것은 Python이나 Perl 보다도 어려운 언어이기 때문에 처음부터 C를 학습하려고 하지 말라. MS 윈도우즈 사용자들은 비주얼 베이식에 안주하지 말아야 한다. VB는 프로그래밍에 대한 나쁜 습관을 가르쳐 주고 윈도우즈 이외의 다른 아키텍처로 이식될 수 없기 때문에 피하는 것이 좋다.

Q: 마이트로소프트를 증오하고 경멸해야 하는가?

그렇게 하지 말라. 마이크로소프트가 혐오스럽지 않기 때문에 그렇게 하지 말라는 것이 아니라 해커 문화는 마이크로소프트가 존재하기 오래전부터 존재하고 있었으며, 마이크로소프트가 역사 속으로 사라진 후에도 계속해서 남아있을 것이기 때문이다. 마이크로소프트를 비난하고 증오하는데 사용할 에너지가 있다면 오히려 자신의 기술을 보다 가다듬는데 사용하라. 좋은 코드를 작성하는 것 -- 그것은 자신의 이미지를 손상시키지 않고도 마이크로소프트를 충분히 물리칠 수 있는 길이다.

Q: 오픈 소스 소프트웨어는 프로그래머들이 생계를 유지하는데 방해가 되지 않는가?

그런 것 같지는 않다. 현재까지 오픈 소스 산업은 취업 기회를 감소시킨 것이 아니라 오히려 일자리를 만들고 있다. 이미 만들어져 있는 프로그램을 활용하는 것이 그렇지 않은 경우보다 실제적인 경제적 이익을 가져올 수 있다면 새로운 프로그램을 완성한 후에 그것을 무료로 공개하느냐의 여부에 관계없이 프로그래머는 보수를 받을 수 있을 것이다. 얼마나 많은 "무료" 소프트웨어가 만들어지건 간에 보다 많은 수의 새롭고 커스터마이즈된 애플리케이션 프로그램이 필요하기 마련이다. 오픈 소스 페이지를 참고하면 이러한 측면에 대한 보다 구체적인 글을 참고할 수 있다.

Q: 해커가 되려면 어떻게 시작해야 하며, 공개 유닉스는 어디서 구할 수 있는가?

이 글을 어딘가를 찾아보면 가장 널리 사용되는 공개 유닉스를 구할 수 있는 방법을 알 수 있다. 해커가 되기 위해서는 무엇보다도 동기와 진취적인 정신 그리고 자기 스스로를 교육시킬 수 있는 능력이 필요하다. 그럼, 이제 시작해 보자!
출처 : http://kldp.org/