아마 이번 글은 다소 재미없는 역사 시간이 될 거 같다. 학교에서 리눅스 프로그래밍을 배우면 가장 먼저 배우는 내용이기도 하고, 리눅스를 배운다면 적어도 UNIX와 Linux가 어떻게 다른지 한번쯤은 이해하고 넘어가자는 의미에서 글을 작성하게 되었다.

Unix 이전

1955

John McCarthy라는 할아버지가 시분할(time-sharing)에 대한 개념을 제시한다. time-sharing은 이후 호환 시분할 시스템(Compatible Time-Sharing System, CTSS)의 발전에 영향을 미치게 된다.

John MacCarthy라는 할아버지가 알고보니 상당히 대단한 사람인데, 앞선 시분할 개념을 소개한것 이외에도 무려 인공지능이라는 용어를 처음 만든 할아버지라고 한다. 최근 비즈니스 관련해서 인공지능이라는 말을 할 수 없으면 대화가 진행되지 않을 정도인데, 이를 처음 명명한 사람이라는 상당히 대단한 할아버지다. 또 언젠가 C 이전의 프로그래밍 언어라고 얼핏 들었던 LISP도 이 할아버지가 만들었다고 한다.

1962

MIT의 Computation Center에서 CTSS라는 최초의 시분할 운영체제(time-sharing operating system)를 만들어 낸다. 이후 CTSS는 MULTICS라는 발명품에 기여하게 된다.

MULTICS와 UNIX의 등장

1969 - 1971

GE, MIT, Bell Labs의 연구자들이 MULTICS라는 OS를 출시하게 된다. MULTICS는 GE-645라는 메인프레임을 위해 만들어진 OS였다. 비록 상업적으로는 성공하지 못했으나. 이후 UNIX의 탄생에 중요한 역할을 하게 된다.

GE-645

이후 Ken Thompson이라는 할아버지가 GE-645 메인프레임을 계속해서 발전시켜, 여기서 실행할 수 있는 Space Travel이라는 게임을 만들게 된다.

그러나 GE 머신으로는 너무 느리고 비싸다는 점을 느끼고 벨 연구소에서 그나마 저렴한 PDP-7이라는 컴퓨터를 찾게된다.

이 PDP-7이라는 컴퓨터에서 톰슨이 리더로 Dennis Ritchie(!), Rudd Canaday과 함께 [1]계층적 파일 시스템(/ 로부터 파생되는 그 파일 시스템, 지금은 당연한 이것이 그 전에는 그렇지 않았다), [2]프로세스와 디바이스를 파일로 관리, [3]CLI(Command-line Interpreter), [4]그 외의 소규모의 유틸리티 프로그램을 모두 가진 UNIX(Uniplexed Information and Computing Service)라는 프로젝트를 시작한다. 언어는 어셈블리어. 이때의 UNIX라는 이름은 이름에서 유추하였듯 앞의 MULTICS의 언어유희이다.

오른쪽이 Thompson, 왼쪽이 Ritchie

이후 Brian Kernighan(!)이 추가적으로 합류하였고, 이후 1970년에 공식적으로 UNIX라는 이름을 달고 PDP-11/20이라는 머신에서 돌아가게 된다.

이후 Bell Labs의 모회사인 AT&T가 대학과 사기업들에게 UNIX를 공급하였고, 심지어 미국 정부에게도 라이센스와 함께 UNIX를 공급하게 된다.

PDP-7

UNIX 등장 직후의 양상

1973

앞서 UNIX를 개발했던 Ken Thompson이라는 할아버지가 B라는 매우 간단한 언어를 만든다. 바로 PDP-7에서 사용하려고 만들었는데, 문제 없이 동작은 하지만 몇몇 문제가 있었다.

이후 UNIX를 함께 만들었던 Dennis Ritchie이 함께 최초의 C compiler를 만들었고, 이를 가지고서 Ken Thompson과 Dennis Ritchie가 문제가 있던 부분을 보완하여 UNIX 커널을 다시 짜게 된다.

Dennis Ritchie(서있는 쪽)와 Ken Thompson이 두 개의 Teletype 33 터미널을 통해 UNIX를 PDP-11로 포팅하는 장면

C로 다시 커널을 만들고 나니, 어셈블리어보다 다른 머신에 호환되는 환경으로 수정하는 작업이 비교적 쉬웠고, 이를 가지고 다른 개발자들이 다양한 베리에이션을 만들게 된다.

1974

Communications of the ACM이라는 저널에 UNIX를 발표하게 된다.

1977

UNIX가 분리된다. UC-Berkley의 Bill Joy(또 다른 전설의 등장!)가 본인들만의 버전을 발표해버리고, Berkely Software Distribution이라는 의미에서 이름을 BSD로 짓는다. 이때 되게 다양한 유틸리티들을 만들었는데, 우리가 자주 사용하는 vi, shell 같은 프로그램들도 이때 만들어졌다.

[Bill Joy] Java, vi, csh, solaris의 개발자

1980 - 1981

드디어 마이크로소프트가 등장한다. 마이크로소프트가 OS 비즈니스에 참여하여 UNIX를 본인들만의 버전으로 바꿔 Xenix라고 명명한다. 예전에 실리콘 벨리의 신화라는 영화에서 관련된 이야기를 접할 수 있었는데, 상당히 흥미로웠다. 이후 마이크로소프트는 IBM과 계약을 체결하고 IBM의 새로운 제품군을 위한 OS 개발 계약을 체결한다.

영화 [실리콘 벨리의 신화] 중에서

1982

AT&T가 UNIX System III라는 버전(SVR1, Sysyem V release 1이라고도 불린다)의 최초의 상업적인 UNIX OS를 상표에 등록한다. BSD를 만들었던 Bill Joy는 다른 동료들과 함께 Java를 만든 Sun Microsystems를 창립하고 SunOS를 만들게 된다. 이떄 SunOS라는 이름은 현재는 Solaris OS라고 명명되어 불리고 있다.

1983

4.2BSD에서 최초의 TCP/IP 소켓 API를 출시한다.

한편, 미국 법무부에서는 반독점법을 이유로 AT&T에 소송을 걸었고, 정부에 의해 찢어지게 된다. 이 과정에서 Bell 연구소 또한 상당 부분 규모가 축소된다. 이와 연관해서 AT&T 측에서는 최대한 빨리 UNIX System V를 내고자 했다고 한다.

Thompson과 Ritchie는 운영 체제 이론에 대한 개발 및 특허, UNIX의 개발의 공로를 인정받아 튜링상을 받게된다.

1984

정보기술 분야에 open system 표준을 식별, 장려하기 위한 목적으로 X/Open 컨소시엄이 설립된다.

MIMIX의 등장과 유닉스 전쟁

1985

Andrew Tanenbauum이라는 네덜란드의 교수가 Unlix와 비슷한(Unix는 아니지만!) MINIX라는 OS를 만들게 된다. 이때, MINIX는 UNIX의 주요한 특징들을 전부 담고 있어서, UNIX 코드에서 비롯된게 아닌가 하는 오해를 할 수 있는데, UNIX like이지 UNIX는 아니다. UNIX를 표방하여, 본인이 소스 코드를 짰다고 한다.

Linx의 부모 격인 MIMIX였다.

1987

AT&T와 Sun Microsystems는 X/Open과는 독립적으로 Xenix, BSD, SunOS, 기존 SysV(System V)의 특징들을 모두 합친 SVR4(System V Release 4)의 개발을 시작한다.

1988

오픈 소프트웨어 재단(Open Software Foundation)이 결성되고, Mach 커널과 BSD 운영체제를 기반으로 본인들이 변형한 UNIX를 출시한다. OSF는 UNIX의 표준을 만들자는 목적을 표방했는데, 이는 기존 UNIX 진영 쪽에서 꽤나 부담을 느꼈을 것이다.

이에 대항하여 AT&T와 썬마이크로시스템 측에서는 UNIX International이라는 협회를 설립하여 본인들이 유닉스 운영 체제의 표준을 만들겠다고 해버린다.

이를 유닉스 전쟁이라고도 한다는데, 싸움에 끼고 싶지 않았던 X/Open은 중립적인 태도를 취한다.

(유닉스 전쟁에 대한 기사 읽어보면 꽤나 재밌다.)

결론적으로 두 개의 표준이 생겨버린건데, 그러다 갑자기 평화가 찾아오고 IEEE의 POSIX(Portable Operating System Interface)와 X/Open 측의 Single Unix Specification이 양립하게 되었다고 한다.

Linux의 등장

1991

Linus Torvald의 등장. 그가 오픈 소스로써 Linux를 발표한다. 다들 알겠지만 본인 이름에 UNIX를 붙여 언어유희를 이어나간다. Linx의 탄생에는 MIMIX라는 부모가 없었다면 불가능했을지도 모른다. 학부 시절에 테넨바움의 책인 [운영체제-설계와 이론 및 MINIX에 의한 실제 장치]를 읽고 MIMIX를 가지고 놀던 Linus가 개인 컴퓨터에서도 동작하는 UNIX OS의 필요성을 느끼고 MIMIX를 기반으로 Linux를 개발했다고 한다. 여담으로 테넨바움 교수와 리누스 간의 Linux를 둘러싼 OS 논쟁도 전체적인 맥락을 알고보면 더욱 흥미로움을 느낄 수 있었다.

Linux 등장 이후의 양상

1993

AT&T가 Novell 사에 약 $210 million(2,952억 6,000만 원, 220923일 기준)의 가격으로 UNIX를 매각한다. 이후 Novell은 UNIX® 상표 및 인증 권한을 X/Open 측에 양도하게 되고, 본격적으로 Windows NT와의 경쟁에 들어가지만, 이미 Window가 시장에서 점차 높은 점유율을 보이기 시작했다.

1995

Novell이 UNIX의 전반적인 비즈니스를 모두 Santa Crus Operation(SCO)에 매각한다.

1996

X/Open 과 새로운 OSF(번역을 그대로 가져왔다)가 Open Group으로 합쳐진다.

1997

Open Group이 Single UNIX Specification(POSIX와 함께 양립했던 그 친구) Version 2를 발표한다.

1998

Open Group과 IEEE가 함께 Austin Group을 구성하고, POSIX와 Single UNIX Specification, 둘을 합치는 프로젝트를 시작한다.

2000

SCO가 UNIX 비즈니스 전체를 Caldera Systems에 매각한다. (팔리고 팔리는 UNIX...)

2001

Austin Group 이 Single UNIX Specification Version3를 출시한다.

당시 AIX, HP/UX, Mac OS X, SCO, Solaris, Tru64 UNIX, z/OS 등의 다양한 OS가 이를 따르게 된다.

2008

2008년 12월 Austin Group이 POSIX:2008(혹은 SUSv4)이라는 이름의 새로운 버전의 표준을 내게된다.

Unix-like system의 계보

Evolution of Unix and Unix-like systems

열심히 읽었다면 그림을 보고 반가운 이름들을 만날 수 있을 것이다. Unix, BSD, SunOS, Xenix, System 3, System V, Solaris, Mimix, Linux까지 MacOS로 이 문서를 작성하기까지 이렇게나 많은 유닉스 기반 운영체제가 존재했었다!

참고로 MacOS는 앞서 살펴보았듯(2001), SUSv3 표준을 따르는 Unix 운영체제이다. 그러니까 MacOS는 Linux는 말할 수 없다.  유사하다 정도의 답이 가장 둘의 관계를 잘 표현할 수 있겠다.

Unix Standard의 역사

Name Standard Comments
POSIX 1988 IEEE Std 1003.1-1988(1988L) First Standard
POSIX 1990 IEEE Std 1003.1-1990/ISO 9945-1:1990 Minor update of POSIX 1988
POSIX 1993 IEEE Std 1003.1b-1993/ISO (199309L) POSIX 1990 + real time
POSIX 1996 IEEE Std 1003.1-1996/ISO 9945-1:1996 (199506L) POSIX 1993 + threads + fixes to real-time
XPG 3 X/Open Portability Guide First widely distributed X/Open guide
SUSV1 Single UNIX Specification, Version 1 POSIX 1990 + BSD + System V
SUSV2 Single UNIX Specification, Version 2 SUS1 update
SUSV3 Single UNIX Specification, Version 3 (200112L) SUS2 update
SUSV4 Single UNIX Specification, Version 4 SUS3 update

SUS 와 POSIX 간의 차이와 최종적으로 POSIX와 SUS가 합쳐졌다는 점을 이해한다면 잘 이해했다고 할 수 있을 것 같다.

'CS' 카테고리의 다른 글

Cache Hit, Cache Miss 개념, Cache Miss의 종류  (0) 2022.11.28
Cache Memory 소개  (0) 2022.11.28
Ch2. Operating-System Structures  (0) 2022.11.15
[리눅스 프로그래밍] Kernel 개요  (1) 2022.09.23
[OS] Introduction  (1) 2022.09.23