강좌 & 팁
안녕하세요. 오늘은 운영체제의 역사에 대해서 한번 정리해 볼려고 합니다.
이것에 대해선 안윤호 이사님의 2003년 마소 연재글을 빌릴려고 합니다. 그 때 당시 제가 저자에게 글을 제가 좀 사용하겠다고
했으니, 아마 이해해 주실 겁니다. 글이 좋아서요. ㅎ
전체적인 역사를 보여주는 Big picture로 글을 시작합니다.
[1]전근대적인 운영체제 또는 유닉스 이전
Multics(Multiplexed Information and Computing Service)는 대형 기종을 대상으로 한 차세대 운영체제를 표방했다(http://www.multicians.org에 가면 멀틱스의 모든 내용을 볼 수 있다). 대부분의 책이 멀틱스를 언급 하면서 켄 톰슨이 복잡한
멀틱스에 회의를 느끼고 유닉스를 개발했다고 하지만 사실 유닉스는 최근에야 멀틱스의 이상에 접근하고 있다. 필자의
생각으로는 1960년대에 이러한 시스템을 개발하려 했던 용기와 상상력에 놀라움을 금치 못한다.
대부분의 운영체제와 많은 종류의 프로세서 디자인은 멀틱스의 영향을 직접 혹은 간접적으로 받았다.
멀 틱스의 특징은 다음과 같은 것들로 요즘 운영체제와 거의 비슷하다. 이들이 얼마나 비현실적인 목표일 수 있었는지
실감이 가지 않는 사람이 더 많겠지만 멀틱스는 지금으로부터 40년 전에 이러한 목표를 달성하려 했다. 그 당시 처리기는
약 1MIPS 정도의 속도였으며 MMU는 간신히 구현되기 시작했다. 시분할(time sharing)이라는 개념이 간신히 구체화할
무렵 이러한 시스템을 상상한 자체가 필자에게는 지금도 놀라움이다. 멀틱스가 비현실적이라는 이유로 개발을 중지한 그
틈새에서 자라나기 시작한 유닉스는 30년에 걸쳐 멀틱스의 많은 이상을 구현했다.
◆ 세그먼트 메모리(Segmented memory)
◆ 가상 메모리(Virtual memory)
◆ 고수준 언어 구현(High-level language implementation)
◆ 공유 메모리 멀티프로세서(Shared memory multiprocessor)
◆ 다중 언어 지원(Multi-language support)
◆ 관계형 데이터베이스(Relational database)
◆ 보안(Security)
◆ On-line reconfiguration
◆ 소프트웨어 엔지니어링(Software engineering)
그전까지는 그냥 이상적이라고 보았던 수많은 개념이 결국 구현되기 시작했다. 이 멀틱스 프로젝트에 동원된 수많은
인력이 결국 멀틱스 이후의 컴퓨터 역사를 새롭게 짜기 시작한다. 멀틱스는 다중 CPU, 메모리 공유, I/O 자원 공유를
보여주고 있다. 멀틱스의 희망과 좌절은 멀틱스 홈페이지에 잘 나타나 있으며 독자들은 멀틱스의 개념과 함께 그 잘못(오류)
마저도 사랑할 것이라는 문구를 보게 될 것이다. 당시 MIT 측의 멀틱스 책임자였던 Corbato 교수(<그림 2>)는 1990년에 ACM에서
수여한 튜링상을 받았다. 멀틱스는 상업적으로 실패했다. 유닉스는 당시의 기술로 도달 불가능할 것이 자명했던 멀틱스의
이름을 풍자해 벨연구소의 켄 톰슨에 의해 개발됐다. 원래 이름은 UNICS(Uniplexed Information and Computing System)였다고 한다.
멀틱스는 2000년에 마지막 서버가 가동을 중지했다.
[2] 유닉스가 개발되다
벨연구소가 멀틱스 개발에서 철수했을 때 개발팀의 일원이던 켄 톰슨을 비롯한 몇 명의 연구자는 다른 연구 프로젝트를
찾고 있었다. 켄 톰슨은 우주여행(Space Travel)이라는 게임을 개인적으로 개발하기 위해 DEC에서 개발한 PDP-7을
이용하기로 했으나 PDP-7에는 적당한 개발 환경이 없었다. 데니스 리치(Dennis Ritchie) 와 함께 이들은 PDP-7에
사용할 수 있는 파일 시스템을 개발하고(이 파일 시스템이 나중에 유닉스에 사용된 s5fs의 모체다. Maurice Bach의
『The Design of the Unix Operating system』에 나오는 파일 형태가 바로 s5fs다) 그 다음에는 간단한
명령어 해석기인 원시적인 쉘을 만들게 된다. 이 쉘은 얼마 후 본 쉘(Bourne Shell)로 발전한다. 그리고 몇 가지
작은 유틸리티를 만들게 된다. 이들은 기본적인 유닉스를 만들어낸 것이다. 게임을 언급하기는 했지만 톰슨을 비롯한
Multics 관련 개발자들은 중소형 규모의 다중 사용자 시스템의 잠재적인 상업적 가치를 잘 알고 있었다.
[3]유닉스의 급격한 성장
결국 1969년에 시작된 이 작은 개발 환경은 벨연구소의 지원에 따라 최초의 강력한 미니컴퓨터인 PDP-11에도 이식됐다.
PDP-11은 16비트 시스템으로 초기 버전에서는 시스템 운영에 16KB를, 사용자에게는 8KB를 제공했다(사실상 수년 뒤에
나오는 8비트 마이크로컴퓨터와 별로 차이가 없어 보인다. 요즘은 작은 아이콘 정도의 용량으로 운영제제가 개발됐다.
더 중요한 진보는 데니스 리치에 의한 C 언어의 개발이었다. 원래 멀틱스에서 사용하던 켄 톰슨이 개발한 B 언어를
이용하다가 리치에 의해 C를 사용하게 됐다. C는 얼마 안 가 유닉스보다 더 광범위하게 사용되기 시작했다.
1973년부터는 C 컴파일러를 기본적으로 내장하게 됐고 유닉스라는 말은 C라는 말과 같은 뜻이 됐다. 같은 해 이들은
어셈블러로 구성된 유닉스를 C로 작성한다. 유닉스가 C로 작성됨에 따라 운영체제는 고급 언어로 작성될 수 있다는 것을
입증하게 됐으며 유닉스가 PDP-11 이외의 기종으로도 널리 포팅되기 시작하는 계기가 됐다. 그러나 알려진 것과는 달리
이들이 고급 언어로 운영체제를 기술하려는 첫 시도가 아니었다. 이미 멀틱스 때부터 어셈블리어가 아닌 고급 언어를
이용하고자 하는 강력한 욕구가 있었다. 이러한 자료는 멀틱스의 주요 아키텍트였던 로버트 그라함 같은 사람들이 주장하고
있었다(「Use of High Level Languages for Systems Programming」, R.M. Graham; Project MAC Technical Memorandum 13, MIT, September 1970). 그리고 이들의 작업은 1994년 ACM에 발표된 「Reflections on Trusting Trust」라는 글에도 잘 나타나 있다.
초기의 유닉스는 벨연구소 안에서만 사용됐고 회사 밖으로 공개되지는 않았다. 내부 연구진에 의해 많은 발전이 있었다.
톰슨과 리치는 얼마 후 내부에서 「UNIX Programmer's Manual」을 작성했다
(요즘도 이 문서는 http://www.cs.bell-labs.com 등에서 내려받을 수 있다. 가끔씩 유닉스 프로그램이 어떤 이유로 개발됐는지 알고
싶을 때 이 문서들을 살펴보면 흥미로울 것이다. 이들이 어떤 이유로 유틸리티들을 개발했는지 살펴보면 참으로 어처구니없이
단순한 이유 때문에 개발이 진행된 경우가 많다. 이 문서의 마지막 버전(http://www.cs.bell-labs.com/10thEdMan)은 유닉스만이 아닌
분산 운영체제인 Plan 9까지 고려한 상태로 발표된다).
유닉스는 1973년 10월 ACM의 SOSP(System Operating System Principles) 컨퍼런스에서 공개적으로 발표되고 1974년에 리치와
톰슨에 의해 「The UNIX Time Sharing System」이라는 제목으로 ACM에 발표된다. 이로써 외부에 유닉스가 알려지게 된다.
SOSP에 참석한 버클리(Berkeley) 대학에서는 같은 해 1월에 버전 4의 유닉스 테이프를 얻어 시스템을 설치했다. 이 작업은 BSD
유닉스의 시작이기도 했다.
이 미 전신 사업으로 거대 기업이 되어 있던 AT&T는 반독점법 소송의 결과 전신전화 사업과 대중 통신 서비스를 제외한
어떠한 사업에도 참여할 수 없는 상황이 됐다. SOSP의 발표 이후 유닉스를 요청하는 대학의 숫자가 늘어나자 AT&T는
유닉스 판매를 포기하는 대신 간단한 라이선스 조항에 동의하는 조건으로 연구 교육 목적으로 유닉스를 공급했다.
광고나 판매가 아닌 형태였으며 시스템에 관한 지원도 없었다(유닉스는 이러한 느슨한 제약에 의해 크게 성장했는데
대학교에서 유닉스를 사용했던 사람들은 사회에 나와서도 유닉스를 찾곤 했다). 결국 유닉스를 사용하는 대학은 나날이
증가했다.
유닉스는 1979년에 나온 릴리즈 버전 7부터 이식이 용이하도록 설계됐으며 이 버전으로부터 수많은 변종이 탄생했다.
마이크로소프트는 초기부터 유닉스에 관심이 많았다. 1980년대에 컴퓨터를 좋아햇던 사람들이라면 XENIX라는 상품명으로
팔린 16비트 유닉스를 기억할지도 모른다. 그 당시의 중요한 운영체제 교과서에도 XENIX가 다루어질 정도였다. 그 후
마이크로소프트는 이 유닉스 사업을 SCO로 넘긴다. 마이크로소프트는 유닉스에서도 앞서나간 사업 수완을 발휘하고
있었다.
버전 6에서 7로 숫자가 증가하면서 성능이 안정화하고 많은 개발자의 피드백을 받기는 했지만 상업화와 라이선스 정책의
변화로 많은 반발을 사기도 했다. 존 라이온(John Lion)의 『Lion's Commentory on Unix』 같은 책이 AT&T와
충돌을 빚기도 했다. 헐거웠던 라이선스를 점차 엄격하게 적용하기 시작하면서 갈등이 높아졌다. GPL이나 BSD 라이선스
같은 조항은 이러한 사건들이 발생한 후에 만들어졌다. 초특급 오픈소스 개발자들이 라이선스 조항에 신경을 많이 쓰는
일은 어떻게 보면 당연한 일이다. 라이선스 정책은 그 이후에도 몇몇 개발자 그룹이 첨예하게 대립하는 계기가 되기도
했다.
To be continued ...
그런데 현재처럼 소프트웨어 환경이 많이 좋아진 건 하드웨어 엔지니어들의 노력이 많은 뒷받침되어 일어났기에 생각이 듭니다.
솔직히 최근 들어 느낀 거지만 소프트웨어 분들은 하드웨어 분들을 가볍게 여기시는 것 같아서요.