14. BSD 유닉스 4화 – CSRG(Computer Systems Research Group) 결성

미국방성 고등 방위 연구 계획국(DARPA, Defense Advanced Research Projects Agency)의 지원

“우리가 국방성 연구, 개발 부분을 담당하고 있지만, 다른 연구 기관과 대학과의 효율적인 공동 연구를 위해 네트워크 구축이 필요합니다.”
“어떤 운영체제를 선정할지 논의가 필요하겠군요.”

“앞으로 각 연구기관과 대학에서 사용하고 있는 컴퓨터를 하나로 연결할 수 있는 네트워크 구축을 논의하기 위해 여러분을 불렀습니다”


“아시다시피, 각 연구 기관에 있는 컴퓨터를 교체할 시점이 다가오고 있습니다”
“여기서 가장 큰 비용은 연구용 소프트웨어를 새로운 컴퓨터에 이식하는 것입니다.”


“하지만, 하드웨어와 운영체제가 다양해서 소프트웨어를 서로 공유하기가 어렵습니다.” “그렇다고, 각 연구소 마다 요구사항이 다른데, 단일 회사의 컴퓨터를 사용하는 것은 실용적이지 못합니다”


“운영체제 수준에서 네트워크를 통합하는 방안을 찾아봅시다.”
“이렇게 되면, 원격으로 다른 컴퓨터 소프트웨어를 쉽게 사용할 수 있습니다.”


“유닉스를 활용하는 어떨까요? C언어로 개발되어 여러 컴퓨터에 이식이 쉽고 이미 많은 학교와 연구소에서 사용하고 있습니다.”


“이것이 바로 인터넷의 초기 형태인 아파넷(ARPANET)을 이야기하는거야.”


“좋은 생각입니다. 버클리대 밥 패브리 교수랩에서 BSD라는 유닉스 배포본을 만드는데, 과제를 맡겨봅시다.”

1979년 버클리대 밥 패브리 교수

“BSD 덕분에 이렇게 좋은 기회를 갖게 되다니… 하하, 그런데, 빌, 제안서 다 썼나요?”
“지금 열심히 쓰고 있어요.” “코딩에 배포본 배송에 제안서까지.. 빨리 도망가야지…”

마침내 1980년 4월 밥 패브리 교수는 미국방성 고등 방위 연구 계획국(DARPA)과 유닉스 향상에 대한 계약을 체결한다.

“과제 계약을 축하드립니다.”

“빌, 계약도 했으니, 이제 개발팀을 만듭시다. 똘똘한 친구들 좀 찾아봐요.”

버클리대 밥 패브리 교수는 버클리대학내에 CSRG(Computer Systems Research Group)라는 연구 그룹을 만들어 과제를 수행하게 된다. 핵심 멤버로 키스 보스틱(Keith Bostic), 빌 조이(Bill Joy), 마셜 커크 매큐직(Marshall Kirk McKusick), 사무엘 J 래플러(Samuel J Leffler), 마이클 J. 캐럴스(Michael J. Karels) 등이 과제에 참여했다.

물론, 과제를 수행하는 일은 쉽지 않았다. 패브리 교수는 연구원들이 개발에 집중하도록 대학의 관료주의와 싸웠고 때로는 AT&T와 법적 문제 그리고 미국방성 고등 방위 연구 계획국(DARPA)에서 계속 펀딩이 될 수 있도록 과제를 도왔다.

그리고, 작업 제어, 자동 리부팅, 1K블록 파일시스템 등을 포함해서 150개의 4BSD를 배포하였다. 4BSD에는 AT&T에 동의아래 유닉스 소스코드도 포함되었다.

“자, 어서 테이프 150개를 포장합시다.”
“유닉스 코드도 함께 배포하니 사용자가 더 쉽게 BSD를 설치할 수 있겠네요.”
“여럿이 함께 작업하니 한결 편하군요.”

“이봐 빌, VAX용 유닉스가 VMS보다 느리다고 누가 논문을 썼네.”
“뭐라고? “

“논문을 보니 맞는 말 같은데, 유닉스 커널 코드 좀 봐야겠군.”

“뭐해?”
“내가 커널 코드 좀 수정했어. 이제 BSD 유닉스도 VMS만큼 성능이 나와. 자 이제 5BSD를 배포해야겠어.”

“네? 5BSD라는 이름을 쓰지 말라고요?”

“저희 고객들이 AT&T에서 릴리스한 시스템V와 이름을 혼동할 수 있습니다.”

‘왜 이리 화가 났어?”
“방금 교수님 만나고 왔는데, AT&T에서 5BSD라는 이름을 쓰지 말라고 했어.”

당시 BSD유닉스는 벨 연구소에서 만든 유닉스 코드를 기반으로 동작했다. 비록 많은 코드가 추가되고 수정되었어도 벨 연구소를 소유한 AT&T에서 언제라도 유닉스에 대한 권리를 주장할 수 있었다.

결국, 1981년 6월 버전5는 4.1BSD이라는 이름으로 출시된다.


“드디어 4.1BSD가 도착했네.”

“소문대로 4BSD 보다는 훨씬 빠르군.”

이처럼 유닉스는 벨 연구소에서 개발되었지만, 소스코드와 함께 배포되었기 때문에 누구나 소스 코드를 고칠 수 있었다. 그 결과, 수 많은 외부 기여자에 의해 혁신이 이루어지고 유닉스 발전에 기여하게된다.

참고 문헌

만화 중 잘못된 부분이나 추가할 내용이 있으면 만화 원고에 직접 의견을 남겨주시면 고맙겠습니다. 그 외 전반적인 의견은 이 블로그에 바로 답글로 남겨주세요. 다음 5화에서는 TCP/IP 개발이 소개될 예정입니다.

13. BSD 유닉스 3화 – BSD 유닉스 시작

BSD 유닉스의 시작
1976년 켄 톰슨이 벨 연구소로 돌아가자, 빌 조이와 척 핼리는 유닉스 커널 내부를 직접 해킹하기 시작한다.

빌 조이: 음.. 유닉스 커널에서 이 부분을 개선하면 성능이 좋아질 것 같아.
척 핼리: 그래? 우리가 직접 커널을 고쳐보는 거야.

척 핼리: 그런데, 다른 대학에서 우리가 작업한 파스칼 컴파일러를 복사해달라고 하는데?
빌 조이: 그래? 그러면, 이번에 우리가 파스칼이랑 ex 에디터를 포함해서 제대로 유닉스 배포판을 만들어보자.

1977년 초, 빌 조이는 파스칼 시스템과 em 에디터에 비주얼 모드를 추가한 ex 에디터를 포함해서 배포판을 만들어 복사본 30여개를 발송하였다. 이것은 일종의 유닉스 확장판이였고 이름도 버클리 소프트웨어 배포판(BSD, Berkeley Software Distribution)였다.

빌 조이: 테이프를 30개나 복사해야겠네.

당시 BSD는 지금과 같은 자유 소프트웨어는 아니었지만, 이미 UNIX를 구매한 기관이나 개인에게 저장 매체와 배송비만으로 제공되었다.

빌 조이: 이미 유닉스를 라이선스를 갖고 있으면 테이프값과 배송비만 비용이 듭니다.

이 당시 빌 조이가 BSD 유닉스를 실비만 받고 무료로 제공한 이유는 당시 버클리 대학이 갖고 있는 자유 스피치 운동, 히피 문화, 반전 운동에 영향을 받았다고 한다. 물론 유닉스가 소스코드와 함께 거의 무료로 제공된 부분도 큰 역할을 했다.

두번째 배포판 2BSD
첫번째 BSD가 배포된 이후, 파스칼 사용자로 피드백을 받아 버그를 수정하였고, vi에디터(ex 에디터의 비주얼모드)와 C쉘을 포함해서 1979년 5월 75개의 2BSD를 배포하였다.

이 당시 빌 조이는 버그 수정 및 테이프 복사 및 발송 등 모든 일을 도맡아 했다.

가상 메모리 지원과 3BSD 탄생

친구: 리처드 페이트만 교수팀에서 VAX를 도입한데. 32 비트 컴퓨터인데, 메모리가 무려 1MB라네..
빌 조이: 그래? 거기에 유닉스를 설치하면 좋겠다.

친구: 이미 VAX용 유닉스(32/V)를 벨 연구소로 부터 받았데.

얼마 후, 빌 조이는 VAX에서 작업할 기회를 갖게 된다.

오잘프 바바로관루: 안녕하세요. 전 시스템학과 대학원생인 오잘프 바바로관루입니다. 지도 교수 요청으로 VAX용 유닉스에 가상 메모리를 구현하고 있는데, 코드 좀 한번 봐주시면 좋겠습니다.
빌 조이: 좋죠, 한번 코드를 봅시다.

VAX용 유닉스는 아직 가상 메모리를 지원하고 있지 않았는데, 오잘프가 개발하고 있는 컴퓨터 대수학 시스템(Computer algebra system)은 가상 메모리 기능을 반드시 필요로 했다.

오잘프 바바로관루: 연말인데 어디 안가나요?
빌 조이: VAX 사용자 별로 없을 때, 빨리 가상 메모리를 구현해야죠.

빌 조이: 자 이제 가상 메모리가 추가된 유닉스를 실행해볼까?

빌 조이: 된다. 이제 충돌없이 잘 동작하네요.

이후, 빌 조이는 32비트용 VAX에 맞게 2BSD에 추가된 vi 비롯한 각종 툴을 이식하고 가상 메모리 기능을 추가해서 1979년 12월 드디어 3BSD를 배포한다.

빌 조이: 드디어 32bit 버전 BSD를 발송하는구나.

3BSD는 명성은 정부 연구 기관에서 알려지고, 당시 미국 방위고등연구계획국(DARPA , Defense Advanced Research Projects Agency)은 모든 컴퓨터를 하나로 묶는 네트워크(ARPANET)를 구축하려는 계획을 갖고 있었는데, 그 운영체제로 버클리 대학에서 만든 3BSD를 주목하기 시작했다.

3화 끝. 다음에 계속…

참고 문헌

12. BSD 유닉스 2화 – vi 에디터의 탄생

11. BSD 유닉스 1화 – UC 버클리로 간 유닉스 코드

1975년 켄 톰슨은 모교인 버클리 대학에서 방문 교수로 안식년을 보내면서 최신 기기인 PDP-11/70에 유닉스 버전6를 포팅하고 있었다.

빌 조이: 앗, 저분이 유닉스를 만든 켄 톰슨이야. 우리가 뭔가 도울 일이 있을거야.
켄 톰슨: 저 친구들은 뭐지? 며칠 전부터 내 뒤를 졸졸 따라다니네.

PDP-11/70 기계실

빌조이: 저 교수님 저희가 도울일이 있을까요?
켄 톰슨: 드디어 나를 만나러 왔군요.

켄 톰슨: 하하, 할 일은 아주 많아요.

켄 톰슨: 내가 지금 파스칼 인터프리터를 좀 고치고 있는데, 도와줄 수 있겠나요?

빌 조이와 척 핼리: 물론이죠!

이후, 이들이 확장하고 개선한 파스칼은 컴파일 시간을 줄여주고 프로그램을 빠르게 실행시켜서 학생들에게 인기가 많았다.

VI 에디터의 탄생

당시 유닉스는 ed라는 에디터를 제공하고 있었다. 이는 1969년, 켄 톰슨이 유닉스를 개발할 때 추가한 최초의 에디터였다.

빌 조이: ed 에디터 사용하기 불편하지 않으세요?
켄 톰슨: 하하, 그게 텔레타입 터미널 쓰던 시절에 만든거라.. 난 아직 쓸만한데…

여기서 잠깐, ed 에디터로는 어떻게 문서를 편집할 수 있지?

다음은 ed 세션의 예제이다. 사용자가 입력한 명령어와 텍스트는 보통 글씨체로 되어있고, ed의 출력은 굵은 글씨로 표시되어 있다.

$ ed
A
ed is the standard Unix text editor.
This is line number one.
.
,2
This is line number one.
2s/one/two/
,2
This is line number two.
w text
62
Q
$ cat text
ed is the standard Unix text editor.
This is line number two.

a명령어는 ed 에디터를 입력 상태로 만들어준다. 위 문서 편집에서는 두 줄을 입력한 후, 새로운 줄에서 마침표를 입력하면 입력 상태가 종료된다. 입력한 글을 보려면 쉼표(,) 명령과 줄 번호를 입력하면 원하는 줄을 볼 수 있다. 두번째 줄에 one을 two로 바꾸려면, vi처럼 커서를 이동해서 바꾸는 것이 아니라, 치환 명령어인 s를 이용해서 위와 같이 잘못된 글자를 원하는 글자로 변경할 있다. w명령어를 입력한 내용을 파일로 저정한 후, Q명령어로 ed 에디터를 종료할 수 있다.

최종 결과는 다음의 문자를 포함하는 텍스트 파일이다:
ed is the standard Unix text editor.
This is line number two.

대표적인 텔레 프린터인 텔레타입 모델 33

ed에디터가 이렇게 만들어진 것은 1960년대 컴퓨터 메모리가 귀했고, 당시에는 지금과 같은 모니터가 아니라 종이에 출력을 프린트하는 텔레 프린터를 사용했기 때문이다. 모뎀 속도 역시 느렸다. 하지만, 1970년대 CRT 모니터가 달린 터미널이 보급된 이후에도 유닉스에서는 ed에디터가 계속 사용되고 있었다.

빌 조이: 모니터에서는 이렇게 편집할 필요가 없지.

어느 날,

척 핼리: 이봐 빌! 퀸 매리 대학에서 조지 쿨루리스 교수가 방문 중인데, 그 분이 만든 em편집기가 비디오 터미널을 지원해서 커맨드 라인 입력하듯이 입력 중인 줄은 바로 고칠 수 있다는데?
빌 조이: 그래, 바로 내가 원하는 기능이야.

조지 쿨루리스 교수: 학생이 찾던 em에디터 소스코드가 담긴 테이프입니다. 비디오 터미널을 어떻게 지원하는지 알 수 있을겁니다.
빌 조이: 고맙습니다. 교수님.

빌 조이: em에서 구현한 편집 코드를 ed에 붙여서 내가 원하던 전체 화면 비주얼 편집 모드를 만들어보자. 이름은 ex 에디터!

1977년 10월, 마침내 현재 우리가 사용하는 전체 화면 비주얼 편집 모드가 ex 에디터에서 구현되었다.

빌 조이: 비주얼 모드에서는 정말 코딩할 맛이 나네.

이후 BSD 유닉스 사용자들이 비주얼 편집 모드를 선호하게 되어 결국, vi라는 이름으로 비주얼 편집 모드가 바로 실행되도록 하였다. 참고로, 아직까지 vi에디터에는 ex모드를 지원하고 있다.

서해안 유닉스 사용자 그룹

켄 톰슨: 다들 유닉스 소스코드는 출력해왔지요?

켄 톰슨은 또한 유닉스를 가르치는 일에도 앞장섰다. 서해안 유닉스 사용자 그룹이라는 모임을 만들어서 밤마다 유닉스 커널 소스코드를 한줄 한줄 설명하였다. 이처럼 소스 코드를 공유하고 지식을 나누는 정신이 BSD 유닉스를 거쳐 훗날 자유/오픈소스 소프트웨어 운동에 영향을 주게 된다.

켄 톰슨: 이제 벨 연구소로 돌아갑니다. “Happy hacking!”
빌 조이: 교수님, 안녕히가세요~

2화 끝. 다음에 계속

참고 문헌

11. 자유로의 투쟁, BSD 유닉스 1화

1973년 SOSP(Symposium of Operating Systems Principles) 컨퍼런스

“이번 발표는 벨 연구소 켄 톰슨과 데니스 리치 연구원이 유닉스라는 새로운 운영체제를 소개하겠습니다.”

“유닉스는 여러 사용자가 동시에서 사용할 수 있는 대화형 운영체제입니다. 어셈블리어가 아닌 고급언어인 C언어로 개발했습니다.”

“C언어가 뭐야?”, “고급 언어로 OS개발이 가능하다고?”

Major Features

i. A hierarchical file system incorporating demountable volumes
ii. Compatible file, device, and inter-process I/O
iii. The ability to initiate asynchronous processes
iv. System command language selectable on a per-user basis
v Over 100 subsystems including a dozen languages
vi. High degree of portability

“유닉스에서 제공하는 다음과 같은 기능은 아직 대형 컴퓨터에서 조차 구현하지 못했습니다. 현재, PDP-11에서 잘 동작하고 있습니다. 이번 발표에서는 파일시스템 구현과 사용자 명령어 인터페이스를 설명하려고 합니다.”

참석자들: “웅성 웅성.. 정말 PDP-11에 저런 OS를 구현했단 말이지? 대단한데..”

발표가 끝나자,

밥 패브리: “저는 캘리포니아 버클리 대학 밥 패브리 교수입니다. 유닉스를 저희 대학에서 테스트해보고 싶은데, 복사본을 얻을 수 있을까요?”
켄 & 데니스: “연구 목적이라면 가능하겠죠? 그런데, PDP-11/45을 갖고 있나요?”

밥 패브리: “저희 학교에는 메인 프레임 한대밖에 없습니다. 조만간 구매할 계획이 있으니 확보가 되는 대로 다시 연락을 드리겠습니다.”

1974년 1월, 유닉스 버전4가 담긴 테이프가 버클리 대학에 도착한다.

대학원생: “교수님, 유닉스 테이프가 도착했어요.”
밥 패브리 교수: “어서 설치해 보게.”

대학원생: “계속 에러가 납니다”
밥 패브리 교수: 아무래도 켄 톰슨의 도움이 필요하겠는걸”

켄 톰슨은 모뎀을 이용해서 원격으로 유닉스 디버깅을 돕는다. 당시 버클리 대학에 설치된 PDP-11/45에는 하나의 디스크 컨트롤러에 두개의 디스크가 동시에 연결되어 있었는데, 유닉스가 이를 지원하도록 하였다.

“드디어 유닉스가 실행된다!”

버클리 대학에 설치된 유닉스는 전산과 학생들에게 인기가 많았지만, 수학과 통계학과 학생들과 함께 사용해야했기 때문에 사용 시간이 늘 부족했다.

결국, 1975년 새롭게 출시된 PDP-11/70 기종을 구매하게 된다.

교수: “켄, 우리 대학에서 드디어 PDP-11/70을 구매했네, 그동안 유닉스도 새로운 버전이 나왔을 텐데, 복사본도 보내주고 지난번 처럼 설치도 도와주면 좋겠어.”

켄 톰슨: “제가 때마침 모교에서 안식년을 쓸 계획을 갖고 있는데, 그 때 유닉스 버전6를 PDP-11/70에 포팅하면 좋을 것 같습니다.”

켄 톰슨은 1966년 버클리대학에서 전기공학 학위를 받았는데, 1975년 모교에서 방문 교수로 안식년을 보내기로 한다. 이때, 최신 기기인 PDP-11/70에 유닉스 버전6를 포팅하였고, 이것이 훗날 BSD 유닉스로 발전하게 된다. (다음에 계속…)

참고 문헌

참고로, 이번 만화는 버클리 유닉스의 20년 내용을 기반으로 작성하였습니다.

10. C언어의 아버지, 데니스 리치의 일생

자기가 만든 프로그래밍 언어로 운영체제를 개발한 사람.

1999년 데니스 리치의 집.

“Inferno가 자바와 경쟁하기에는 역부족인가?”

당시 데니스 리치 Inferno 운영체제Limbo라는 프로그래밍 언어 개발에 참여하고 있었다.

“따르릉”

“클린턴 대통령이 우리에게 National Medal of Technology 을 준다고? 축하해 톰, 귀찮게도 워싱턴에 가야할이 생겼네.”

켄 톰슨: “우리 너무 상을 많이 받는 거 아닌가?”

데니스 리치: “그러게, 난 사실 튜링상을 받은 것 만으로 만족스러운데..”

데니스 리치가 이렇게 과학자로서 성공하게 된 배경에는 벨연구소에서 연구원으로 일했던 아버지 영향을 많은 받은 듯 보인다.

1940년대 벨연구소

데니스 리치: “아빠는 무슨일을 해?”
아버지(Alistair E. Ritchie): “글쎄다. 아빠는 switching circuit theory을 연구하는데, 넌 아직 이해하기 어렵겠구나.”

“디지털 회로를 만들려면 많은 switch가 필요하지. 아빠는 지금 그에 관한 책을 쓰고 있단다.”

10여년 후,

데니스 리치: “아빠, 하버드 대학 합격증을 받았어요.”

아버지: “축하한다. 그래 물리학을 공부할지 수학을 공부하지 결정했니?”
데니스 리치: “글쎄요. 둘다 너무 재미있어서 당장은 결정하기 어려울 것 같아요.”

“수학도 좋고 물리학도 재밌고.”

1960년 경,

“컴퓨터?”
컴퓨터 특강! 마크I으로 컴퓨터 프로그래밍을 배우세요. 문의: …

“컴퓨터를 이용하면 수학계산을 빨리할수 있겠는걸?”

컴퓨터 특강 시간

데니스 리치는 이 당시 Univac 컴퓨터로 프로그래밍을 배웠는데, 아날로그 컴퓨터, 펀치 카드 사용법을 배우고 나서야 비로소 디지털 컴퓨터를 배웠다[2].

물리학과 학부 학생임에도 불구하고 데니스 리치는 컴퓨터에 더 많은 흥미를 갖기 시작한다.

교수: “자네는 물리학과 학생인데, 논문 주제가 전산 이론이….”
데니스: “결국, 수학에 관한 내용입니다.”

대학원 논문 주제도 지금의 전산학에 관한 내용(hierarchies of recursive functions)이였다. 대학에서 전산학이 제대로 된 학문으로 자리 잡기 전의 일이라서 아마도 응용수학으로 이러한 논문을 쓴 것 같다.

데니스 리치는 이론 보다는 실용적인 측면에 관심이 많았고, 3년 동안 그가 수강했던 컴퓨터 특강의 강사가 되어 컴퓨터를 가르쳤다[2].

 

데니스 리치가 컴퓨터를 가르칠 때는 IBM 7094를 사용했다[2].

1967년 벨연구소

벨연구소 연구원: “오, 자네가 리치의 아들인가?”
데니스 리치: “네, 저를 기억하시는군요.”

켄 톰슨: “안녕 데니스! 벨 연구소에 온 것 을 환영하네.
우리 팀은 다른 회사와 함께 멀틱스라는 새로운 운영체제를 공동 개발하고 있는데, 관심있나?”
데니스: “새로운 운영체제라고요? 재미있을 것 같아요.”

켄 톰슨: “그게 쉽지 않아. 특히, 여러 회사가 공동개발할때는…”

1969년 벨 연구소

데니스: “이제라도 멀틱스 프로젝트에서 빠지게 된 것은 다행이네요.

그런데, 전화 요금 계산에 필요한 운영체제는 이제 어떻게 만들까요?”
켄 톰슨: 걱정마, 내가 새로운 운영체제를 하나 만들고 있는데, 관심있어?”

데니스: 새로운 운영체제?

톰 켄슨은 멀틱스에서 몇가지 아이디어를 가져오고 만들던 코드를 기반으로 새로운 운영체제를 만들고 있었다.

1972년 벨 연구소

유닉스 개발 당시 PDP-11으로 컴퓨터가 업그레이드되었는데, 명령어가 호환되지 않아서 다시 어셈블리 코드를 작성해야했다. 데니스 리치는 톰 켄슨과 함께 개발한 B언어로 유닉스를 다시 개발하려는 시도를 한다[3].

켄 톰슨: “지금 뭐해?”
데니스: “우리가 예전에 만든 B언어로 유닉스를 다시 짜려고 하는데, 쉽지 않네. 아무래도 B언어를 많이 고쳐야할 것 같아.”

당시 B언어는 PDP-11의 최신 기능을 활용하지 못했는데, 이를 수정해서 C언어라는 이름으로 재탄생한다. 그리고, 1972년 유닉스를 다시 C언어로 개발했다[4].

“흐흐 더 이상 어셈블리어로 코딩을 하지 않아도 되네.”

“흐뭇~” “와 C언어 대박인데!”

유닉스와 C언어는 벨 연구소 내에서 사용되었고, 1975년 부터 외부에 라이센스되어 판매되기 시작했고, 대학과 각 기관에 보급되었다. 또한, HP, Sun Microsystems과 같은 회사에서도 유닉스 코드를 기반으로 한 자체 운영체제를 만들기 시작하면서 사실상 업계 표준으로 자리 잡기 시작한다.

C 프로그래밍 언어 책을 쓰다.

벨 연구소에 일하던 브라이언 커니핸은 새내 교육용으로 B언어 튜토리얼를 작성했다. 이후, B언어가 C언어로 업그레이드 되면서 자연스럽게 C언어 튜토리얼도 작성하게 된다.

브라이언 커니핸: “데니스, 내가 쓴 C튜토리얼 기억하지? 이걸 책으로 만들면 어떨까? 자네가 도와주면 더 좋고.”
데니스 리치: “좋은 생각인데!”

책표지, 이미지 출처: 위키피디아 (링크)

C 프로그래밍 언어 책은 1978년 첫판이 출간되었고, 1988년 2판이 출판되었다. 20개 언어로 번역되었고, 90년대까지 전산학을 전공한 학생이면 대부분 이 책으로 C언어를 공부했다.

분산운영체제 Plan9

“흠.. 유닉스 이후에는 어떤 운영체제를 만들어야 하나?”

벨 연구소는 유닉스의 후속으로 80년대 중반부터 Plan9이라는 운영체제를 개발하기 시작한다.

데니스 리치는 이미 Computing Techniques Research 부서를 이끌고 있었는데, 이 때 부터는 실제 개발 보다는 조언자로서 개발에 참여한다. 본인 말로는 급여를 승인하는 업무를 했다고 하는데, 일부 코드를 작성했음을 시인하기도 했다[5].

Plan9은 벨 연구소 내부에서 유닉스를 대치하시 시작했지만 외부에서 고객을 찾기는 쉽지 않았다.

벨 연구소는 1990년대 부터 네트웍 장비에 사용할 목적으로 Inferno라는 운영체제와 Limbo라는 프로그래밍 언어를 개발하기 시작한다. 다양한 네트웍 장비에 동작을 하기 위해 가상 기계를 도입했는데, Sun에서 개발한 Java와 비슷한 부분이 많았다.

동료: “선마이로시스템에서 Java를 발표했는데, Inferno와 비슷해. VM기반으로 동작하고.”
데니스: “응, 들었어.”

벨연구소장: “데니스, Plan9과 마찬가지로 Inferno도 세일즈 마켓팅팀에서 노력했지만 고객을 많이 찾지는 못했네. 아무래도 프로젝트를 다른 회사에 넘겨야겠어.”
데니스: “인수할 회사가 나타나서 다행이네요.”

데니스 리치가 개발에 참여하고 조언을 했음에도 불구하고 벨 연구소가 유닉스 후속으로 개발한 Plan9과 Inferno는 시장에서 성공적이지 못했다. 마케팅의 실패 등 여러가지 이유가 있겠지만, 근본적으로 유닉스가 여전히 쓸만했기 때문에, 다른 OS를 도입할 이유를 찾기 어려웠다. 여기서 에릭 레이먼드는 본인이 쓴 책에서 Plan9를 예로 들면서 이러한 말을 남겼다[6]

“야심적인 시스템 설계자를 위한 교훈이 있습니다. 새로운 솔루션의 가장 위험한 경쟁자는 충분히 좋은 기존 코드 베이스입니다(There is a lesson here for ambitious system architects: the most dangerous enemy of a better solution is an existing codebase that is just good enough).”

Plan9에서 나온 /proc, utf8, clone 등 몇 가지 아이디어는 다른 유닉스와 리눅스에 적용되기도 했다.

2007년 은퇴

팀원: “은퇴하게 되어 너무 아쉬워요.”
데니스: “드디어 은퇴군, Plan9과 Inferno가 성공스럽지 못해서 좀 아쉽지만, 이제 좀 여행을 즐겨야겠어.”

동료: “요즘 건강은 어때? 지난번 전립선 암 수술 이후, 너무 말랐어.”
데니스: “ㅎㅎ 걱정마. 아직까지도 흥미로운게 너무 많아.”

동료:” 데니스하고 통화가 안되는데, 아무래도 집에 가봐야겠어.”

죽음

“이봐 데니스!”

혼자 살고 있던 데니스 리치는 2011년 10월 12일 뉴저지 주 버클리 헤이츠에 있는 집에서 숨진채로 발견되었다[1].

“이렇게 큰 일을 했는데, 이 친구 너무 조용하게 살았어.”
“그래도, 자기가 만든 프로그래밍 언어로 운영체제까지 만든 사람은 아무도 없을거야…:”

참고문헌

[1] 데니스 리치, 위키피디아 한글페이지
[2] Interview with Dennis Ritchie
[3] https://en.wikipedia.org/wiki/C_(programming_language)
[4] https://en.wikipedia.org/wiki/Unix
[5] 데니스 리치 홈페이지: https://www.bell-labs.com/usr/dmr/www/chist.html
[6] http://www.catb.org/esr/writings/taoup/html/plan9.html

본 만화에 나오는 대화는 실제 대화가 아니고 사실을 기반으로 하여 약간의 상상력으로 구성한 것임을 알려드립니다. 혹시 만화 내용 중 틀린 부분이 있으면 답글로 알려주시면 감사하겠습니다.

9. 유닉스 철학

IT 기술은 하루가 다르게 변화 발전해왔다. 하지만, 유닉스 만큼은 만들어진 40여년이 지났지만, 그 철학과 코드는 유닉스를 모태로 한 운영체제에 살아있다.

안드로이드에서 사용되는 리눅스 커널과 아이폰과 맥에서 사용되는 맥OS도 그 중 하나이다.

이 외에 유닉스 호환 운영체제인 미닉스도 유닉스의 설계 철학을 따라 만들어졌다. (더 자세한 가계도는 위키피디아를 참고)

“어떻게 유닉스는 지금까지도 사용되고 있을까?”

그 해답을 찾기 위해서는 유닉스 철학을 알필요가 있다. 물론, 처음 유닉스를 만들때는 거창한 철학 이런거는 없었다.  굳이 물어본다면,

“간단하고 멍청하게 하자” [1]

“아니, 농담이 아니라 진짜 철학을 설명해주세요.”

“그냥 만들었는데…”

켄 톰슨(Ken Thompson)으로 부터 유래된 유닉스 철학은 최소화되고 모듈화된 소프트웨어 개발 방식에 대한 개발 문화의 기준과 철학적 접근 방식을 말한다. 이는 유닉스 선두 개발자들이 얻은 경험을 근간으로 하고 있다[1].

“그래도 잘 모르겠네.”

공식적으로는 1978년 더글러스 맥클로이(Doug McIlroy)에 의해 문서화되었다[1].

  1. 각 프로그램이 하나의 일을 잘 할 수 있게 만들 것. 새로운 일을 하려면, 새로운 기능들을 추가하기 위해 오래된 프로그램을 복잡하게 만들지 말고 새로 만들 것.
  2. 모든 프로그램 출력이 아직 잘 알려지지 않은 프로그램이라고 할지라도 다른 프로그램에 대한 입력이 될 수 있게 할 것. 무관한 정보로 출력을 채우지 말 것. 까다롭게 새로로 구분되거나 바이너리로 된 입력 형식은 피할 것. 대화식 입력을 고집하지 말 것.
  3. 소프트웨어를, 심지어는 운영 체제일지라도 이른 시기에 수주에 걸쳐 이상적으로 시도해가며 설계하고 만들 것. 어설픈 부분을 버리고 다시 만드는 것을 주저하지 말 것.
  4. 프로그래밍 작업을 가볍게 하기 위해, 심지어 우회하는 방법으로 도구를 만들고 바로 버릴지라도 어설픈 도움 보다는 도구 사용을 선호할 것.

그리고 나중에서 피터 사루스(Peter H. Salus)가 다시 한번 요약하였다.[2]

  • 한가지를 일만 잘 하는 프로그램을 만들 것.
  • 다른 프로그램 함께 동작할 수 있는 프로그램을 만들 것.
  • 텍스트 스트림을 처리할 수 있는 프로그램을 만들 것. 왜냐면, 그것이 범용 인터페이스이기 때문이다.

이처럼, 유닉스는 마치 레고 블록 처럼 프로그램간의 입출력을 서로 연결해서 내가 원하는 기능을 쉽게 만들도록 하였다. 무엇보다도 어셈블리어가 아닌 C언어와 같은 고급 언어(high level language)로 만들어져 다른 컴퓨터로 이식이 쉬웠다.

“물론, 또 다른은 이유가 있는데, 그것은 불법복제? 이 이야기는 기회가 되는데로 나중에 이야기하기로…”

“비밀” (유닉스 소스코드가 담긴 테이프)

[1] https://ko.wikipedia.org/wiki/유닉스_철학
[2] https://en.wikipedia.org/wiki/Unix_philosophy

8. 유닉스와 C언어

1960년대 MIT에서 ITS(Incompatible Timesharing System)가 한창 개발되고 있는 동안, 미 동부의 다른 곳에서도 해커의 기운이 물씬 풍기는 곳이 있었는데, 바로 벨 연구소(AT&T Bell Laboratories)였다. 여기서 앞으로 세상을 바꿀 유닉스와 C언어가 개발되고 있었다.


공교롭게도 멀틱스(Multics) 개발에 참여하던 사람들이 나와  ITS와 유닉스를 만들기 시작했는데, 벨연구소 소속인 켄 톰프슨데니스 리치도 멀틱스 개발에 참여하고 있었다.

켄톰슨: 이제 멀틱스 개발에 손을 떼야할 것 같아. 데니스리치: 예상 보다 일정이 지연되고 있어.

멀틱스 프로젝트는 1964년 시작되었으나 코드 크기가 커지고 복잡도가 높아지면서 벨연구소에서 예상했던 것 보다 일정이 많이 지연되고 있었다.

벨연구소: 우리는 내부 일정을 맞추기가 어려워 프로젝트에서 손을 땝니다.
결국, 벨연구소는 1969년 멀틱스 개발에서 손을 뗀다.

벨연구소에 돌아온 톰 켄프슨은 멀틱스 개발 경험을 토대로 새로운 운영체제를 혼자 만들기 한다.

톰켄슨: 데니스, 내가 새롭게 운영체제를 만들고 있는데, 멀틱스에 좀 아이디어를 가져오고 좀 더 단순하게 만들어 보려고. 데니스: 좋은 생각인데, 나도 관심있어.

톰 켄프슨은 멀틱스에서 개발한 주요 기능을 유닉스에서 다시 구현했다.

우선 멀틱스에서 미리 구현해 본 파일 시스템을 PDP-7에 적용했고, 데니스 리치도 개발에 참여했다. 개발이 어느 정도 궤도에 오르자, 팀이 꾸려지고 이들은 파일시스템, 프로세스 모델, 디바이스 파일, 커맨드 라인 해석기 등, 오늘날 우리가 사용하는 운영체제 기능을 PDP-7에서 처음으로 구현하기 시작했다.

그후, PDP-11이 도입되었는데, 유닉스는 어셈블리어로 개발되어 다시 코드를 짜야했다.

데니스: 켄, PDP-11이 새로 들어왔는데, 여기에 유닉스를 포팅하면 어떨까? 켄톰슨: 좋은 생각인데, 문제는 어셈블리어 코딩을 다시 해야한다는 거지.

켄톰슨: 드디어 포팅 끝~~~ 데니스: 이봐, 톰 매번 새 컴퓨터가 나올 때 마다, 매번 코드를 다시 짤 수는 없잖아

켄톰슨: 그래, 데니스 우리 B언어로 유닉스를 다시 만들어볼까? 데니스: 좋은 생각인데, PDP-11정도면 B언어로 유닉스를 포팅할 수 있을거
B언어는 1969년 역시 켄 톰프슨과 데니스 리치가 함께 멀틱스에서 사용하기 위해 개발한 프로그래밍 언어였다.
데니스 리치: 우선 B언어를 PDP-11에 포팅해야 하는데 문제가 있네.

1971년 데니스 리치는 B언어에 문자 타입을 추가하고 컴파일러를 다시 작성해서 PDP-11 기계어를 생성하도록 했다[3].
톰켄스: 데니스  B언어 포팅은 잘되가? 데니스 리치: 문제가 많아. 우선 PDP-11에서는 문제 데이터 타입에 접근하기가 어려워. 다른 새기능을 사용할 수 없고.
톰 켄프슨: 하하, 이번 기회에  B언어를 싹 뜯어 고치는거야. 데니스 리치: 다시 짜야할지도로 모르는데..

1973년에 기본적인 기능이 구현되었고, 이름을 C언어로 불렀다. B의 다음 버전이라서 그냥 C언어로 부르게 되었다.

데니스리치: C언어로 부르면 어떨까? 톰슨: 우와 잘 동작하는데?

데니스 리치는 같은 해에 C언어로 유닉스를 다시 작성하기 시작한다.

C언어에 데이터를 정의할 수 있는 구조체 타입(structure type)을 추가하였다. 이제, C언어는 유닉스 커널을 작성할 수 있을 정도록 강력해졌다.

이처럼 유닉스와 C언어는 켄 톰프슨과 데이니 리치에 의해 짧은 기간에 탄생했지만, 오늘날까지도 핸드폰을 비롯한 대부분의 컴퓨터가 유닉스를 기반으로 동작하고 있다. 또한, 현재도 운영체제 커널은 C언어로 개발되고 있다.

참고
[1] https://en.wikipedia.org/wiki/Unix
[2] https://en.wikipedia.org/wiki/History_of_Unix
[3] The Development of the C Language
[4] The Evolution of the Unix Time-sharing System