오픈소스의 승리

창조란다.

창조경제가 화제다. 큰 누님께서 “앞으로 5년은 창조여..” 하신후 언론, 정치인, 석학들이 제각각 “이게 창조 맞나여?” 떠들어대니, 드디어 그분께서 몇마디 하셨다. (http://news.mt.co.kr/mtview.php?no=2013041815465078255). “창조”라고 말은 꺼냈는데, 막상 그 담에 할말이 없어서 많이 고민하셨을 그뿐께서 싸이의 젠틀맨이야말로 모범 창조라며 숟가락 슬쩍 얹어보는 모습이 참 보기 좋다. 빌 게이츠, 스티브잡스와 같은 창조적 인재를 “양성” 해야 한다는, “인재 양성론” 역시 일관되서 보기 좋다. 과거엔 경제개발 5개년 계획이었다면 지금은 잡스 키우기 5개년 계획을 세우려나 보다.

그분께서 소프트웨어에 각별한 관심을 가지신 것은 나와 같은 일개 코더로서 참 황송한 일이다. 새 정부의 보호아래 높아진 코더의 존엄을 누리며 살게 될지도 모른다. 하지만 기사의 이 부분을 읽으며 마음속 깊은 곳에서 시작되는 빡침을 억누를 수 없다.

박 대통령은 “도전에 대한 두려움이 없어야 하고, 그것에 대해서 정당하게 가치를 인정해줘야 하는데, 그러기 위해서는 당연히 지적재산권이 잘 보호되어야 하고 국내기업들한테도 당연히 로열티를 지불해야한다”며 “소중한 가치를 보호하고 인정해 줘야 하는 것이 중요하다”고 강조했다.

오픈소스, 공짜? 해킹?

지적재산권, 로열티, 라이센스.. 아무래도 그분이 이쪽으로 관심을 가지신 듯 하다. 마음대로 복제 못하는 법을 만들어 코더의 밥 그릇을 보호해 주시려는 어머니의 마음을 느낀다. 물론 나 역시 SW의 불법 복제로 얼마나 많은 코더들이 고통받았는지 알고 있다. 하지만 쌓인 버그리포트에 허덕이는 내가 굳이 이렇게 글질하는 이유는 법과 제도가 아니라, 오픈소스가 한국 SW의 근본적 해결이라고 믿기 때문이다.

그분께서 “거 오픈소스가 뭐요?” 라고 물으면 아마도 주변에서 이리 대답할 것이다: “소프트웨어 공짜로 쓰자는 운동입니다. 소스를 공개해서 로열티도 없다네요. 리차드 스톨만이라고 극좌파 MIT 해커가 시작했는데, 지금은 리눅스라고 서버실에서 종종 쓴다고 합니다요…”. 일단, 뭐 “공짜”, “해커”, “좌파” 요 부분에서 불꽃 싸다구가 한대 날아오지 않을까?

슬프지만 이게 한국의 오픈소스 인식 수준이라고 생각한다. 얼마전 한국에서 거의 유일하게 오픈소스를 만들고, 작디 작은 개발자 커뮤니티를 유지하던 KTH가 정리해고를 했다. 제법 실리콘밸리의 스타트업과 같은 문화를 만들었고, 오픈소스 바닥에서 실력이 쟁쟁하던 사람을 많이 보유했던 회사다. 그런데 사장부터 날고 기던 개발자까지 모두  날려버리고는 이제 SI를 한단다. 작년에 나는 뉴욕의 잘나가는 스타트업 thefancy.com에서 아키텍트로 잠시 일했다. 내가 만나본 사람중 가장 천재같았던 미국인 창업자는 신기하게도 한국인들로 개발팀을 꾸몄다. 그가 꾸린 한국인 팀과 일해보니 이유를 알만했다. 정말 뛰어난 팀이었다. 그런데 그가 유별나게 공들이며 한국 개발자를 스카우트 하던 회사가 있다. 그게 KTH였다. 정말로 삼성같은 곳 출신은 쳐다보지도 않았고, 오로지 KTH 사람만 은밀히 접근해 뽑아왔다. 왜냐하면 거기에 보물들이 있었으니까…그런데 우리의 공적 기업인 KT는 오픈소스쟁이들 돈 못번다고 매몰차게 쫓아냈다.

제국과 문화

역사적으로 현재의 성공적인 실리콘밸리가 있기까지 두개의 가장 큰 SW 물줄기가 있다. 오픈소스 “해커” 파와 비공개소스 “머니”파 이렇게 나눌 수 있다. 그 시작은 해커파였고 큰 형님은 아래의 리차드 스톨먼이라 하겠다

이미지

사진 1: 리차드 스톨먼 – 해커파 원조. 극진 좌파.

1970년대 MIT에서 서식하던 학부 새내기 몇몇은 연구용 메인프레임을, 운영체제나 게임등을 만들어보려 밤마다 해킹했고 그중 스톨먼님이 강력한 해킹실력을 선보였다. 그분은 강한 심성을 지니셔서 MIT에서  패스워드를 사용하는 보안 시스템을 도입하자 곧바로 해킹해 모든 유저에게 패스워드를 사용하지 말라는 경고를 보내기도 하셨다. 사실 그들의 해킹은 파괴가 아니라 재미와 자유의 추구였다. 누구에게도 피해를 주지 않았고 초기 SW의 발전에 핵심이었다. 이후 스톨먼은 오픈소스계의 완전 좌파 GNU를 조직하고 (우파는 Apache 재단), GPL이라 불리는 오픈소스 라이센스를 만들어 이후의 오픈소스 운동에 이론적, 법적 토대를 확립했다.

70년대 미 동부파를 스톨만님이 장악했다면 서부파에는 스티브 워즈니악이라는 얼굴로는 절대 밀리지 않는 분이 있었다. 스티브 잡스와 워즈니악은 Homebrew Computer Club 이라는 직역하자면 “가내수공 컴퓨터 동호회”에서 처음만났다. 잡스가 비지니스로서 컴퓨터의 가능성을 보았다면 워즈니악은 컴퓨터 설계도와 소스를 공짜로 나누어주는 자비로운 해커였다. 워즈니악에겐 만드는 것뿐 아니라 그것을 공유하며 디자인에대해 신나게 떠드는 그 과정이 재미였다. 그래서 해커의 핵심은 파괴가 아니라 공유와 재미다.

이미지

사진 2: 얼굴로 디버깅 하시는 워즈니악님

동네 동호회나 학교 연구실에서 신나게 해킹하던 세력에게 도전장을 던진이가 바로 빌게이츠다. 그가 짠 베이직 컴파일러 소스코드를 당연하게 자기들끼리 나누던 해커 세력에게, 하버드 범생 빌게이츠는 1976년 이런 도발적인 편지를 보낸다 (http://g-ecx.images-amazon.com/images/G/01/books/orly/GatesLetter.pdf). 그 중 한 부분을 번역하자면:

“너희들(해커) 왜 이러니? 너희 취미로 하는 녀석들 왜 소프트웨어를 훔치고 그러니? 너희들 하드웨어는 돈주고 사잖니? 근데 왜 소프트웨어는 공유하고 지랄이야?…좋은 말할때 아래 주소로 돈 보내세요.”

어쩌면 아버지가 부자 변호사였던 빌게이츠에게는 “지적재산권”이 당연한 권리였는지 모른다.

여기로부터 오픈소스 “해커”파와 비공개소스 “머니”파가 갈린다. 머니파에는 그후 오라클의 래리 엘리슨등 거친놈들이 세력을 형성했고, 돈에 눈 뒤집히는 저널리즘은 동호회에서 소스코드나 나누어보는 너드들 커뮤니티보다는 빌게이츠와 래리 엘리슨의 불어나는 재산에 더 관심이 많았다. 폭발적으로 늘어나는 PC, 기업용 컴퓨터 시장이 가져다주는 돈이 “머니”파의 세력을 불렸다. 머니파는 결과적으로 돈의 제국을 만들었다.

그럼 오픈소스 해커파는 죽었는가? 절대로 아니다. 그들은 머니파에 대항해 돈 대신 넘쳐나는 잉여력과 시간으로 그들에 대항했다. 80년대 핀란드의 한 대학생 리누스 토발즈가 재미로 시작했던 리눅스가 윈도우즈에 대항했고, 역시 핀란드의 천재적 해커 몬티가 시작했던 MySQL은 오라클 데이터베이스에 대항했다. 한 두 사람 천재적 해커의 지휘아래 전세계의 개미때같은 해커들이 일어섰다. 누가 돈 주는 일 아닌데도 재미있으니까, 그리고 해커에게 본능적으로 내재된 자유정신이 계속해서 해커파를 살아있게 했다. 오픈소스파는 결과적으로 SW문화를 일구었다.

승리자

자, 그럼 이쯤에서 과거를 정산해보자. 두 세력의 싸움에서 누가 승리했는가? 나는 오픈소스편이지만 과거만 돌아봤을때 머니파의 손을 들어주겠다. 솔직히 리눅스 데스크탑이 윈도우즈와 게임이 되는가? MySQL은 1조원에 팔린 반면 오라클은 여전히 150조원짜리의 회사다. 하지만 우리는 “과거회상부”가 아닌 “미래창조부”라는 부서를 만들었으니 현재와 미래를 생각해 봐야한다. “머니” 제국과 “오픈소스” 문화의 싸움에서 현재 누가 이기고 있는가? 단언컨데 문화가 이기고 있다. 오픈소스 문화를 적극 활용한 곳이 구글, 페이스북등 2000년 이후의 인터넷 기업이다. 구글은 안드로이드를 리눅스 기반 오픈소스로 만들었고, 하둡과 같은 빅데이터 오픈소스 프로젝트에 아이디어를 제공했다. 최근 구글은 오픈소스 회사가 설령 자신의 아이디어를 복제하더라도 고소하지 않겠다는 맹세까지 했다. 구글은 오픈소스 진영의 날고 기는 해커들, 예를 들어 자바의 제임스 고슬링, 파이썬의 Guido van Rossum등을 영입해 오픈소스 문화 중심에 있고 싶어 한다. 구글의 회사가치가 마이크로소프트를 넘어선것은 우연이 아니다. 문화가 이기는 것이다.

스타트업과 오픈소스

하지만 오픈소스 해커 문화가 진짜 꽃피우는 곳은 실리콘밸리의 스타트업이다.  예를들어 github 이라는 오픈 소스 프로젝트의 말그대로 “허브”가 되는 곳이 있다. 2012년 techcrunch의 베스트 오브 베스트 스타트업으로 뽑힌 곳이다. 오픈소스계의 영원한 아이돌 리누스 토발즈는 리눅스 커널을 관리하는 기존 툴이 엉망인 것에 너무 빡친 바람에 git이라는  소스관리 툴을 만든다. 그게 리누스에게 얼마나 깊은 빡침이었는지, 단 2주만에 완성하는 기염을 토했다 (그러고는 후에 “git 만드는게 제일 쉬웠어요” 라는 인터뷰로 나와같은 빠돌이를 지리게했다). github의 두 창업자들은 동네 프로그래밍 동호회(이것봐. 또 동호회다…)에서 만나 git을 인터넷 기반으로 확장하는 아이디어에 착안했다. 각자 직업이 있는지라 주말마다 브런치 먹으면서 코딩을 하고 서비스를 런치했다.

2011년 기준 매일 4500(!)개의 오픈소스 프로젝이 github에서 생성된다. 현재 1조원 가치의 회사로 실리콘밸리의 “달링”으로 사랑받는다. 리누스가 단 2주만에 만든 툴이 1조원짜리 회사, 사실은 그것보다 더 가치있는 인터넷 스케일의 소스코드 저장소를 만들었다. 리누스가 github으로 돈을 벌었다고 들어본적이 없다. 어차피 재미와 빡침의 해소를 위해 코딩하는 사람이니까. 세상 어느곳에서 2주 재미로 코딩하고 1조원짜리 회사가 만들어질 수 있을까? 그게 오픈소스 문화의 힘이다.

마무리

현재도 마이크로소프트나 오라클은 종종 꽤 쿨한 제품을 낸다. 예를들어 클라우드에서 Windows Azure같은 것들이다. 그런데 현지의 분위기는 “뒷방 저 노인네 아직도 뭐 깎고있네…”  이 수준이다. 그들을 추앙했던 저널리즘마저 이제는 제국에 등을 돌려버렸다. 현재는 오픈소스를 가장 강하게 등에 업은 구글, 페이스북, 아마존등이 IT를 이끌고 있다. 그들 역시 문화를 잘 활용한 것일뿐 문화 자체는 아니다. 다음 영웅이 출현하면 언젠가 그  신진 제국들 역시 무너질 것이다. 하지만 문화는 절대로 죽지 않고 도도하게 흐른다.

다시 처음으로 돌아가, 우리는 미래에 대해 이야기하며 소프트웨어가 그 중심에 있다고 말한다. 하지만 청기와집이나 언론 모두 죽어가는 제국을 우러러보며 모델로 삼으려할 뿐이다. 스타트업이 많이 생겨야 한다고 대빵께서 이야기한다. 나는 오픈소스 아닌 MS의 플랫폼에서 만드는 스타트업을 도무지 상상할 수가 없다. 그들의 기억은 슬프게도 여전히 MS나 오라클이 한국에 뿌리내린 제국 그 안에 갇혀있다. 액티브엑스로 보안을 통제해야 하고, ‘을’이 짜낸 윈도우즈 프로그램이 ‘갑’에게 제값 받게 해주는 법 제정, 그것이 그들의 틀이다. 실리콘밸리의 가장 핵심에 있는 오픈소스 해커문화를 이해하는 것은 어렵다 치더라도, github처럼 한두명 젊은이가 오픈소스로 몇조원짜리 회사를 일구었다는 성공신화라도 좀 누가 전했으면 싶다. 제국은 죽지만 문화는 산다.

언젠가 우리 큰분께서 해카톤(Hackathon) 이벤트에 납시어서 해킹에 열중하는 우리의 희망들에게 인자한 미소 한방 날려주는 날이 왔으면 하고 바래본다.

– 박상민 http://twitter.com/#!/sm_park

컴퓨터 이야기 #3 – 계산기에서 컴퓨터로

지난번 컴퓨터 이야기 #1에서 다룬 것처럼 버네버 부쉬(Vannevar Bush)의 막대기들로 이루어진 아날로그 계산기는 1940년대까지 전쟁터를 포함한 전세계 곳곳에서 사용됐다. 그리고 곧 클라우드 섀년(Claude Shannon)에 의해 수식계산뿐 아니라 논리연산까지도 기계로 표현할 수 있음을 알게됐다. 1940년대는 숨막히는 2차대전의 열기만큼, 계산기에서 컴퓨터로 넘어가고자 하는 과학자들의 열정이 뜨거운 시대였다. 이 시기 넘어야했던 가장 큰 두가지 산은 이렇게 요약할 수 있다:

1. 기계식 계산에서 전자식으로 발전

2. 계산기에서 사람처럼 논리를 수행하는 진짜 컴퓨터로의 발전 (이를 위해선 if/else와 같은 조건문, for 와 같은 반복문 수행이 필요하다)

두가지 산을 가까스로 넘은 첫 발명품이 바로 우리가 어렸을적 배운 최초의 컴퓨터 에니악이다. 여기서 한가지 짚고 넘어갈 점은 사람들마다 인류 최초의 컴퓨터가 무엇이냐에 의견이 다르다는 점이다. 혹자는 1820년대 디자인된 찰스 베비지(Charles Babbage)의 미분방정식 계산기가 최초라 주장하고, 최근에 와서는 에니악보다 5년이 앞섰다고 밝혀진 독일의 Z3 머신 (Konrad Zuse)이 최초다라는 주장도 있다. 하지만 컴퓨터를 정의하는 여러가지 관점들 — 즉 막대기들로 이루어진 기계식도 컴퓨터냐? 아니면 계산기도 컴퓨터냐? — 에 따라 다른 답이 나오기 때문에 정답은 없다고 생각한다. 다만 개인적으로도 그렇고 많은 학자들도 동의하는 것은, 현대식 컴퓨터를 처음 상상한 사람은 지난회 소개한 앨런 튜링 (Alan Turing)이라는 사실이다.

거인의 뇌 에니악

80년대 초등학교를 다닌 사람에게 “세계 최초 컴퓨터는?” 이라는 질문을 던지면 자동으로 “에니악!” 이라는 답이 튀어나올 것이다. 그리고 그 순간 머리속엔 괴물같은 거대한 검은 기계와 그 아래 작게 서있는 가운입은 과학자의 이미지가 그려질 것이다. 그렇게 컴퓨터를 소개해야했던 그 시대의 교과서가 한편으론 좀 씁쓸하다. 차라리 그 당시에 한창 히트하던 애플 컴퓨터를 소개했으면 좀 더 컴퓨터가 친숙하게 와닿았을걸… 아무튼 교과서가 거짓말하진 않았다. 실제 에니악의 생김새는 그 당시 사람들에게도 “거인의 뇌” 라고 불릴만큼 쇼킹한 모습이었으니 말이다.

에니악은 1943년 펜실베니아 대학교에서 만난 30대의 물리학자 마우쿨리(John Mauchly)와 20대의 전기과 대학원생 에커트(J. Presper Eckert)에 의해 만들어진 최초의 전자식 범용(all-purpose) 컴퓨터였다. 에니악은 당시 포탄의 궤적계산을 위해 미 육군이 추진한 프로젝트였다. 에니악은 과학 천재(예를들어 튜링)에 의한 놀라운 상상의 결과물이라기 보단,  노력파 엔지니어 마우쿨리와 에커트의 열정이 낳은 작품이라고 해야 적절할 것같다. 이전에도 비슷한 형태의 전자식 계산기, 예를 들어 아이오와 대학의 ABC 컴퓨터등이 이미 만들어졌고 에니악의 개발자들은 이것들을 참조했으니 말이다. 하지만 에니악이 대단한 것은 그때까지 현실성 없어보였던 진공관 컴퓨터를 실제 유용한 계산에 쓰일수 있을 정도로 성능과 안정성면에서 혁신시켰기 때문이다.

왼쪽 그림은 실제 에니악에 쓰인 진공관인데, 1940년대까지 진공관은 라디오나 TV등의 전자제품에 사용된 기본 부품이었다. 기계식 계산기에서는 막대의 회전 각도에 따라 숫자를 표현했다면 진공관에선 전류의 흐름 여부와 강도에 따라 숫자를 표현할 수 있고, 여러개의 진공관을 배열해서 덧셈등을 수행하는 기본 연산기를 제작할 수 있었다. 하지만 진공관의 문제는 쉽게 타버리는 불안정성에 있었다. 에니악은 17,468개의 진공관으로 이루어졌는데 한개의 진공관이 탈때마다 컴퓨터는 정지했고, 사람이 들어가 진공관을 교체해야만 컴퓨터를 다시 가동할 수 있었다. 에니악의 완성전까지 사람들이 프로젝트의 성공을 의심한 이유가 여기에 있었다.

하지만 마우쿨리와 에커트는 뛰어난 전기설계능력과 근성을 발휘해, 결국 에니악을 미육군이 흡족해할만한 수준으로 완성했고, 에니악은 1955년까지 수소폭탄 설계나 포탄의 궤도계산을 위해 사용된다. 에니악의 성능과 안정성을 요약하면 이렇다.

  • 평균 이틀에 한번 꼴로 컴퓨터가 멈췄고, 진공관을 가는데엔 15분 정도 걸렸다.
  • 초당 5,000번의 덧셈/뺄셈과 357번의 곱셈을 수행할 수 있었다 (참고로 아이폰 3GS는 약 20억번의 곱셈을 수행할수 있다; 즉 에니악보다 5천만배 빠르다)


에니악의 결정적 한계는 프로그래밍에 있었다. 새로운 계산프로그램을 에니악에 집어넣기 위해선 위 그림처럼 사람 (6인의 여성)이 직접 케이블을 연결하고 스윗치를 On/off 하는 과정을 거쳐야 했고 흔히 며칠이 소요됐다. 즉 새로운 소프트웨어를 돌리기위해 사람이 기계를 고쳐야 했던건 버네버 부쉬의 아날로그 계산기와 마찬가지였다. 이것은 튜링의 상상과는많이 달랐다. 튜링머신에선 소프트웨어를 테이프에 텍스트로 쓰고 범용 튜링머신(하드웨어)이 텍스트로 기록된 소프트웨어를 수행한다. 고쳐야 하는 계산기와 이론적인 튜링머신, 그 사이 간극을 연결한 “마법사”가 바로 폰 노이먼이다.

마법사 폰 노이먼 (John Von Neumann, 1903-1957)

폰 노이먼을 도대체 어떻게 설명할 수 있을까? 지금 블로그의 모티브가 된 책 [1]에선 그를 “마법사 (Wizard)” 라고 표현했는데, 그 보다 더 적절한 표현을 찾을수 없을것 같다. 헝가리 출신으로 미국에서 활동한 유대인 학자. 그의 동료 학자들은 그를 “마지막 위대한 수학자”, “두려운 능력자”, 혹은 “인류보다 고등한 존재의 뇌를 가진 사람”등으로 표현했다. 폰 노이먼은 건드리지 않은 현대 과학 분야가 없을 정도로 많은 분야에 빛나는 업적을 남긴다.
예를들어:

  • 경제학에 지대한 영향을 미친 게임이론을 창시
  • 양자역학과 논리학(logic), 집합론(set theory)에 결정적 공헌
  • 맨하탄 프로젝트에서 핵무기의 폭발에 관한 수학 모델을 세우고 계산
  • 현대식 컴퓨터 구조를 수립 (폰 노이먼 구조라 흔히 불림)

그 시대 폰 노이먼의 무게는 프린스턴의 고등과학원이 설립되며 초빙된 4인중 한명(아인슈타인, 괴델과 함께)이었다는 사실에서 쉽게 짐작할 수 있다. 1930년 독일의 수학학회에서 무명의 괴델은 “라이프니츠의 꿈은 이룰 수 없음”을 증명하는 이론을 내놓았는데, 그 당시 그 의미를 다른 수학자들 누구도 이해하지 못할때, 폰 노이먼은 그 자리에서 “논리학은 이제 끝장을 봤구나” 인식하고 다신 논리학쪽으로 고개를 돌리지 않았다.

폰 노이먼은 천재성에 더해 어쩌면 운이 좋은 사람인지도 모른다. 왜냐하면 그는 수학자로서 당시 비교적 알려지지 않은 튜링의 논문을 읽고 그 중요성을 간파한 소수의 사람중 하나였고, 동시에 맨하탄 프로젝트의 멤버로 에니악 프로젝트에 참여해 실물 컴퓨터를 경험한 특혜받은 인물이었기 때문이다. 즉 튜링의 이상적인 컴퓨터와 고쳐야 하는 계산기 ‘에니악’ 두가지를 모두 이해한 천재에게, 현대 컴퓨터의 첫 실물 모형 EDVAC의 개발은 어쩜 너무 당연한 수순이었는지도 모른다. 그는 에니악 다음 모델의 컴퓨터 EDVAC을 디자인한 리포트 “First Draft of a Report on the EDVAC (1945)”를 쓰고  현대식 컴퓨터의 아버지라는 명예를 얻는다. 그가 쓴 리포트는 실물 EDVAC뿐 아니라 곧 미국과 유럽에서 에니악 다음 세대의 컴퓨터 디자인에 기본 모델이 되었다. 리포트는 이런 내용을 담고 있다.

  1. 컴퓨터의 메모리에 프로그램과 데이터를 모두 저장해서, 사람의 개입없이 자동으로 프로그램의 명령어를 하드웨어가 수행하도록 한다 (stored program). 에니악은 사람이 케이블과 스위치를 조작해서 프로그램 해야 했다.
  2. 이진법을 사용한다 (에니악은 10진법).
  3. Program Counter 등의 레지스터를 사용한다.
  4. 수리연산 (덧셈, 뺄셈등)들의 회로 설계

리포트의 가장 중요한 내용은 프로그램이 데이터와 함께 메모리에 올려진다는 stored program 이었고 이는 프로그램이 테이프에 기록된다는 튜링 머신의 실물구현이었다. 아인슈타인에 버금가는 사회적 존경을 받았던 폰 노이먼은 불행한 두 천재 튜링, 괴델과는 다른 삶을 살았다. 명성 얻기를 주저하지 않았던 그는 그의 리포트에 튜링의 영향에 대해 전혀 밝히지 않는다. 후세의 연구에 의해 그가 튜링의 논문에서 직접적으로 아이디어를 얻었음이 발견됐을 뿐이다. 폰 노이먼이 프린스턴에서 박사를 마친 튜링에게 그의 조교 자리를 제안했던 사실은 그가 얼마나 튜링에게 관심이 있었는지를 말한다. 또한 폰 노이먼은 마우쿨리와 에커트와 함께 아이디어를 구상했으면서도 단독 저자로 리포트를 작성했다. 이로인해 이들 사이에선 훗날 특허 싸움을 치르기도 한다. 이상적인 컴퓨터와 현실적인 기계 사이의 간극을 연결한 폰 노이먼, 하지만 그 둘 모두를 자신의 업적으로 드러내고 싶었던 것은 지나친 욕심이 아니었을까?

튜링 (Alan Turing) – 진정한 소프트웨어의 아버지

튜링은 수학자로서 가상의 튜링머신을 상상하는 것에 그치지 않았다. 영국으로 돌아가 EDVAC과는 다른 형태의 컴퓨터 ACE (1946)를 구체적으로 하드웨어 레벨까지 설계하고 심지어 11,200 파운드라는 구현 비용까지 산정했다. 하지만 비전없는 영국 정부 (심지어 그를 자살로까지 내몰았으니)에 의해 ACE 프로젝트는 이리저리 표류하고 우울한 성격의 튜링을 더 좌절시키고 만다.

폰 노이먼이 비록 20세기의 빛나는 천재이긴 하지만 컴퓨터, 특히 소프트웨어의 진짜 아버지는 튜링이라고 할 수 있다. ACE 컴퓨터는 하드웨어의 역할은 최소한으로 하고 소프트웨어가 복잡한 연산을 수행하는 구조인데, 70년대 들어 개발된 RISC 프로세서가 그 연장선이라 할 수 있다. 폰 노이먼이 컴퓨터의 역할을 빠른 계산기 정도로 규정하고, 컴퓨터 프로그래밍을 단순 노동으로 치부한 것은 그가 EDVAC에 어셈블러 (프로그래밍 도구로 사람의 언어를 이진법 코드로 변환) 를 구현하려한 그의 학생에게 화를 냈다는 일화에서 잘 드러난다 [2]. 반면 튜링은 1947년 ACE 컴퓨터를  설명하며 사람과 대결하는 체스 프로그램을 예제로 소개해, 아직 실물 컴퓨터를 구경조차 못해본  수학자들을 놀라게 했다(이 당시엔 O/S, 컴파일러등 소프트웨어라는 개념 자체가 존재하지 않았다). 50년이 지난 1996년에 드디어 딥블루 컴퓨터가 체스 챔피언을 이겼다는 사실은 튜링의 비전 그 깊이를 알게 한다. 튜링에게 있어 컴퓨터는 사람처럼 생각하고 사람과 대화할 수 있는, 가리워져 있으면 사람인지 컴퓨터인지 구별할 수 없는 지적 존재였던 것이다. 이 글의 처음 에니악 사진을 다시 한번 보고 튜링을 생각한다. 그의 상상력의 깊이에 무한한 감사를 표현하고 싶다.

– 박상민 http://twitter.com/#!/sm_park

[1] The Dream Machine: J.C.R. Licklider and the Revolution That Made Computing Personal
[2] The Universal Computer: The Road from Leibniz to Turing by Martin Davis

컴퓨터 이야기 #2 – 천재들의 행진

2차대전을 둘러싼 시기(1940-60)는 아마도 “천재들의 행진”이라고 불러도 될만큼 컴퓨터 역사에 큰 발자취를 남긴 거인들이 가득하다. 전쟁이 조성해 놓은 급박한 분위기가 천재들의 상상력에 불을 지폈고, 때마침 히틀러의 나치즘을 피해 미국, 특히 보스톤 지역으로 몰려든 유럽의 천재들 (예: 아인슈타인, 커트 고델, 폰 노이먼..)은 MIT, 하버드를 중심으로 서로 아이디어를 나누고 토론하며 현재까지도 영향력을 미치는 학문 분야들을 만들어간다. 지난번 포스팅 [1]에서 다룬 인물 버네버 부쉬가 지휘하는 가운데, 미국 정부와 육/해/공군은 독일을 위협할 수 있는 잠재적 기술들에 아낌없이 연구자금을 지원했고, 이 당시에 연구됐던 기술들은 실제 무기로 개발되기도 했지만, 훗날 많은 학문 분야들과 IT산업의 근본을 이루었다는 점에서 더 큰 의미가 있었다.

컴퓨터의 개념과 결과물이 막 태어나는 시점이었던 1930-1945년의 특징은 수학, 철학, 인지학(두뇌를 다루는 학문), 심지어 생물학에 이르기까지의 분야를 섭렵했던 천재들이 혁명을 주도했다는 사실이다. 즉 단순히 기계의 조합, 계산기 수준의 생각으로는 컴퓨터의 탄생을 이룰 수 없었다. 17세기 라이프니츠의 꿈 (무엇이든 대답할 수 있는 꿈의 방정식)을 이해하고, 더 나아가 사람의 본질과 생각(reasoning)의 원리에 대해 끊임없이 고민하는 사람들이 컴퓨터를 상상해냈다. 그들에게는 컴퓨터란 독일군에게 보낼 포탄의 정확한 궤적을 계산하는 계산기 수준이 아닌, 사람의 마음(mind)을 심을 수 있는 기계였다. 그 천재들 중 하나가 노버트 와이너(Norbert Weiner) 였다.

노버트 와이너 (Norbert Weiner) (1894-1964)

한국에 천재소년 송유근이 있다면, 20세기 미국엔 노버트 와이너가 있었다. 와이너의 천재성은 그야말로 대단했다. 14세에 대학교를 졸업했고 17세에 하버드에서 수학 박사학위를 받는다. 그리고 그 과정에 수학, 동물학, 철학을 모두 공부했다. 학위를 마치고 유럽으로 날아가 스승으로 삼은 사람들의 면면도 대단하다. 지구 최고의 철학자 버틀랜드 러쎌 (Bertrand Russell), 수학자 데이빗 힐버트 (David Hilbert), 하디 (G.H. Hardy) 등등. 한마디로 20세기 모든 지식이 그의 머리안에 있었다고 해도 과언이 아닐것이다. 천재성 만큼이나 기행도 많았던 그는, 갑자기 노동문제에 관심이 생겨 기자로 일한다거나 전쟁시기엔 애국심때문에 군에 지원 복무하기도 하는등 “신동 증후군”을 톡톡히 앓았다. 그는 MIT의 수학과 교수로 평생을 연구에 몰두한다.

와이너가 컴퓨터의 발전에 미친 공적은 이것이다라고 하나를 내세우긴 힘들다. 그의 업적은 “피드백”이라는 개념을 공식적으로 도입한 학문분야 싸이버네틱스(Cybernetics)라 할 수 있는데, 싸이버네틱스의 피드백 컨트롤 개념은 훗날 인공지능, 인지학, 철학등에 걸쳐 다양하게 영향을 미친다. 말하자면 와이너는 인공지능과 로봇의 선구자쯤으로 요약할 수 있겠다.  피드백 컨트롤의 개념은 아래 그림처럼 아주 간단하다. 어떤 대상 (컴퓨터, 사람, 동물 등등. 그림에선 Process)에 인풋(Input)을 가하게 되면 그 대상은 그 인풋에 영향받아 측정할 수 있는 결과(Output)를 보인다. 그때 인풋과 아웃풋 사이에 대상의 행동을 제어할 수 있는 제어기(그림에선 Comparator)를 달아서 원하는 방식으로 대상을 제어하는 것이다.

이 간단한 피드백 루프(loop)의 응용은 아주 광범위한데, 예를 들어 실내 온도 조절기엔 “아웃풋=온도, 인풋=냉난방기를 적용하게 되면, 제어기는 자동으로 원하는 온도를 맞추기 위해 냉난방기를 동작시키게 된다. 나아가 뉴럴 네트워크(Neural Network)이라는 인공지능 이론이 여기에서 출발한다. 사람의 뇌 기본은 뉴론(neuron)으로 이루어져있고 각각의 뉴론은 전자 신호를 인풋으로 받고 뉴론의 프로그램에 따라 다시 전자신호를 아웃풋으로 배출한다는 개념이다. 그리고 왼편 그림처럼 수도 없이 많은 뉴론들이 서로 통신하며 인풋/아웃풋으로 엮인 큰 네트웍을 형성한 것이 바로 인간의 뇌라는 개념이다. 이를 구현하면 곧 궁극의 AI 머신이 된다.

와이너는 인웃/아웃풋, 통신(Communication), 그리고 제어기(Controller)를 수학으로 표현(모델링)할 수 있음을 보였다. 그리고 이는 단지 전자기술 한 분야를 넘어 생물학, 인문학에 이르기까지 깊은 의미를 갖는다. 왜냐하면, 세상의 거의 모든 존재들은 인풋-아웃풋, 그리고 그 사이에 위치해서 인풋을 아웃풋으로 바꾸어주는 제어기로 표현할 수 있기 때문이다. 예를들어 지금 노트북 스크린을 보는 내 눈은 “인풋”, 그리고 키보드를 두드리는 내 손은 아웃풋, 둘 사이의 “보고 두드리는” 속도를 조절하는 뇌는 “제어기”라는 의미이다. 일종의 목적을 갖고 인풋/아웃풋을 조절해 주는 제어기, 이것을 현실에서 구현해 내는 것은 바로 우리 두뇌와 동일한 일을 하는 인공지능 기계를 만드는 일이다. 이렇게 와이너가 정의한 제어 이론은 현대의 전자공학, 인지과학, 인공지능등의 분야에 기초를 마련했다.

고독한 천재 튜링 (Alan Turing) (1912-1954)

애플 컴퓨터의 로고 “한입 베어문 사과”가 튜링이 자살하면서 베어 물었던 사과에서 비롯됐다는 이야기가 있다. 그게 사실인지 아닌지는 확인할 방법이 없지만, 애플을 좋아하는 사람들은 그 이야기가 사실이기를 바란다. 컴퓨터 역사에서 튜링만큼 매력적인 인물이 없기 때문이다. 컴퓨터의 아버지라 불릴만한 발견을 했고, 독일군의 암호를 해독하는 일을 했으며, 인공지능의 선구자 였던 사실들, 그보다 호사가들의 마음을 더 끄는 것은 그가 바로 게이였고, 영국정부로부터 강제로 호르몬 주사를 맞은 사실, 그리고 그로 인한 수치심에 독사과를 먹고 42세라는 젊은 나이에 자살한 비극 때문일 것이다. 어쩌면 그렇게 비극적인 죽음을 맞지 않았다면 컴퓨터의 역사는 다르게 쓰여지지 않았을까 생각이 든다. 말년에 그가 몰두한 연구는 인공지능이었고, 최근에 iPhone의 Siri가 큰 반응을 불러일으키는 것을 보면 말이다.

튜링이 컴퓨터의 아버지라 불리는 것은 그가 상상한 튜링 머신 때문이다. 튜링 머신은 이전 포스팅 [2] 에서도 소개했는데, 형체를 가진 기계가 아니다. 튜링이 고안한 일종의 가상의 기계인데, 사람이 사고(thinking)할때의 과정을 표현한 모델이다. 튜링 머신은 정보를 읽고 쓸수 있는 무한한 길이의 테이프 (카세트 테이프라고 생각해도 OK), 테이프 좌,우로 움직이며 정보를 읽거나 쓰는 헤드, 그리고 언제 어떻게 테이프 내용을 업데이트 할지를 결정하는 제어로직(현대용어론 프로그램)으로 구성되어 있다.

튜링머신을 이해하기 위해 간단한 곱셈을 예로 들어보자. 15×24 라는 곱셈을 할때, 우리는 이런 과정을 거친다 (암산이 가능한 천재들도 한번 따라해 주시길..).
    15
x  24
——–
60
+300
——–
=360

처음에 테이프엔 왼쪽 맨 윗처럼 문제만 써있다. 제어 로직엔 오른쪽처럼 우리가 알고 있는 곱셈 방법이 프로그램 돼있다. 헤드는 테이프 내용을 읽어가며 곱해질 숫자의 맨 끝자리 수(4)를 찾은 다음 그 전 수 (15)를 곱한 중간 결과(60)를 테이프에 적는다. 이번엔 곱하는 수의10의 자리 (2)를 찾아서, 다시 그 전 수(15)를 곱하고 중간 결과를 적는다 (300). 끝으로 헤드는 중간결과값 적은 자리를 찾아가서 60과 300을 각각 읽어 들이고 두개를 더한 값을 테이프의 맨 끝에 적고 계산을 마친다.  위의 간단한 곱셈식은 튜링 머신으로 할 수 있는 “논리적 사고(thinking)” 의 간단한 예다. 결론적으로 테이프, 헤드, 제어정보로만 이루어진 튜링 머신은 인간이 할 수 있는 모든 형태의 논리적 사고를 표현할 수 있다.

그 다음 튜링이 보인 결과는 더 경이롭다. 튜링은 제어로직과 인풋데이터로 이루어진 튜링머신을 텍스트로 쓰고, 이를 또 다른 튜링머신 (Universal Turing Machine)에게 주어서 시뮬레이션 할 수 있도록 만들수 있음을 보였다. 즉, 위의 예에서는 복잡한 곱셈에 쓰이는 제어 로직(일의 자리, 십의 자리 순으로 계속 곱해나가고, 중간 결과값을 더함)을  [*, +, 헤드 이동…] 등의 일련의 텍스트로,  15, 24라는 인풋 데이터와 함께 테이프에 기록하는 것이다. 그럼 유니버설 튜링머신은 테이프에 새겨진 곱셈의 제어로직이 하라는 그대로 인풋 데이터를 가지고 수행하게 된다. 아하, 이렇게 튜링은 컴퓨터를 인류 최초로 상상한 것이다! 다음편에 소개할 폰 노이먼에게 튜링의 상상은 한줄기 빛이 된다.

이렇게 천재들은 인류의 역사에 큰 공헌을 하지만 한편으로 그들의 인생은 불행하게 마치는 것이 공통적이다. 강제로 호르몬주사를 맞아 가슴이 여자처럼 커지는 수모를 겪고, 결국은 독사과를 베어 물고 죽어야했던 튜링 (최근 영국 정부는 튜링에게 공식적으로 사과했다). 기술이 전쟁에 미치는 영향을 목격한후, 정부의 연구 자금을 스스로 끊고 일생을 함께 보낸 친구들 (폰 노이먼등)과의 관계마저 절교해 말년을 외롭게 보낸 와이너. 그리고 여기에 언급하진 않았지만 튜링보다 앞서 라이프니츠의 문제에 답을 한, 20세기의 최고 수학자 커트 괴델(Kurt Godel) 의 말년은 더 슬프다. 괴델은 정신불안에 시달리며 자신 아내이외의 사람이 주는 음식에 독이 들어있다고 의심하고, 아내가 병으로 입원해있는 동안 홀로 굶어죽고 만다. 빛나는 천재의 마음(mind)은 세상을 밝게 만들었지만, 그 밝음만큼 내면에 간직해야 했던 어두움은 그들 자신의 인생을 불행으로 몰고 간 것이다.

(다음 편은 폰 노이먼과 에니악, 에드박등을 다룰 예정입니다 ^_^b).

– 박상민 http://twitter.com/#!/sm_park

[1] 컴퓨터 이야기 #1 – 생각에서 기계로
[2] 소프트웨어, 하드웨어의 아버지

컴퓨터 이야기 #1 – 생각에서 기계로

왜 옛날 이야기를 시작하지?

지난번 괜히 제목만 거창한 글 “소프트웨어, 하드웨어의 아버지” 이후로 계속 컴퓨터, 특별히 소프트웨어 역사 이야기를 해보고 싶었다. 컴퓨터의 역사만큼 흥미진진한 이야기가 더 있을까 싶을 정도로 지난 70년은 컴퓨터, 인터넷, 웹을 창조한 영웅들의 무용담으로 가득하다. 사실 17세기의 라이프니츠까지 거슬러 올라가야 진정 소프트웨어의 역사를 이야기할 수 있겠지만, 우선 한동안은 20세기 초, 현대식 컴퓨터가 처음 만들어지던 시절부터 현재 실리콘밸리가 번영하기까지의 스토리들을 짚어보고 싶다. 굳이 옛날 이야기들을 써내려가는 건 컴퓨터, 소프트웨어가 얼마나 즐겁고 흥분되는 학문, 직업인지 이야기 하고 싶어서다. 어린 학생들이 가장 기피하는 전공이 컴퓨터 사이언스가 되었다는 이야기, 40대 프로그래머의 미래는 치킨집 뿐이라는 이야기들 (그래서 대학생들 컴퓨터 숙제하다 막힐땐 동네 닭집으로 달려가야 한다는데…), 그런 우울한 소식들에 지쳐있는 다음 세대들에게 소프트웨어의 “환상적인” 역사들을 소개하고 그래서 조금이라도 더 이 분야에서 일하고 싶은 생각이 들게 한다면, 그럼 지금의 잉여짓도 큰 보람이 있을거란 생각이 든다. 그럼 시작해 볼까?

생각에서 기계로

17세기 라이프니츠의 발칙한 상상, “세상의 모든 질문에 답을 주는 기계를 만들 수 있을까?“, 은 결국 괴델과 튜링의 증명을 통해 불가능하다고 결론이 났다 (관련 내용은 지난번 포스팅 참조 [1]). 즉 “신은 존재하는가?”와 같은 인간이 던지는 모든 질문들 중 어떤 것들은 Yes/No의 대답이 불가능하다고 결론난 것이다. 괴델은 그런 기계(궁극의 알고리즘)가 존재할 수 없음을 우회적으로, 세상의 어떤 논리로도 증명할 수 없는 다른 차원의 수들이 있음을 보임으로써 증명했다. 튜링은 거기에서 더 나아가 대답할 수 없는 질문의 “예제(example)”를 선보였고, 바로 이것이 튜링의 Halting Problem 이었다 (여전히 이게 뭔 이야긴가 궁금하시면 [1]을 꼭 참조!). 고대의 철학, 논리학, 수학자들을 미궁가운데 빠뜨렸던 질문에 답을 했으니 이제 과학자들 스트레스는 좀 덜어졌겠다 생각하면 오산이다. 이유는 바로 전 세계에 몰아닥친 2차대전의 여파가 과학 세계에도 몰아쳤기 때문이다.

전장에 나가있는 젊은이들의 생명이 과학자들에게 맡겨지게 된건 바로 현대식 전투에서 복잡한 수식 계산이 쓰이기 시작했기 때문이다. 예를들어 장거리 포의 궤적을 정확히 예측하기 위해서는 거리, 중력, 바람의 방향과 속도등 다양한 변수들을 궤도 방정식에 적용해야 했다. 전장에서 수식표를 들고 다니며 대입하는 방식으로는 목표물과는 엉뚱한 방향으로 포를 날릴수 밖에 없었다. 더 나아가 미국이 본격적으로 핵무기를 개발하는 “맨하탄 프로젝트”를 시작했는데, 플루토늄 239를 오직 원하는 시점에 폭발시키기 위한 장치를 만들기 위해서는 대단히 복잡한 계산식을 풀어내야만 했다 (실제 폰 누이먼에게 맡겨진 일이었다). 독일군의 암호를 해독하기 위해서도 빠른 계산기가 필요했다. 이것이1930-40년대에 과학계에 던져진 숙제였다.

버네버 부쉬(Vannevar Bush) 와 아날로그 계산기

그림: 버네버 부쉬(1890-1974)와 그의 미분계산기

버네버 부쉬 [2]의 이름을 들어본 적이 있다면 아마도 그가 현대식 “월드 와이드 웹(WWW)”의 첫 고안자였다는 사실때문일 것이다. 하지만 그것 말고도, 버네버 부쉬의 업적은 20세기 미국 과학계에 전설로 남아있다. 그의 몇가지 역할만 예로 들자면, “맨하탄 프로젝트의 지휘자”, “군수업체 Raytheon 설립자”, “최초의 미국 대통령 과학 비서관”등이다. 현재 세계를 지배하는 미국의 힘이 과학에 있다고 한다면, 그같은 과학정책을 처음 디자인한 사람이 바로 버네버 부쉬라고 할만큼 그의 영향력은 지대했다.

과학계에서 그의 첫 업적은 기계식 계산기의 개발이었다 [3] . 1920년대 MIT의 전자공학 교수로 일하며 그는 미분 방정식을 계산해 낼 수 있는 거대한 기계를 만들어냈다. 그의 계산기는 설명 그대로 기계였다: 위 그림처럼 막대, 기어, 도르래를 엮어서 만들었고 변수에 값을 할당하기 위해서는 여러개의 막대들을 정확한 각도로 회전시켜야 했다. 계산기에 새로운 방정식을 프로그래밍하는 건 더한 노동이었다. 막대와, 기어, 도르래를 다시 연결해서 주어진 방정식과 가장 유사한 형태로 조합해야 했던 것이다. 즉, 지금 우리가 C 언어로 몇줄 안되게 짜내는 방정식 계산 프로그램을 만들기 위해 이 당시에는 대학원 학생들이 땀 뻘뻘흘리며 막대기와 도르래를 회전시켜야 했다는 말이다. 그리고 계산기에 달린 모터를 돌리기 시작하면 기어가 돌고 막대기가 회전하면서 2%내의 오차에서 정확한 답을 계산해 냈다. 지금 시대의 우리가 보기에 너무나 조악한 이 기계는 그 당시 전 세계  과학계를 환희로 물들인 최고의 발명품이었다. 미국과 유럽등의 대학들에 날개돋힌듯 복제되어 배포되었고, 훗날 2차대전중 복잡한 계산식을 풀어내는데 사용되었다.

그림: 버네버 부쉬의 메멕스 (Memex)

앞에서 언급한대로 버네버 부쉬는 월드 와이드 웹의 개념을 처음으로 “상상”한 사람이다. 정보의 홍수속에 웹을 타고 헤엄치는 우리에게는 덜 와 닿겠지만, 그 시대의 유일한 미디어는 책과 마이크로 필름 정도였다는 것을 생각해보면 그의 상상력이 얼마나 기막힌것이었는지 알수 있다. 부쉬는 사람이 생각할때 꼬리에 꼬리를 물고 생각의 끈이 이어진다는 사실에 착안했다. 그리고 곧 사람의 두뇌에서 일어나는 그 원리를 그대로 기계로 만들어보면 어떨까 상상했고, 메멕스(Memex)로 불린 그의 상상속 기계를 구체적으로 “As we may think” 라는 논문에서 기술했다 [4]. 즉 마이크로 필름들에 쓰여진 정보중 다른 정보로 연결(association/하이퍼링크) 하는 부분에 문자 코드를 입력해 놓고, 필름를 읽다가 책상위 버튼을 누르면 책상속 기계가 돌아가며 문자코드가 가리키는 마이크로 필름을 찾아서 영사기에 올리고 출력해 준다는 개념이다. 이것은 지금의 WWW와 얼마나 유사한가! 문자 코드는 하이퍼링크고, 버튼은 마우스 클릭, 책상밑 기계는 네트워크로 대체하면, 곧 그의 상상이 바로 월드 와이드 웹 이었음을 알 수 있다. 1945년에 이러한 시스템을 상상했다니, 그저 놀라울 뿐이다. 그런 비전을 가진 사람이 만든 과학정책이 아직도 세계를 지배한다는 건 어쩌면 당연한 일인지도 모르겠다.

클라우드 섀넌(Claude Shannon)의 충격적인 석사 논문

클라우드 섀넌 (Claude Shannon), 1916-2001

20세기 최고의 “석사” 논문을 뽑으라면 누구나 주저하지 않고 클라우드 섀넌(Claude Shannon) [5]의 1937년 논문 “A Symbolic Analysis of Relay and Switching Circuits [6]”을 꼽을 것이다. 솔직히 박사논문들과 비교해봐도 그보다 영향력있는 논문을 과연 찾을 수 있을까 싶다. 왜냐하면 그의 논문이 역사상 최초로 추상적인 논리가 현실에서 돌아가는 기계로 만들어질 수 있음을 보였기 때문이다.

1936년 스무살에 수줍은 성격의 섀넌은 미시건 대학을 졸업하고 위에 소개한 버네버 부쉬의 석사 학생으로 MIT에 입학했다. 그는 부쉬의 기계식 계산기를 사용하면서, 계산기에 사용된 스위치 (switch: 막대와 막대를 연결)의 동작에 흥미를 갖게 됐다. 그리고 그는 곧 모터에 의해 열리고 닫히는 스위치가 오래전부터 사용됐던 불(Boole)의 이진법 연산(Boolean logic)과 동일하다는 사실을 발견했다. 참고로 이진법 연산이란 변수에 숫자가 아닌 참/거짓을 할당하고 더하기, 빼기의 사칙연산이 아니라 AND, OR, NOT과 같은 연산을 사용해서 주어진 식의 최종적인 참/거짓 여부를 구하는 계산법이다. 사람이 생각하고 결론에 다다르기까지의 논리를 바로 이진법 연산으로 표현할 수 있다. 섀넌은 아래 그림처럼 스위치 두개를 직렬로 이어놓았을때는 AND 연산, 병렬로 이어 놓았을때는 OR 연산과 같은 결과가 나오는것을 발견했다. 더 나아가 스위치들을 좀 더 복잡하게 조합하면 이전 스위치의 결과 (참/거짓)에 따라 다음 스위치의 열고 닫히는 여부를 결정할 수 있음도 발견했다 (즉 if/else 문을 수행할 수 있다는 뜻).

  

그림: AND 연산                                                                      그림: OR 연산

“이게 뭐 별거라고 21세기 최고의 논문 운운하냐?” 혹 이렇게 생각한다면, 좀 더 깊이 그 의미를 음미해보기를 권한다. 그것은 곧,

“사람의 생각을 기계의 조합을 통해서 표현할 수 있다”

는 충격적인 (적어도 내게는) 뜻이기 때문이다. 1930년대엔 모터로 스위치를 여닫는 기계가 쓰였지만, 곧 같은 원리가 진공관, 전자회로, 집적회로, 실리콘등 물질을 바꾸어가며 지금의 CPU와 메모리까지 이어져왔기 때문이다. 사람의 생각을 기계로 표현하는 것, 즉 컴퓨터 하드웨어의 시작을 연 것이 충격적이 아니라면 뭐가 더 충격이 될수 있을까?

지도교수 부쉬와 마찬가지로 섀넌의 천재성은 여기서 끝나지 않았다. 섀년은 10여년후 1948년 또 다시 세계를 놀래키는 논문 (A Mathematical Theory of Communication)을 쓰고 정보이론 (Information Theory)의 아버지가 된다. 일설에 의하면 그는 그의 발견을 논문으로 쓰기 싫었지만(귀찮았지만) 일하던 벨 연구소의 보스가 강제로 시켜서 출판했다고 한다. 그는 천재적인 수학실력으로 정보가 채널을 통해 전달되는 과정을 수학으로 표현하고, 채널에 노이즈가 있다 하더라도 정보를 표현하는 방식을 달리하면(encoding/decoding) 정보의 의미를 잃지 않고 전달할 수 있음을 보였다. 사람이 소음이 많은 환경에서 대화할때 몇개 중요한 단어만 들어도 문장 전체의 의미를 잃지않고 전달할 수 있는것과 같은 맥락이다. 그의 발견은 단순히 전화나 인터넷과 같은 통신망의 개발에만 중요한 것이 아니다. 정보의 교환이 이루어지는 모든 분야, 즉 인지과학, 인공지능, 데이터압축, 암호학, 또한 Compact Disc등 미디어에 이르기까지 모든 산업과 학문분야에 걸쳐 정보이론은 중요한 토대가 되었다.

(다음 편에는 튜링, 노버트 와이너를 다룰 예정입니다 ^__^b)

– 박상민 http://twitter.com/#!/sm_park

[1] 소프트웨어, 하드웨어의 아버지
[2] Vannevar Bush (위키 아티클)
[3] Differential Analyzer (위키 아티클)
[4] Memex (위키 아티클)
[5] Claude Shannon (위키 아티클)
[6] A Symbolic Analysis of Relay and Switching Circuits (위키 아티클)
[7] Information Theory (위키 아티클)

소프트웨어, 하드웨어의 아버지

1. 들어가며
요즘 나는 블로그 댓글 보는 재미로 산다. 사람들의 칭찬 한마디 보는게 이제 8개월된 딸내미의 방긋대는 얼굴만큼 흐뭇하다. ‘이러다 너드들 사이에서 강풀 (만화가)되는거 아냐?, 우훗’, 상상도 해보다가 이내 짧은 글심이 떠올라 좋은 주제나 찾아야지 생각하게 된다. 이번에 풀고 싶은 주제 역시 지난번처럼 신문기사를 읽다가 떠올랐다. 안철수님의 “하드웨어 대응 만으로는 승산없다” 라는 기사의 한 부분에 이런 언급이 나온다:

“얼마 전 하드웨어·소프트웨어·인터넷 서비스 등으로 분류해 IT업계 트렌드를 설명했더니 대기업 전자회사 최고기술책임자(CTO) 한 분이 소프트웨어는 하드웨어를 구동시키는 하나의 부분이므로 분류가 잘못됐다고 지적하더라.”

“소프트웨어가 하드웨어를 구동 시키는 하나의 부분”이다. 왠지 울컥하다. 그래, 하드웨어로 성공한 우리나라에서 소프트웨어의 역할은 그게 맞다. 빠른 CPU, 넓은 메모리에 광활하고 밝은 디스플레이, 미려한 외관으로 장식된 하드웨어를 소프트웨어는 “구동” 시키고 있다. “구동”이 주는 어감….그렇지, 소프트웨어는 뛰어난 하드웨어가 돋보이도록 낮은곳에 숨어 봉사하고 있다.  SW에 큰 관심없는 일반인들에겐, 형체없는 소프트웨어를 설명하는데 이것보다 더 좋은 표현이 있을까?. 얼마전 SW벤쳐에서 일하는 내게 아버지가 “너희 회사 공장은 어디있냐?” 하신적도 있다 (공장은 마음속에 있어요 아버지). 아마도 “하드웨어 나고, 소프트웨어가 나오는 거다” 라는게 상식처럼 되어버린 세상인데, 근데, SW로 온가족이 먹고 살아서 그런가, 왜 나는 이 기사에 울컥하고, 뜨거운 것이 솟아오르는 건가?…그렇게 고민하며 주말을 보냈다.

나는 이 에세이에서 그 반대의 이야기를 하고싶다.  “소프트웨어가 하드웨어의 애비다” 라고 외쳐본다. 여기에서 나는 소프트웨어-본질-의 역사와 하드웨어-우연-의 역사에 대해서 소개하고, 역사가 우리 프로그래머들에게 던지는 의미에 대해 쓴다. 이 글의 큰 줄거리는 지난 블로그에서도 소개했던 [1] 에서 영감을 얻었다. 그리고 좀 더 깊게 들어가는 증명은 컴퓨터 이론 텍스트북 [2,3] 에서 찾을 수 있다 (뭐, 증명이라고? — 그렇다. 심하게 재미 없을수도 있다).

2. 라이프니치의 꿈
계산과 논리는 인류가 기록물을 남긴 시절 이전부터 존재했을거다. 1+1=2 라는 사칙연산말고도, 일련의 논리적 절차를 거쳐서 결과를 보이는 계산 — 즉 알고리즘– 에 대한 인류의 자각은 아주 먼 옛날(bc)의 기록에서도 찾을 수 있다 [4]. 비 전공자에게 알고리즘은 좀 낯설수 있으니 예를 들면서 시작하자.

문제: 주어진 임의의 숫자 나열 중 가장 큰 숫자를 찾아라

1) 제일 큰 숫자를 저장할 공간을 a 라고 부른다.
2) 제일 처음 숫자를 a에 집어 넣는다.
3) 모든 수에 대해서 a와 비교해, a보다 더 큰 숫자가 나오면 a에 집어 넣는다.
4) a를 출력한다.

엄청 간단하다. 한단계 이상의 논리적 절차를 걸쳐서 결론을 냈으니 아무튼 알고리즘이다. 조금 더 복잡한 알고리즘을 소개하자면 binary search같은것이 있겠다.

문제: 순차적으로 정렬된 숫자들 가운데서 숫자 K를 찾아라

1) K와 중앙에 위치한 수를 비교한다.
2) 비교한 결과 같을 경우, 찾았음을 알리고 종료한다.
3) K가 작을 경우엔, 처음부터 중앙 바로 전까지의 숫자를 가지고 1)을 반복한다.
4) K가 클 경우엔, 중앙 다음부터 마지막까지 숫자를 가지고 1)을 반복한다.

이같은 알고리즘의 기록은 bc.300 년전 이상으로 올라간다 [4]. 일련의 논리적 절차를 거치는 계산이 알고리즘인것은 알았지만, 17세기까지 아직 절차를 어떻게 표현할 것인가는 인식하지 못했다. 현대의 프로그래밍 언어가 바로 그런 역할을 한다.

그런데 역사상 최고의 수학자중 한명인 독일의 라이프니츠(1646-1716)는 그 옛날 이런 발칙한 상상을 시작한다.

“계산과정(알고리즘)을 몇가지 글자로 표현할 수 있다면, 그럼 어쩌면 세상 모든 알고리즘에 항상 답을 주는 마법과 같은 기계(machine)를 만들수 있지 않을까?”

다시 말해서, 알고리즘을 정해진 언어로 표현해 낼 수 있다면, 그럼 우리는 그 언어로 써내려간 스토리를 마법의 공식에 집어 넣을 수 있지 않을까? 그리고 그 공식은 즉각 답을 내어준다니, 라이프니츠의 상상은 진정 대인배다웠다. 프로그래머라면 금방 알것인데, 라이프니츠의 상상은 우리가 매일 하는 그짓이다. 프로그래밍 언어로 알고리즘을 써내려가고, 이를 컴퓨터에게 주면, 컴퓨터는 항상 답을 준다. 그런데, 그가 발칙한 이유는  이 단어, “항상 (Always)”, 에 있다. 정말 모든 질문에 컴퓨터는 정답을 이야기 하나? 이 질문이 주는 깊이는 대단해서, 참으로 증명되면 적절한 데이터를 주었을때 “신이 존재하는가?” 의 질문에도 답을 할수 있다는 뜻이다. 이에 감명받은 어떤 신학자는 수학 공식으로 신의 존재를 증명하려는 잉여행동까지 감행한다.

이를 라이프니츠의 Dream Machine 이라고 부른다. 그가 상상한 마법의 기계(Machine)는 물리적 기계(하드웨어)가 아닌 무형의 “공식” 혹은 “알고리즘” 이다. 그당시 상상으로는 이 마법 레서피가 적힌 책을 들고 있는 사람에게 알고 싶은 질문을 (프로그램 언어로)써서 주면 그 사람이 마법 레서피로 주어진 문제를 계산해 결과를 가르쳐주는 것이다. 컴퓨터는 컴퓨터인데, 사람이 계산하는 컴퓨터라니, 엄청 느렸을 거고 담당자의 기분 따라서 결과가 달라졌겠지?

어쨌든, 라이프니츠는 인류가 “Let us calculate!” 이렇게 외치는 순간이 곧 올 것이라 믿었다. 라이프니츠 이후, 불(Boole), 프뤠게(Frege), 칸토(Cantor), 힐버트(Hilbert)로 이어지는 논리학, 수학의 거장들이 하나 하나 문제 해결을 위한 단초를 제공하게 된다. 그들은 이 문제에 대해, “Yes: 그래 그런 마법의 공식은 존재해!”, 혹은 “No: 그런 마법 공식은 존재할 수 없어!”, 이 둘 중 한가지를 증명해내기 위해 평생을 잉여짓으로 보낸다. 그리고 20세기에 와서야 우리는 결론에 도달했다.

3. 튜링의 잉여짓
수백년을 이어온 이 질문은 영국의 젊은 천재 수학자 튜링 (Alan Turing, 1912-1954)[6]에게도 최고의 도전거리였다. 하지만 안타깝게도 그 보다 앞서 이  질문에 답을 한 또 하나의 천재 수학자가 있었으니 그가 바로 오스트리아 출신 괴델 (Kurt Godel)[7]이다. 괴델은 25세 되던 1931년 Incompleteness Theorem 을 발표하고, 라이프니츠의 꿈 – Dream Machine – 은 존재할 수 없음을 증명했다. 즉 세상엔 답을 할 수 없는 어떤 문제 (질문)가 존재하는 것이다. 어쩌면 당연하다. 어떻게,”엄마 좋아, 아빠 좋아?” 혹은 “짜장이 갑이냐, 짬뽕이 갑이냐?”  이런 질문들에 답을 할 수 있겠는가?

괴델의 완벽한 증명에도 불구하고 튜링은 왠 똥고집이었는지, 자신만의 사고로  Dream Machine이 존재할 수 없음을 증명하기 시작했다. 잉여짓의 좋은 예다. 그 결과가 컴퓨터 학과 학생들의 헬게이트를 열어버린 튜링 머신이다. 여기서 나도 뭔 똥배짱인지는 모르지만, 튜링의 증명을 소개한다. 그동안 두편의 블로그로 쌓아온 “이해하기 쉽게 쓰는 블로거”의 이미지를 한방에 날려버릴 절호의 찬스다! 굳이 이런 짓을 하는 이유는, 이 증명안에 설명하긴 참 어렵지만, 심오한 진리가 있기 때문이다.

컴퓨터 프로그램은 가장 단순히 표현하면 위의 그림과 같은 일을 한다. 즉 프로그램 P는 주어진 인풋 데이터를 가지고, 질문이 참인지 거짓인지를 대답한다. 바로 이때, “어 근데 어떤 질문들은 참/거짓 말고 다른 대답을 하잖소?” 라고 물을 것이다. 예를 들어, 아까 설명한 최대값 찾는 알고리즘은 결과값이 숫자여야 한다. 하지만 그런 질문들은 쉽게 참/거짓으로 변환이 가능하다. 즉, 나열된 숫자에 대해서 “1보다 더큰 수 있냐?”, “2보다 더큰 수 있냐?” 이런 식으로, “아니오” 가 나올때까지 질문하는 것이다. 이것이 라이프니츠 전까지 존재했던 모든 알고리즘 혹은 논리적 사고의 가장 단순한 형태다.

우리들의 아버지 튜링은, Input, P, 와 T/F 결과값으로 이루어지는 이 단순한 형식을 신비하게 변형시킨다. 아래의 그림은 그의 Halting 프로그램을 표현 한 것이다.

이 프로그램은 특이하게 인풋으로 프로그램(P)과 데이터(I)를 모두 받는다. 그리고 내부에서 하는 일은 받은 P를 데이터 I를 넣어 돌리는것이다 (너드 언어로 에뮬레이션 한다). 그리고 나온 결과 값이 참일 경우, 거짓을 출력하고, 반대로 거짓일 경우 참을 출력한다. 그럼 이런 프로그램을 진짜 만들 수 있냐? 라는 질문이 나오는데, 조금만 생각해 보면 그리 어렵지 않다. 잠시 “너드” 모드로 들어가서 설명하자면:
– H라는 프로그램과 P라는 프로그램 모두 C 언어로 짠다.
– H는 내부에서 gcc 를 콜해서 P를 컴파일 한다. P의 바이너리가 나온다.
– Fork하고 execute해서  P를 돌린다. 데이터는 I를 넣어준다.
– 나오는 결과값 검사해서 반대를 출력한다.

여기까지 읽고 계신분들께 존경을 표한다. 갈길이 그리 멀지 않다. 여기서 한가지 이상한 짓을 해보자. 아래와 같이 H 프로그램의 인풋으로 H 프로그램 소스코드를 두번 넣는 것이다.

이 경우 H프로그램이 하는 일은 무엇일까? 다름 아니고 H프로그램 자신의 소스코드를 컴파일하고, 돌려서 결과를 반대로 출력하는 것이다. 그럼 위의 경우에 H 프로그램의 결과값은 무엇이 될수 있을까?

참: H가 참이 되려면 안에서 돌아간 H가 거짓이어야 한다…어?
거짓: H가 거짓이려면 안에서 돌아간 H가 참이어야 한다…어?

말이 안된다. H는 어떤 결과도 낼 수 없다. 다시 말해  H라는 프로그램은 존재 할 수가 없는 것이다.  바로 이것이 튜링이 라이프니츠의 Dream Machine을 반증하기 위해 만들어낸 존재할 수 없는 알고리즘 (Undecidable problem) 인 것이다.

4. 폰뉴먼과 우연한 하드웨어
과학에 2등은 없다. 튜링은 괴델보다 늦게 증명을 했으니 그는 루저였다. 그러나 튜링은 괴델과 함께 타임지의 20세기 100대 인물에 올라가 있고, 컴퓨터의 아버지라 불리고 있다. 매년 주어지는 컴퓨터의 노벨상을 튜링 어워드라 부른다. 튜링의 놀라운 업적은 증명과정에서 보여준 H라는 프로그램에 있다. 튜링 전에도 원시 형태의 컴퓨터들이 있었는데, 이것들은 기계나 전기를 활용하여 단 한종류의 알고리즘만을 구현하는 것이었다. 이를테면 아래의 사진은 튜링보다 100년이나 앞서 시도됐던 Charles Babbage의 초대형 미분방적 계산기 부속품이다. 오로지 미분방적식만 풀 수 있는 거대한 기계다.

그런데 튜링의 증명과정에서 보여준 H 프로그램은 그 내부에서 임의의 프로그램 P를 수행할 수 있다. 그는 어떤 형태의 프로그램 P든 간에 돌리고 결과값을 산출할 수 있는 H 프로그램을 어떻게 만들어 내는지를, 읽고 쓰기가 자유로운 테이프를 활용해서 보여주었고, 이를 우리는 Universal 튜링 머신이라 부른다. 어떠한 종류의 프로그램 (SW)이든 받아서 돌리고, 결과를 보여주는 어떤것, 왠지 컴퓨터의 냄새가 솔솔 나지 않는가?

이 아이디어를 처음 하드웨어로 구현한 사람은 바로 폰 뉴먼 (John Von Neumann) [8]이다. 폰 뉴먼은 20세기 최고의 천재로 불렸고, 별의 별 분야(사실 잘 모르니 이렇게 표현할 수 밖에)에 업적을 남긴 수학자였다. 그는 1945년, 튜링이 생각해낸 방식을 좀 더 구체화시켜서, 프로그램이 메모리에 저장되는 컴퓨터 EDVAC [5]의 컴퓨터 구조를 고안했다(너드언어로, 프로그램 카운터, 논리연산, 레지스터, 연산과 데이터 메모리 통합 고 따위것들이다). 그가 써내려간 구조를 하드웨어 천재들 ( John Mauchly and J. Presper Eckert)이 구현해 내는데, 이것 저것 잡다한 아날로그 전기부품을 다 써보다가, 우연히 TV등에 널리쓰인 진공관을 활용해 이런 괴물 컴퓨터를 만들어 내기에 이른다.

여담으로, 폰뉴먼은 낚아채기의 달인이다. 폰뉴먼은 튜링의 논문에서 아이디어를 얻었으면서도 자기 저서들에서 이를 언급하지 않았다. 또 함께 일했던 하드웨어 달인들의 영향을 무시하고 무명의 용사들로 만들어 버린 결과, 훗날 그들과 특허 전쟁을 치룬다. 괴델과 튜링 모두 타임지의 20세기 100인에 선정되었지만, 폰뉴먼은 대단한 업적에도 불구하고 선정되지 못했다. 어쨌든, 폰뉴먼의 구조는 70년이 지난 지금도 여전히 유효해서, PC, 타블렛, 스마트폰 모두 여전히 폰뉴먼 구조라 부른다. 다 알다시피, 이후 6-70년대 실리콘과 마이크로프로세서의 혁명으로, 컴퓨터는 인류에게 본격적으로 침투했다.

5. 결론
여기까지 써놓으니 읽는분들께 왠지 미안하다. “이따위 길고 지루한 역사 이야기만 하다니, 대 실망이다!” , 이런 원망이 들리는듯 하다. 내 얕아빠진 지식을 길게, 가까스로 풀어놓은 이유는…

“소프트웨어는 하드웨어를 구동시키는 하나의 부분 ”

나는 이 말이 진정 듣기 싫기 때문이다.

bc 300년전에도 존재한 유클리드의 알고리즘, 라이프니츠가 상상한 모든 질문에 대답해 주는 Dream Machine, 그리고 컴퓨터의 표본인 튜링의 Universal Machine 까지, 그 어떤 것도 하드웨어가 아니었다. 인간의 두뼘남짓 뇌에서 피어난 논리의 결과물, “지식(Knowledge)이란 무엇인가?” 이 질문에 인생을 걸었던 철학/과학자들의 피와 땀이 만들어 낸 결과물은 바로 소프트웨어다.  (참고로 철학박사인 친한 형과 비슷한 대화를 나눈적이 있다. 그 형은 위에 언급된 모든 사람들을 알고 있었다.)

위 카툰처럼 우리의 소프트웨어와 프로그래머들이 받고 있는 대접이 너무 씁쓸하다. 소프트웨어는 우연의 산물 하드웨어를 보조해주는 또 다른 우연이 아니라, 태초부터 인간의 인간다움속에 내재돼있던 고귀한 창조물이다. 학부 1학년이 과제로 짜는 100줄의 코드도, 수백명 엔지니어가 함께 짜는 안드로이드의 100만줄 코드도 모두 동일하다. 주어지는 문제는 다르지만, 우리의 이 작은 뇌로 고도의 생각을 집중하고, 논리의 다리를 쌓아나가 목표에 다다른다. 우연한 하드웨어 (x86, 메모리 크기, 디스크의 속도)와 환경 (데드라인, 돈, 사회적 시선)의 제한에 둘려쌓여 있지만, 우리는 그 한계들마저 소프트웨어로 계산하고, 하나 하나 해결해 나가는 그 즐거움에 취해 산다.

“소프트웨어는 하드웨어를 구동시키는 하나의 부분 “

천하에 불효자들이나 지껄일 수 있는 소리일 뿐이다.

– 박상민 http://twitter.com/#!/sm_park

[1] The Universal Computer: The Road from Leibniz to Turing by Martin Davis
[2] Introduction to Automata Theory, Languages, and Computation, by John E. Hopcroft, et al.
[3] Introduction to the Theory of Computation, by Michael Sipser
[4] Euclidean Algorithm: http://en.wikipedia.org/wiki/Euclidean_algorithm
[5] EDVAC: http://en.wikipedia.org/wiki/EDVAC
[6] People of the century: Alan Turing (http://www.time.com/time/magazine/article/0,9171,990624,00.html)
[7] People of the century: Kurt Godel (http://www.time.com/time/magazine/article/0,9171,990621,00.html )
[8] John Von Neumann: http://en.wikipedia.org/wiki/John_von_Neumann