지금 이렇게 노트북을 이용해서 블로그에 글을 올릴 수 있는 것도, 스마트폰으로 카톡을 할 수 있는 것도 기반에는 운영체제가 있기 때문에 가능한 것입니다.

우리가 대부분 컴퓨터에서 주로 사용하고 있는 윈도우 운영체제는 1985년에 갓 개발되었습니다.

그렇다면 운영체제의 아버지라 불리는 유닉스는 어떨까요, 무려 1969년입니다.  

유닉스가 낯설다면 공개 운영체제인 리눅스는요? 안드로이드는 잘 아시지 않나요?

다 유닉스로부터 파생된 운영체제입니다. 

 

제가 이번에 읽은 책은 유닉스를 개발한 벨 연구소에 재직했던 저자 '브라이언 커니핸'이 직접 보고 듣고 겪었던 벨 연구소의 연구원들, 유닉스를 비롯하여 세상을 바꿀 컴퓨터 기술들과 이를 개발한 천재들의 이야기를 생생하게 풀어낸 책입니다.

 

책의 목차는 다음과 같습니다.

1장. 벨연구소

   - 벨 연구소의 자연과학 연구

   - 통신 기술과 컴퓨터 과학

   - 벨 연구소로 향하다

   - 사무실의 이웃들

   - 137->127->1127->11276

 

2장. 유닉스 프로토타입(1969)

   - 약간의 기술적 배경

   - CTS와 멀틱스

   - 유닉스의 기원

   - 이름의 유래

   - 인물 탐방 : 켄 톰프슨

 

3장. 유닉스 제1판(1971)

   - 특허출원서 생성용 유닉스

   - 유닉스 방

   - 유닉스 프로그래머 매뉴얼

   - 메모리에 대한 몇 가지 이야기

   - 인물 탐방 : 데니스 리치

 

4장. 유닉스 제6판(1975)

   - 파일 시스템

   - 시스템 호출

   - 셸

   - 파이프

   - grep

   - 정규 표현식

   - C 프로그래밍 언어

   - 소프트웨어 도구와 랫포

   - 인물 탐방 : 더글라스 매클로이

 

5장. 유닉스 제7판(1976~1979)

   - 본 셸

   - Yacc, Lex, Make

   - 문서 생성

   - Sed와 Awk

   - 다른 언어들

   - 다른 기여들

 

6장. 연구소를 넘어서

   - 프로그래머 워크벤치

   - 대학교용 라이선스

   - 사용자 그룹과 유즈닉스

   - 존 라이언스의 해설서

   - 이식성

 

7장. 사업화

   - 기업 분할

   - USL과 SVR4

   - UNIX

   - 홍보 활동

 

8장. 후손

   - BSD

   - 유닉스

   - 미닉스와 리눅스

   - 플랜 9

   - 해산

 

9장. 유산

   - 기술 측면

   - 조직 측면

   - 인정과 평가

   - 역사는 반복될 수 있을까?

 

1장 '벨연구소'는 책의 지은이인 브라이언 커니헨이 실제 30년간 벨 연구소에 재직하면서 연구소의 환경과 연구 문화, 구성원들에 대하여 길지 않게 언급하고 있습니다. 기본적으로 벨 연구소는 박사과정을 밟은 사람들이 연구원이고, 각 연구원들별로 다양한 관심분야를 전문적으로 연구를 하기 때문에 다양한 분야에서의 성과를 낼 수 있었다고 합니다.

 

2장은 '유닉스 프로토타입'에 대해서 다루고 있습니다.

1960년대까지만 해도 당시에 운영체제가 각 컴퓨터 제조업체별로 특정 종류의 하드웨어에 종속되는 어셈블리어로 작성되었기 때문에, 시스템들간 공통성이 부족하고 하나의 운영체제 위에 작성된 프로그램을 다른 운영체제, 아키텍처(다른 컴퓨터)에서도 작동을 시키려면 아예 처음부터 다시 작성해야 하는 일도 부지기수였다고 한합니다.

즉, 이식성이 굉장히 떨어졌다고 합니다.

대신, 유닉스는 모든 종류의 하드웨어를 커버하는 동일한 운영체제를 제공하고, 고수준 언어로 재작성되어 프로그램 이식성이 좋은 운영체제입니다.

 

유닉스가 탄생하기 전 운영체제의 발전에 대해서도 책에서는 어렵지 않게 설명하고 있습니다. 

1960년대 이전 천공카드를 이용한 '일괄처리'에서, 1960년대 초 MIT에서 만든 전화선으로 연결하여 타자기처럼 생긴 장치에 탑재되는 '시분할처리' CTSS로 발전하여 사용자 전환이 빠르고 다른 사용자들이 있더라도 컴퓨터를 전용으로 사용하고 있는듯한 쾌적함과 높은 생산성이 있었습니다. 1964년~1969년에 이를 발전시켜 MIT 연구자들(벨 연구소 연구원들도 포함)이 '멀틱스(Multics)' 운영체제를 만들었는데, 멀틱스는 어셈블리어 수준으로 쓰여진 다른 운영체제와는 다르게 고수준 언어인 PL/I로 작성하고자 한 운영체제였습니다. 그러나, CTSS에서 발생한 많은 이슈들을 해결하려다 보니 멀틱스는 너무 복잡하고 비싼 운영체제가 되었습니다. 이 멀틱스의 복잡성에 대한 반작용으로 유닉스라는 작고 효율적인 운영체제가 탄생할 수 있었다고 책에서는 설명하고 있습니다.

 

유닉스는 켄 톰프슨이 1969년, DEC 회사에서 제작한 PDP-7 컴퓨터기종의 디스크 드라이브의 처리율을 극대화하기 위한 '디스크 스케줄링 알고리즘'을 개발하면서 알고리즘을 시험할만한 대량의 데이터를 넣을 프로그램, 즉, 처리율 등을 시험하기 위한 파일시스템을 만들다가 '코드작성 편집기', '어셈블러', '커널 오버레이' 등등을 개발하다보니 유닉스 시스템의 첫 번째 버전(당시는 PDP-7의 운영체제)을 만들어 냈다고 합니다.

 

'유닉스' 라는 이름은 멀틱스의 Multi(많은 기능 제공) 를 Uni(기껏해야 하나의 기능을 제공/처음에는 단일 사용자용 OS커널로 만듦)로 바꿔서 유닉스라고 불렀다, 라는 명명 버전과, 피터 노이만이 'UNiplexed Information and Computing Service' 의 약자로 'UNICS'라는 이름을 붙였다고 하는 버전도 있다고 합니다. Unix라고 바뀐 것은 AT&T 변호사들이 eunuchs(내시)와 발음이 유사한 Unics 를 좋아하지 않아 UNIX로 바꿨다는 소문이 있다고 합니다.

 

책에는 켄 톰프슨에 대한 인물 소개도 언급하였는데, 즐길줄 아는 천재는 정말 유쾌하고 어디서든 핵심 인력으로 세상을 바꾸는 데 기여한다는 것을 느끼게 되었습니다. 

 

지금은 고인이 된, 데니스 리치에 대해서도 언급하였는데, 데니스 리치는 멀틱스 개발 프로젝트에 참여한 경험을 바탕으로, 유닉스 운영체제 개발과 C 프로그래밍 언어를 개발한 컴퓨터 분야에 혁혁한 공을 세운 분입니다. 하드웨어 자원을 효율적으로 사용하는 C언어가 개발되어, 1973년 유닉스를 어셈블리어 형태에서 C언어 형태로 바꿔서 작성하여 이식성이 우수해졌습니다.

 

제 4장은 1975년, 유닉스 제6판에 대해 다루고 있으면서, 유닉스가 세상에 논문으로 공개되면서 기술된 특징에 대해서 쉽게 설명하였습니다.

유닉스 제1판은 1971년 PDP-11 기기에서의 특허출원서 생성용으로 개발이 되었다면, 이후 몇 년간은 6개월 정도 텀을 두고 새로운 버전이 나왔다가, 1975년 유닉스 제6판은 좀더 의미있는 버전이라고 소개하고 있습니다. 유닉스를 공개적으로 1973~74년 ACM 심포지엄에 논문으로 발표를 하였는데,

"유닉스는 DEC PDP-11/40과 11/40과 11/45 컴퓨터를 위한 범용적 다중사용자용 대화식 운영체제이다"

라고 소개하고, 유닉스의 특징들을 하나씩 소개하였습니다.

1) 파일을 계층적 디렉터리로 구조화 (cf. CTSS는 2단계 까지로 중첩 깊이 제한하는 파일시스템)

2) 운영체제가 제공하는 서비스를 이용할 수 있는 시스템 호출과, 주변 장치가 파일 시스템의 파일처럼 보이도록 처리한 부분 (장치 특성을 사용자가 몰라도 파일을 저장, 읽고 쓰기 가능)

3) 명령어 실행 및 사용자와 운영체제간 인터페이스 역할을 하는 셸 스크립트로 명령어 시퀀스 반복작업 자동화 가능

4) 프로그램을 서로 연결하는 파이프, grep(패턴검색) 등에 대한 아이디어

   (아이디어를 낸 더글러스 매클로이는 "프로그램을 정원용 호스처럼 서로 연결한다"고 표현)

 

지금은 당연하게 운영체제에서 기본으로 제공되는 기능으로 생각하는 모든 것들을 "최초"로 생각해내서 구현해낸다는 것. 그리고 실제 인식된 문제들을 이론에 대한 깊은 지식과, 이론을 효율적으로 적용하여 구현해내는 엔지니어링, 지속적으로 개선해내는 관심과 기술이 더해져 유닉스는 나날이 발전했다고 책에서는 설명합니다.

 

인물에 대해서는 유닉스의 숨은 공로자인 더글러스 매클로이를 다루고 있습니다. 메모리할당자인 MALLOC을 만들었고 그 외에 diff 등도 만들었습니다.  

 

제 5장 1976~79년에 나온 유닉스 제7판에 대해 다루고 있습니다. 유닉스 6판이 PDP-11용 운영체제였고, 7판이 되어서 비로소 이식성이 있는 운영체제가 되었습니다. 본 셸, 배시 셸, Yacc(-> pcc로 발전), Lex, Make (-> 프로그램의 조각들이 서로 어떻게 의존되는지 기술하는 명세 언어로 컴파일을 효율적으로 해줌), sed, awk 등이 개발되어 적용되었습니다.

 

또한, 보안과 하드웨어 분야에 대해서도 파일시스템 사용자 파일 접근제어 등의 기능에 대해서도 개발 배경을 소개하고 있습니다.

 

제 6장, 7장은 유닉스가 연구소를 넘어서 사업화되고, 8장에는 유닉스의 후손(유닉스에서 파생된)인 리눅스 등에 대해서 다루고, 마지막 9장에서는 유닉스가 남긴 유산과 의미에 대해서 다루고 있습니다.

 

유닉스의 개발 과정을 소설책을 읽듯이 스토리텔링 식으로 풀어놓은 것이 굉장히 인상적이었습니다. 단순히 운영체제를 이해하는 것 뿐만 아니라, 마치 개발 과정을 현장에서 옆에서 지켜보는 것처럼(이것은 아마 저자가 실제로 벨 연구소에서 직접 보고 체험한 일을 글로 옮긴 것이라 가능하겠지만) 생생하였습니다. 최초 유닉스 설치 사용자가 10명인 초기부터, 50명 이상, 그리고 전세계적으로 사용하는 범용의 인기 운영체제가 되기까지의 과정들과 기술적인 아이디어와 고민들이 그대로 녹아들어간 책이었습니다.

 

책은 이처럼 컴퓨터 전공자라면 영감을 많이 받을 수 있는, 컴퓨터를 좋아하고 컴퓨터를 발전시킨 사람들의 아이디어와 노력을 담았습니다.

 

그리고 벨 연구소는 많은 발명과 개발이 이루어졌고, 동시에 의미있고 세상에 영향력을 주는 책들도 많이 출간하였는데, 저자는 그 이유를 벨 연구소의 글쓰기에 대한 진지한 자세와 비평, 경영진의 지지, 개발한 문서 생성 프로그램과 글쓰기 효율의 상호발전으로 꼽았습니다. 한국의 많은 연구기관에서 벨 연구소를 벤치마킹했으면 하는 바람이 드는 좋은 연구 문화라고 생각합니다.

 

책을 읽으면서 새로운 것을 만들어 내는 일, 세상을 좋게 바꾸는 데 기여하는 일의 가치에 대해서도 다시금 생각하게 되었습니다. 컴퓨터를 전공하는 사람들이 이러한 가치를 느낄 수 있도록 필독서로 꼭 추천해주고 싶은 책이라고 감히 말하고 싶습니다.