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화 – UC 버클리로 간 유닉스 코드

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 유닉스로 발전하게 된다. (2편에서 계속…)

참고 문헌

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