모든 것은 쫄딱 망한 프로젝트에서 시작하였느니라

술과 함께 거나하게 취해 가는 MT의 밤이 깊어가고 있었다. 물론 새내기인 수진과 미지도 MT에 따라오는 것은 인지상정이라 할 수 있겠지만, 이럴 때는 특히 별로 쓸 데가 없는 소위 성실한 오빠라는 존재는 술 한잔 마음 놓고 마시지 못하게 하는 MT의 주요 방해 요소나 다름 없는 것이었다.

“이 기집애가 말이야. 또 마셔? 그만 좀 마셔!”

“오빠는 벌써 두 병이나 마시고는 왜 그래! 미지 너도 그만 마셔! 네 오빠한테 다 일러 버릴거다!”

특 히 수진에다가 덤으로 미지에게까지 꼬여드는 복학생 선배들의 공격을 막아내느라 술도 못 마시는 주제에 애인도 하나 없이 전산실에서만 심심한 인생을 보내던 오빠는 날 새는 줄 모를 뿐이다. 그렇게 누진이 처절하게 두 아가씨들을 말리고 있을때, 이 과에서 명실공히 전산실의 최강자이며 필자의 설정상 최강 캐릭터인 우리의 윤 조교, 윤익수가 나타난 것은 실로 운명과 같은 일이었다.

“아가씨들이랑 뭐 하냐?”

“익수 형.”

“그거, 피부에 안 좋아. 적당히 마시고 오빠랑 밤새 재미있는 이야기나 할까?”

“누가 오빠라는 겁니까! 얘네들에 비하면 익수 형은 아저씨도 상 아저씨라고요!”

“리누진.”

“…..네, 형님.”

자고로, 헤게모니를 누가 쥐느냐가 문제라고 했다. 익수와 누진의 관계에서는 당연히 출석부와 실습 성적표를 들고 있는 익수가 헤게모니를 쥐고 있는 것이다.

“2학기에 실습 성적이 두렵지 않은 모양이지……”

“시, 시정하겠습니다!”

그리하여, 술과 노래와 즐거움이 꽃피는 강촌의 밤은 깊어만가고…… 그 와중에도 컴퓨터만 없었지 전산실을 재현한듯한 살벌 삭막한 분위기는 민박집 한 구석에서 되살아나고 있었다.

“유닉스가 말이야, 어떻게 생겨났는지 혹시 아냐?”

그래도 술이 한 잔 들어갔다고 발음이 약간 꼬이는 익수를 놀리느라 누진은 짐짓 잘못 들은 척 대꾸했다.

“그거야 형의 부모님께서 실수로…… 으악!!!!!”

그 리고 선배를 놀리면 응징당하는 것도 인지상정이다. 어차피 누진은 신경도 쓰지 않았다는 듯이, 익수는 누진의 뒤통수를 한번 세게 후려갈기고는 미지와 수진을 바라보며 미소를 지었다. 그래도 오빠 덕에 뭔가 주워 들은 게 있는 수진이 더듬거리며 입을 열었다.

“저기, 벨 연구소에서.”

“그렇지. 그 벨 연구소라는 데가, 원래 뭐였는지 알아?”

“혹시 전화 만든 그레이엄 벨인가요?”

“딩동댕! 야, 누진아. 네 동생 똑똑하네.”

“오빠가 이모양이니 그러죠…..”

“그래, 내 타입이라 이거야.”

“……이야기나 계속하세요. 이상한 소리 말고.”

물 론 그 이야기를 다 들으면 좋겠으나, 술 취한 익수와 뒤통수를 얻어맞고 입이 댓발은 나온 누진이 벌이는 만담을 그대로 받아적어도 좋겠지만 그런 식으로 이번 원고를 때웠다가는 필자가 방법당할 수도 있는 관계로, 일단은 익수의 기나긴 설명을 기사용으로 풀어서 적도록 하겠다.

1960년대, 벨 연구소에서는 본래 멀틱스(Multics : Multiplexed Information and Computing Service)라 불리던 운영체제를 개발하느라 정신이 없었다. 멀틱스는 대형 기종을 대상으로 하는 차세대 운영체제로서, 당시로서는 구현하는 것이 불가능할 정도로 많은 이상적인 목표를 포함하고 있었다. 실제로 이때 목표로 삼았던 것들 중에는 최근에야 유닉스에서 겨우 구현된 것들까지 있을 정도로, 당시로서는 놀라울 정도로 상당히 상상력이 가미된 기획이었다고 생각된다.

1960년대라고 하면, 시분할 처리 같은 것이 겨우 물 위로 올라올까 말까 하는, 소위 호랑이가 컴퓨터의 느려터진 속도에 지겨워서 담배 피우러 나가던 시절이라 할 수 있다. 그 시절에 멀틱스는 세그먼트 메모리와 가상 메모리, 공유 메모리, 다중 언어 지원, 고수준의 언어 지원과 관계형 데이터베이스, 소프트웨어 공학, 심지어는 보안에 이르기까지 다양한 개념을 실제로 구현하려 했다. 굳이 비유하자면 그 시대에 우주소년 아톰을 상상한 것 이상의 상상력을 발휘한 것이라 할 수 있다. 어쨌거나 이때의 개념들은 멀틱스 프로젝트가 망한 뒤 이 프로젝트에 동원된 인력들이 유닉스를 발전시키면서 하나씩 구현되어 왔다.

예나 지금이나 돈 안되는 프로젝트는 떨려나는 법이다. 멀틱스는 여러 팬들의 노력에도 불구하고 별로 팔리지 않았고, 프로젝트는 중단되었다. 프로젝트가 중단된 뒤에도 멀틱스 서버는 계속 돌고 있었지만 결국 마지막 멀틱스 서버가 서기 2000년에 가동을 중지했다. 한 세기를 풍미할 수도 있었지만 너무 빠른 시도였던 멀틱스는 그렇게 끝났다.

컴퓨터의 역사를 발전시키는 것은 언제나 게임?

사 실은, 걸작 게임이 나온다고 해도 워낙 인터넷이 발달한 대한민국에서 패키지 게임을 팔아먹는 것은 쉬운 일이 아니다. 초회 한정판에 레어로 엄청나게 상품을 끼워 준다고 해도 살까말까 하는 것이 대부분 한국의 게이머들이어서, 걸작이라고 반드시 팔린다는 보장은 없는 것이다. 그렇다고 해도 걸작 게임이 한번 나오는 것만으로도 확실하게 한몫 잡을 수 있는 사람들은 분명히 있을 것이다. 어쩌면 그 중에는 용산의 상인들도 포함될지 모른다. 이유는 간단하다. 새로 발매된 게임을 제대로 플레이하기 위해 수많은 게임방과 가정용 컴퓨터들이 업그레이드를 단행하기 때문이다. 최근 용산에 가보면 패키지 게임 뿐만이 아니라 “리니지 2를 위한 최강의 PC”라는 이름으로 팔리는 조립품들도 많은 것을 보면, 게임이 발전하지 않았다면 이 정도로 가정용 PC가 발전했을 가능성은 극히 적다고 하겠다.

여담이 길었지만, 게임 때문에 컴퓨터의 역사는 다시 한 번 꼬여들기 시작했으니, 그것은 바로 멀틱스의 실패 이후 새로운 프로젝트를 찾던 켄 톰슨이 하필이면 우주여행 게임을 개발할 마음을 품은 것에서 시작한다. 벨 연구소의 켄 톰슨은 이 게임을 개발하기 위해 DEC에서 개발한 PDP-7을 이용하려 했으나, PDP-7에는 쓸만한 개발 환경이 없었다. 이 시대는 정보의 바다에서 무엇이라도 찾을 수 있는 지금과 달리 필요한 것이 있으면 직접 만드는 수 밖에 없어서, 켄 톰슨은 결국 데니스 리치를 끌어들여 PDP-7에서 사용할 수 있는 파일 시스템과 원시적인 셸을 개발하고 만다. 떡 본 김에 굿을 한다고, 결국 이들은 셸과 파일 시스템에서 시작하여 다양한 유틸리티를 만들기 시작한다. 물론 게임을 만들겠다는 생각에서 시작되었다고는 하지만, 이 프로젝트에 꼬여들기 시작한 개발자들은 다중 사용자 시스템이 지닌 상업적 가치를 잘 알고 있었다. 결국 1969년에 시작된 이 프로젝트는 멀틱스의 이름을 비꼬아 만든 유닉스라는 이름이 붙은 채 미니컴퓨터인 PDP-11에 이식되었다. 물론 이 시대의 강력한 컴퓨터라고 해도 한계가 있는 것이어서, 16비트 시스템이었던 PDP-11은 불과 지금의 아이콘 하나 정도의 용량(32KB)인 운영체제로 동작하였고, 시스템 운영에 16KB, 사용자에게 8KB를 제공할 뿐이었지만 당시로서는 획기적인 물건이었다.

어쨌거나 데니스 리치는 이후 모든 전산인들의 기본이며 원흉이 되는 중대한 물건을 개발하게 된다. 원래 멀틱스에서는 켄 톰슨이 개발한 B를 사용하였지만, 데니스 리치가 C를 개발한 이후 유닉스에서 C언어를 광범위하게 사용하게 되었다. 1973년 이후 유닉스에는 C가 기본으로 장착되었고, 이 언어에 의해 유닉스와 관련 유틸리티들이 컴파일되었다.

C언어를 사용하게 된 것은 중요한 의미를 지닌다. 어셈블리로 작성된 운영체제나 프로그램이었다면 시스템에 따라 새로 작성해야 하는 부분이 많았겠지만, C언어를 사용하면 약간의 수정과 실행할 환경에서 정상적으로 실행되는 컴파일러를 사용하여 쉽게 포팅할 수 있다. 이는 다양한 환경에서 더 많은 사람들이 유닉스를 사용하는 기반이 되었다.

유닉스는 1973년 10월 ACM의 SOSP(System Operating System Principles) 컨퍼런스에서 공개적으로 발표되었다. 이후 1974년에 리치와 톰슨에 의해 “The UNIX Time Sharing System”이라는 제목으로 이 운영체제를 ACM에 발표한다. 같은 해 1월, SOSP에 참석한 버클리(Berkeley) 대학에서는 버전 4의 유닉스 테이프를 얻어 시스템을 설치했다. 바로 이 시스템에서 BSD 유닉스가 시작되었다.

벨 연구소를 포함하고 있던 AT&T는 이미 전신 사업으로 거대 기업이 되어 있었으나, 반독점법 소송의 결과 전신전화 사업과 대중 통신 서비스를 제외한 어떠한 사업에도 참여할 수 없는 상황이 되었다. SOSP의 발표 이후 유닉스를 요청하는 대학의 숫자가 늘어나자 AT&T는 유닉스 판매를 포기하는 대신 간단한 라이선스 조항에 동의하는 조건으로 연구 교육용 유닉스를 공급했다. 물론 광고나 판매는 없었으며 별다른 기술 지원도 없었다. 유닉스는 이렇게 각 대학에 번져나갔고, 대학에서 유닉스를 사용하던 사람들은 사회에 나가서도 유닉스를 사용하게 되었다. 이 과정에서 유닉스가 널리 알려지게 되었다.

유닉스는 1979년에 나온 릴리즈 버전 7부터 다른 기종에 쉽게 이식할 수 있도록 설계되었으며, 이 버전으로부터 수많은 변종이 탄생했다. 대표적인 예가 XENIX이다. 상당히 널리 사용되던 이 버전은 놀랍게도 마이크로소프트가 팔아먹던 것으로, 여담이지만 웬만큼 이 XENIX를 팔아먹고 난 뒤 마이크로소프트는 이 사업을 SCO로 넘긴다. 어쨌거나 이 버전은 꽤 성능이 안정적이었으며 피드백도 활발했지만 상업화되면서 많은 반발을 산 버전이기도 했다. GPL이나 BSD 라이센스는 이 시대 이후 만들어졌으며, 이런 오픈된 라이센스를 기반으로 오픈 소스가 발전하게 되었다. 이런 라이센스는 몇몇 개발자 그룹이 첨예하게 대립하는 계기가 되기도 하였지만 대개 큰 문제 없이 독자적으로 잘 발달하고 있다.

BSD의 탄생 이야기

“버클리 대학교 하면 뭐가 떠오르냐?”

“버클리 음대!”

” 그렇지….. 근데 서울대에 법대만 있고 연세대에 의대만 있으며 인하대에 공대만 있냐? 아니란 말이다. 버클리에는 음대만 있는 것이 아니라 컴퓨터과가 있었는데, 이 과가 또 유닉스의 역사에서 빼놓을 수 없는 곳이다, 이거다.”

[여기서 잠깐]

(버 클리 음대 혹은 버클리 음악원은 명문 버클리 캘리포니아 주립대(University of California, Berkeley)를 말하는 게 아니라 미국 보스턴에 있는 사립대학 버클리 음악대학(Berklee College of Music)입니다. 오해 없으시길. ^^)

앞서 유닉스가 거의 공짜로 배포되었을 때 버클리대학교는 이를 활발히 도입했다고 설명했다. 이후 버클리대는 유닉스 버전 5를 수행하기 위해 새로운 서버를 구입했다. 1975년 서버가 더욱 충원되었을 때, 유닉스를 만든 켄 톰슨이 방문 교수로 버클리에 돌아와 안식년을 보내게 되었다.

이 사람이, 유닉스가 굴러다니는 학교에 방문 교수로 와서, 완전히 차려놓은 밥상과 같은 이 학교에서 무슨 짓을 하고 다녔을지는 안 봐도 비디오다. 켄 톰슨은 버전 6 유닉스를 설치하고, 마침 대학원생으로 입학한 빌 조이와 척 핼리를 끌어들여 파스칼 시스템을 개발했다. 이후 1976년경부터 빌 조이는 커널을 이해하고 개선하는 작업에 뛰어들었다. 이렇게 파스칼 환경이 성공하자 다른 사람들의 요청대로 시스템을 쉽게 복사해주기 위해 빌 조이는 1977년 BSD(Berkeley Software Distribution)라는 이름의 배포판을 만들었다. 물론 이것은 아직 유틸리티 수준으로, 커널 자체는 유닉스의 것을 쓰고 있었다.

같은 해에 빌 조이는 터미널에서 화면 커서의 위치를 조정해 작업을 쉽게 할 수 있도록 그 이전에 만든 ex를 개조해 vi 편집기를 만들었다. 그리고 터미널 간의 상이한 동작을 보정하기 위해 만든 것은 termcap이 되었다. 간단히 말해 자기 불편한 것 해결하려고 이 사람이 했던 일이 현재의 유닉스 모습을 만드는데 엄청난 기여를 했다는 뜻이다. 또한 빌 조이는 C셸을 구현하기도 했다.

이 시점 이후 유닉스의 역사는 매우 복잡해진다. 버클리 대학을 중심으로 이후 BSD 계열이라 불리게 되는 유닉스가 계속 개발된 반면, AT&T는 시스템 III, 시스템 IV 등을 개발한다. 여담이지만 이 계열의 최신 시스템을 대개 시스템 V라고 하는데, 시스템 브이가 아니라 시스템 5라는 사실을 기억해 두자. 어쨌거나 이들은 본질적으로 유닉스에 속하지만 서로 표준이 조금씩 달라지며 다른 형태로 발전해갔다. 물론 이들은 대부분의 표준은 시스템 V를 중심으로, 그리고 개혁적인 부분은 BSD를 중심으로 발전하며 서로 상생하며 춘추전국시대를 이루게 되었다.

여러가지 유닉스

유닉스는 그 이름과는 달리 수많은 변종이 만들어졌으며, 현존하는 대부분의 운영체제에 영향을 끼쳤다. 리눅스 역시 이 계파에서 쉽게 벗어날 수 없다. 이번에는 여러가지 유닉스 중 대표적인 것 몇가지를 살펴보겠다.

전대물이 아닙니다 – 골라먹는 3가지 BSD!!!

먼 저 살펴볼 것은 앞서 설명한 BSD이다. 이야기가 엉뚱하게 새는 것 같지만, 동양에서는 예로부터 3이나 5 등의 홀수를 귀히 여겼으며, 서양에서도 7을 신성한 수로 생각하였다. 그래서인지는 모르겠으나 대개의 로봇 만화에서는 3대나 5대의 머신이 합체하여 하나의 강력한 로봇이 된다. 예를 들어 메칸더 브이는 3대, 인간형 로봇이라 보기는 힘들지만 독수리 5형제는 다섯 명이 각각 메카닉을 한 대씩 끌고와 합체하였으며 심지어 84태권브이는 최후에 조박사가 만든 인조인간 현이와 싸울 때 조종사가 2명뿐임에도 불구하고 굳이 한 대를 인공지능 조종이라는 설정까지 써먹어가며 탱크형, 비행기형, 지상과 공중전에 두루 능한 가운데 토막 등으로 분리, 합체하기도 하였다. 로봇물뿐이 아니다 전대물에서도 이 법칙은 그대로여서 세일러문은 내행성 5명에 외행성까지 합이 무려 9명이었으며, 후뢰시맨, 바이오맨, 마스크맨은 5명, 한국이 만들어 일본에 자랑하는 지구용사 벡터맨은 3명인 것이다.

……여담이 길었다. 하여간 우연인지는 몰라도 BSD 하면 우리는 대표적으로 다음 세 가지를 떠올리는데, 바로 FreeBSD, NetBSD, OpenBSD이다.

1990 년에 윌리엄 졸리츠는 BSD를 386으로 포팅했고, Dr.Dobb’s Journal(ddj.com)에 이 과정을 기고했다. 386/BSD라는 이 배포판에서 다른 BSD 시리즈가 탄생하기 시작한다. 우리가 사용하는 BSD 계열의 공개 유닉스는 모두 이 386/BSD에서 비롯된 것이다.

조용한 자부심이라는 말로 표현되는 FreeBSD는 우리 나라에도 생각보다 사용자가 많다. 리눅스 사용자 중에서도 FreeBSD를 함께 사용하는 사람이 꽤 되는 것으로 알고 있다. 이 품종은 강력한 성능과 안정성을 추구하며, 본격 유닉스이면서도 일반적인 시스템에서 편리하게 사용할 수 있다. FreeBSD 관리와 개발 모델은 매우 안정되고 사용하기에 편한 시스템을 지향한다. x86 플랫폼으로 가장 믿을만한 운영시스템 중 하나로서 FreeBSD의 특징은 간결함과 안정성이다. 몇 개의 중요한 사이트가 FreeBSD로 운영된다. FreeBSD의 강력한 애플리케이션 설치 도구인 포트 컬렉션은 다른 BSD 계열 운영체제인 NetBSD와 OpenBSD의 모델이 되기도 했다.

FreeBSD 는 언제든지 공식적인 코드 베이스를 수정할 수 있는 수많은 커미터가 개발에 참여하며, 이들 커미터의 선출이나 수없이 많은 논쟁의 결과 판정은 별도의 코어팀이 담당한다. 최근 이들 커미터와 코어팀의 일부는 유닉스 기반으로 만들어진 맥 OS X의 개발에도 참여하고 있다.

FreeBSD와는 별도로 386BSD 이외의 작업에 중점을 둔 다른 사람들은 BSD를 매킨토시로 포팅하였으며, 다시 아미가 등으로 확장하였다. NetBSD는 이런 확장성과 이식성에 기반하였으며, 최근의 버전은 거의 모든 플랫폼에 자유롭게 이식할 수 있다. NetBSD의 이식성은 그 어떤 운영체제에도 뒤지지 않을 만큼 뛰어나며, 최신 서버 장비뿐만 아니라 DEC의 VAX 등의 구식 하드웨어도 지원한다. 또한 이식성과 보편성을 위주로 제작되었기 때문에 코드가 매우 간결하고 깔끔하다. 이런 특성으로 인해 중요한 임베디드 시스템 중 하나로 인식되고 있다.

한 편, NetBSD 1.1 개발 중 논쟁이 벌어져 결국 개발에서 손을 뗀 떼오 드 라뜨는 직접 OpenBSD를 개발하기 시작했다. 이 운영체제는 가장 안전한 운영체제를 만드는 데 주력하였고, 현재 오버플로우가 일어나지 않는 안전성을 자랑하고 있다. 떼오는 그가 캐나다에 산다는 점을 이용하여 미 국방 수출법의 방해를 받지 않고, RSA, BlowFish와 여러 보안 관련 알고리즘을 탑재하기 시작하였으며, 이에 참여한 개발자들은 안전한 통신을 위해 널리 사용되는 프로토콜인 OpenSSH의 개발에도 기여하였다. 또한 제작 과정에서 보안상 문제가 될 수도 있는 모든 코드를 철저히 감사하여 FreeBSD, NetBSD, 시스템 Ⅴ에서 파생된 것을 포함하여 다른 운영체제와 관련된 수많은 보안 관련 버그와 코딩 실수를 잡아내어 안전한 운영체제를 만들기 위한 노력을 게을리하지 않았다.

이런 BSD 계열은 서로 경쟁하고 보완하며 여러 방면으로 발전하였으며, 우리가 지금 사용하는 리눅스 역시 이런 BSD 계열에 포함된다.

유닉스의 쌍벽, 시스템 V

지 금까지 BSD 계열에 대해서만 설명하였지만, 사실 시스템 V는 유닉스 계의 또 다른 한 축을 이루고 있다. 시스템 V는 좀 더 표준화되었으며, 새로운 기능과 BSD 계열과는 다른 여러 특징을 지니고 있었다. 예를 들어 가상 메모리 구조에 차이가 있었으며 별도의 IPC와 공유 라이브러리, 네트워크 프로토콜, 스트림 구조 등을 갖추고 있었다.

모든 상용 유닉스 중 가장 널리 퍼진 것은 시스템 Ⅴ이며, 대학과 오픈 소스 계를 중심으로 발전해 온 BSD와는 달리 대부분의 상업적 벤더에서 채택하고 있다.

새로운 태양, 솔라리스

SUN 은 스탠포드 대학 네트워크의 약자로, 이름에서 알 수 있듯이 스탠포드 공대에서 출발한다. 스탠포드의 대학원생이던 앤디 백톨샤임이 주축이 되어 비노드 코슬러, 스콜 맥닐리와 함께 썬을 개발하였으며, 이후 BSD 계에서 많은 업적을 남긴 빌 조이가 가담하여 본격적으로 발전하였다. 많은 실리콘밸리의 기업들이 그렇듯 차고에서 시작한 이 회사는 최초의 여러 시스템을 손으로 조립하여 출시하였지만 상당한 성공을 거두었고, 이 성공을 바탕으로 하여 여러 우수한 인력을 채용할 수 있게 되었다.

빌 조이는 BSD에서 이룩한 혁신을 썬에서도 계속 이어갔으며, 썬 사는 1984년 기존 BSD를 대체할 수 있는 SunOS를 개발하였다. 이 과정에서 유닉스의 역사에 여러 혁신적인 변화가 추가되었으며, 이런 변화 사항은 SVR4로 통합되었다.