튜링상 관련 업적

범용 운영체제 이론을 개발했다. 보다 구체적으로는 유닉스 운영체제를 구현했다.

1983년 튜링상 선정 이유​7​

운영체제는 컴퓨터 하드웨어를 효율적으로 관리하면서 동시에 응용 프로그램이 컴퓨터 하드웨어를 효과적으로 사용하도록 도와주는 일을 한다.

운영체제는 컴퓨터 하드웨어, 소프트웨어 자원 등을 관리하고 컴퓨터 프로그램에 공통의 서비스를 제공하는, 시스템 소프트웨어이다.​8​

일상생활에서 접하는 대부분의 컴퓨터들은 운영체제를 가지고 있다. 대표적인 것이 마이크로소프트 윈도우, 애플 맥OS, 안드로이드, iOS, 리눅스 등을 들 수 있다. 그런데 놀라운 것은 이 모든 것들의 뿌리가 유닉스라는 점이다.

유닉스가 없었다면 어떻게 되었을까? 우리의 삶은 한참 뒤처져 있었을까? 아직도 종이 지도를 보며 길을 찾고, 검은색 유선 전화기를 사용하고 있었을까? 꼭 그렇지는 않았을 듯싶다. 아마도 같은 역할을 하는 다른 이름의 운영체제가 등장했을 가능성이 높다. 유닉스에 들어 있는 각종 기술들은 어떤 식으로든 현실화되었을 것이다.

대표적으로 두 가지 대안이 당시에 이미 존재했다. 톰슨이 캘리포니아 대학교 버클리를 다니던 시절에 그는 지니Genie라는 시분할 운영체제 개발에 잠시 발을 담근 적이 있었다. 지니 프로젝트를 이끌었던 버틀러 램슨​§​, 척 태커​¶​ 등은 후에 제록스 PARC에서 알토Alto라는 개인용 컴퓨터를 개발하게 된다.​9​

또한, 인터넷이 탄생했던 BBN에서는 TENEX라는 시분할 운영체제를 개발했다.​10​ BBN에서 시분할 운영체제 개발을 시작한 사람이, 다름 아닌 시분할 운영체제 개발을 최초로 주창했던 존 매카시였으므로 사실 TENEX가 유닉스보다 더 큰 영향력을 발휘했을 수도 있었다.

하지만 지니는 SDS 940 컴퓨터에서 작동했고, TENEX는 PDP-10 컴퓨터에서 작동했는데, PDP-11 보다 인기가 없는 시스템들이었다. 톰슨은 튜링상 수상 강연에서, 만약 BBN에서 PDP-10이 아니라 PDP-11을 사용했다면 TENEX 개발자였던 대니얼 밥로우Daniel Bobrow가 튜링상을 탔을 거라고 언급하기도 했다. 그래서 그랬는지 톰슨은 자신의 성공을 우연으로 돌리기도 했다.

우연한 발견 말고 진정한 규칙이라는 게 있을지 잘 모르겠습니다. 살다 보면 다른 사람들이 미처 알아채기 전에 어떤 기능이 필요하다는 것을 우연히 알게 될 때가 있죠. 여러분이 뭔가를 생각했을 때 그것을 생각하게 된 건 그저 운일 뿐입니다. 여러분께 드릴 수 있는 나의 충고는 그냥 운이 좋으시라는 겁니다.​11​

유닉스

역사

벨 연구소에 입사하자마자 멀틱스 프로젝트에서 일했던 톰슨은 벨 연구소가 멀틱스 프로젝트에서 발을 빼자 갑자기 할 일이 없어졌다.

그때 나는 거의 일자리를 잃은 것이나 마찬가지였습니다… 진짜배기 일이 주어지지 않아서 그때부터 그냥 내가 하고 싶은 일을 했습니다… 게임이나 운영체제, 그냥 내 머리에 떠오르는 일은 아무거나 했습니다. 천문학 관련 일도 좀 했고, 오디오 관련 일도 했고… 정말로 내가 하고 싶은 것을 했습니다.​6​

그러던 중, 그때까지 사용하던 IBM 7090 컴퓨터가 7094 컴퓨터로 교체되기 위해 치워지면서 잠시 사용할 컴퓨터가 없어지는 상황이 발생했다. 그래서 스탠퍼드 대학교의 양해를 얻어 밤 시간에 스탠퍼드 대학교 컴퓨터 센터를 사용하게 되었는데 그곳에서 톰슨은 PDP-1 컴퓨터를 발견했고, ‘우주전쟁Spacewar!‘이라는 게임을 신나게 즐겼다. 벨 연구소의 어느 구석에 처박혀 있는 PDP-7 컴퓨터를 발견했을 때 톰슨과 리치는 우주전쟁 게임을 PDP-7 컴퓨터에서 즐겨야겠다는 생각을 하게 된다.

우주전쟁 게임은 1962년에 MIT에서 스티브 러셀Steve Russell이 주도하여 만든 비디오 게임이다.​12​ 이 게임은 PDP-1 컴퓨터에서 구현되었는데 이것이 가능했던 이유는 PDP-1의 모니터가 특별했기 때문이다. 이 모니터는 벡터vector 디스플레이였다. 어느 점에서부터 어느 점까지 선을 그리라는 식의 명령어를 사용했다. PDP-7 컴퓨터도 같은 모니터를 사용했다. 벨 연구소에서는 회로 설계를 위해 PDP-7 컴퓨터를 사용했다.

톰슨은 우주전쟁 게임에서 그치지 않고 이런저런 프로그램을 만들었다. 그러다가 태양계를 시뮬레이션하는 프로그램을 만들었는데 이것이 ‘스페이스 트레블Space travel‘ 게임으로 이어졌다. 이때가 1969년이다.

원래 톰슨은 태양계 시뮬레이션 프로그램의 첫 버전을 멀틱스 용으로 만들었다가 GE가 만든 운영체제였던 GECOS 위에서 포트란 언어로 다시 구현했다.​13​ 그런데 GE의 컴퓨터는 디스플레이가 너무 구렸고 시간당 75불을 내야 했다. 공짜로 고품질의 화면에서 비디오 게임을 하고 싶다는 욕망이 결국 그와 리치를 PDP-7 컴퓨터로 인도했다고 보아도 좋을 듯싶다.

하지만 기존의 프로그램을 다른 시스템으로 이식하는 일은 녹록지 않았다. 포트란으로 작성된 소스 코드는 그냥 버렸고 바닥부터 다시 어셈블리어로 작성해야 했다. 부동소수점 계산 라이브러리를 만들어야 했고 화면에 나타날 글자를 디자인했고, 디버깅을 위한 시스템도 개발해야 했다. PDP-7 자체는 개발 환경을 제공하지 않았으므로, GECOS에서 크로스 어셈블러로 생성된 바이너리 코드를 펀치 테이프에 기록한 후, 이를 PDP-7에서 읽는 방식으로 개발이 진행되었다.

‘스페이스 트레블’ 게임을 PDP-7 컴퓨터로 이식하는 과정은, 유닉스 개발을 위한 좋은 준비 작업의 역할을 했다.


멀틱스 프로젝트가 여러 문제로 와해되기는 했지만, 멀틱스 운영체제에서 맛 본 기능들은 그냥 포기하기에 너무 매력적이었다.​13​ 그래서 어느 순간 톰슨이 깃발을 들고 리치와 캐너데이Rudd Canaday가 그 밑에 모여, 작은 발걸음을 내딛게 된다.

그가 대장 역할을 자처하더니 페이징paging 시스템을 고민하기 시작했습니다. 실제로 그는 페이징을 시뮬레이션하는 프로그램을 작성했습니다. 그러고 나서 나와 러드가 합류하여 시스템의 구조를 칠판에 그려가기 시작했죠.​5​

1969년에 이들이 칠판에 그렸던 것은 파일 시스템의 구조였다. 그리고 이것은 유닉스의 핵심이 되었다.

써먹지도 못할 파일 시스템은 죽어 있는 시스템이나 마찬가지이다. 그래서 톰슨은 파일 시스템에 생명을 불어넣기 위해 다른 기능들을 추가했다. 대표적인 것이 프로세스process 이다. 그리고 사용자가 쓸 수 있는 몇 개의 유틸리티, 그러니까 파일 복사, 파일 삭제, 파일 편집 같은 것들과, 단순한 명령어 해석기(셸)​#​가 만들어졌다. 1970년이 되어서야 제대로 돌아가기 시작했다. 아무튼 오늘날 우리가 아는 유닉스는 그렇게 태어났다.​13​


PDP-7 컴퓨터에 구현된 최초의 유닉스는 현재와 차이가 있다. 대표적인 것이 파일의 경로 이름인데 루트(/)에서 시작하는 경로는 사용하지 못했고, 항상 현재 디렉토리를 기준으로 한 상대적 경로를 사용했다. 아울러, 디렉토리와 특수 파일들은 모두 디스크가 재초기화recreate 될 때에만 생성될 수 있었다.

1970년에 들어서자 유닉스 개발자들은 컴퓨터 시스템에 대해 걱정하기 시작했다. PDP-7 컴퓨터는 자신들의 소유가 아니었고 구조적으로도 부족한 점이 있었다. 그래서 PDP-11 컴퓨터를 확보하기 위해 노력했지만 번번히 퇴짜를 맞았다. 그러다가 다행히 다른 부서의 예산 지원을 받아 여름에 PDP-11 컴퓨터를 손에 넣게 된다.

1971년에 처음으로 일반 사용자를 확보했다. 벨 연구소 내의 특허 부서에서 일하는 타이피스트들이 유닉스 시스템을 이용하기 시작했다. 당시 특허 부서는 문서 편집을 위해서 AstroText라는 제품을 구매할 계획이었다. 특허 문서는 일반 문서와는 구별되는 독특한 양식을 가지고 있어서 전문 편집 도구가 필요했다. 톰슨 팀은 특허 부서의 요구사항을 만족시켜 주는 편집 패키지를 개발해 주었다.​3​ 특허 부서는 이 패키지에 만족했고, AstroText 구매 예산을 톰슨 팀에게 제공해 주었다. 톰슨은 그 돈으로 PDP-11/45 컴퓨터를 구매했다. PDP-11/45 컴퓨터는 제대로 된 메모리 관리 기능을 제공했고 유닉스는 한 단계 더 진화했다. 이 컴퓨터의 메모리 용량은 144KB였는데 유닉스는 42KB를 차지했다.​14​


1972년에는 파이프pipe가 구현되었고 1973년에는 시스템의 커널을 C 언어로 완전히 재작성했다. C 언어로 작성된 커널은 훨씬 이해하기 쉬웠고 더 복잡한 기능을 구현하기 용이해졌다. 이 시기에 멀티프로그래밍multi-programming 환경이 구현되었다. 즉, 한 대의 기계를 여러 명이 동시에 사용할 수 있게 된 것이다.​13​

C 언어로 커널을 재작성하는 작업은 한 번에 성공하지 못했습니다. 6개월 사이에 두 번이나 엎어졌죠. 그 이유 중 하나는 C 언어 자체에도 문제가 있었기 때문이었습니다. 세 번째에 마침내 성공을 거두었고 이렇게 만들어진 유닉스를 버전 5라고 불렀습니다. 그리고 대학교에 소스 코드를 제공하기 시작했는데 이것을 버전 6이라고 불렀습니다. 이 시기에 ARPA는 유닉스를 ARPAnet의 표준 운영체제로 채택했습니다. ARPA는 캘리포니아 대학교 버클리에게 유닉스 관리와 배포를 맡겼고 버클리는 TCP/IP 스택과 VAX 컴퓨터용 가상 메모리 기능을 추가했습니다.​11​

유닉스Unix라는 이름을 붙인 이는 브라이언 커니핸이다. C 언어의 공동 개발자이기도 한 그는 멀틱스Multics에 빗대어 약간의 말장난식으로 이런 이름을 고안했다.​13​


유닉스의 성공 요인에 대해 톰슨은 이렇게 말했다.

DEC은 정말로 한참 지나서야 소프트웨어를 내놨고 그것조차도 정말 끔찍했습니다… 유닉스가 성공하게 된, 초창기의 이유라면 경쟁 제품이 전혀 없었기 때문이 아닐까 합니다.​3​

유닉스의 아이디어 중 가장 좋았던 것은 깔끔하고 단순한 인터페이스라고 생각합니다. 열기, 닫기, 읽기, 쓰기. 이게 전부였습니다.​11​

1 2 3 4 5 6 7