프로그래밍 언어

램슨이 손을 댄 언어는 참으로 다양하다. 우선 그는 버클리 시절에 피터 도이치와 함께 SRI(Stanford Research Institute)의 더그 엥겔바트를 도운 적이 있다. 이때 그는 CDC 3100 컴퓨터용으로 스노볼SNOBOL 언어 처리기를 구현했으나 완성하지는 못했다.​1​

지니 프로젝트 과정에서는 Cal과 QSPL 언어를 개발했다. Cal은 수치연산을 위한 대화형 언어로 클리프 쇼의 JOSS라는 언어를 변형한 것이었고, QSPL은 시스템 프로그래밍 언어로써 벨연구소에서 개발한 L6 언어를 피터 도이치와 함께 개선한 것이었다.

1960년대는 아직도 어셈블리어를 사용해서 시스템 프로그래밍을 하던 시절이었다. 따라서 시스템 프로그램을 위한 고급 언어에 대한 욕구가 컸다. 1969년에 BCC에서 램슨은 도이치와 함께 SPL이라는 언어를 만들었다. 이것은 BCPL을 개선한 것이었다.​§§​

알토 컴퓨터를 개발하면서 램슨은 메사Mesa라는 새로운 언어도 준비했다. 메사는 파스칼 언어와 같은 계열이면서 여러 개의 파일로 쪼개서 프로그램을 개발할 수 있었다. 램슨은 메사 언어의 확장 버전인 시더Cedar 언어와 모듈라Modula-2+ 언어 개발에도 참여했다.​¶¶​

한편, 그는 증명이 가능한 언어에도 관심을 가졌다.​2​ 그가 제록스 팔로알토 연구소 시절에 참여했던 Euclid 언어는, 작성된 프로그램 소스 코드를 보면 원래 기대했던 결과가 만들어질지를 증명하는 것이 목표였다.

네트워크

이더넷은 제록스 팔로알토 연구소가 개발한 또 하나의 기념비적인 산출물이다. 이더넷의 발명자로는 밥 멧칼프​##​가 유명하다. 그런데 놀랍게도 이더넷 특허 신청서에 보면 공동 발명자 중에 버틀러 램슨이 포함되어 있다.

찰스 시모니와 나는 당시 사용되고 있던 ARPANET의 근거리 버전을 만드는 프로젝트를 시작했습니다… 우리는 상당히 설계를 진행했지만 실제 동작하는 수준까지는 이르지 못했습니다. 그리고 다행스럽게도 밥 멧칼프가 이더넷이라는 아이디어를 들고 나타났죠. 그것은 근사했습니다. 나는 좀 참견했습니다. 사실 특허에 이름이 올라갈 정도로 참견했습니다. 하지만 내가 뭘 했는지는 기억할 수가 없군요.​2​

1980년대에 DEC으로 자리를 옮긴 후에 그는 낸시 린치와 함께 TCP 연결 설정에 관한 정식 명세서 작업 및 증명 작업을 하기도 했다.​3​

디스플레이

디스플레이와 관련해서 램슨 스스로는 별로 기여한 바가 없다고 겸손하게 인정했다.

나는 한 가지 작은 기여를 했습니다. 그것은 비트맵 값을 메모리에서 읽어서 화면에 뿌리는 데 걸리는 마이크로 사이클 개수를 일곱 개에서 여섯 개로 줄인 것입니다. 듣기에는 별거 아닌 것 같습니다만, 전체 화면을 놓고 생각해 보면 30~40퍼센트 정도 더 빨라졌습니다. 왜냐하면 (알토) 컴퓨터가 대부분의 시간을 화면 표시하는 데 사용했기 때문입니다.​2​

하지만 실제로는 비트맵 방식의 디스플레이에 영감을 준 것이 램슨이 론 라이더와 함께 개발한 RCG 기계였다. 이것은 레이저 프린터를 위해 만든 기계였는데, 레이저 프린터로 보낼 신호를 만들기 위해서 하나의 출력 이미지를 비트맵 방식으로 메모리에 올려놓는 방식이었다. 후에 RCG 기계를 이용해서 앨런 케이 팀이 그래픽 디스플레이를 시연했고 이것이 비트맵 방식의 디스플레이 개발로 이어졌다.​5​

문서 편집기

램슨은 찰스 시모니와 함께 브라보Bravo라는 응용 프로그램을 개발했다. 브라보는 일종의 문서 편집기였고 후에 찰스 시모니는 마이크로소프트로 자리를 옮긴 후에 마이크로소프트 워드 프로그램의 개발을 이끌었다.

브라보는 흔히 말하는 위지위그WYSIWYG 워드 프로세서 프로그램의 시초이다. 이것이 가능했던 이유는 알토 컴퓨터가 그래픽 인터페이스를 제공했기 때문이다.

하지만 브라보가 오늘날의 문서 편집기와 완전히 동일하게 동작하지는 않았다. 사용자가 원하는 문서의 모양이 화면에 그대로 표현되기는 했지만, 실제 편집을 하려면 모드mode 변경이라는 과정을 거쳐야 했다. 문서 편집기의 특성상 키보드에 있는 문자키를 누르면 해당 문자가 문서에 입력되어야 한다. 따라서 키보드의 문자키를 명령어 용으로 사용하기가 쉽지 않다. 그래서 키보드의 문자키가 명령어 용으로 사용될 수 있게 문서 편집기의 상태를 바꿀 필요가 있고, 이것을 모드 변경이라고 불렀다. 그러다 보니 키보드의 문자키가 상황에 따라서 일반 문자일 수도 있고 아니면 명령어가 될 수도 있어서 일반인이 사용하기에는 매우 까다로웠다. 이 당시 마우스는 단지 커서를 이동시키거나 블록을 지정하는 용도로만 사용되었다. 우리에게 익숙한 ‘Ctrl+C’, ‘Ctrl+V’와 같은 식의 편집 명령이 나온 것은 집시Gypsy부터이다. 제록스 팔로알토 연구소에서 개발한 집시는 스몰토크와 매킨토시의 그래픽 사용자 인터페이스에 큰 영향을 주었다.


브라보에서 구조적으로 가장 유명한 것은 조각 테이블piece table이다. 램슨이 이 아이디어를 낸 이유는, 문서를 간결하게 구조화할 수 있다고 생각했기 때문이었다. 문서가 문장의 집합이라고 생각해 보자. 그렇다면 각 문장은 하나의 조각이 되고 이 조각을 모아 놓은 것이 문서가 된다. 그런데 문서는 이 조각들을 그냥 순서대로 저장하지 않는다. 조각들은 생성된 순서대로 테이블에 저장되고, 문서는 조각들의 테이블 행 번호값을 저장한다. 만약 문서에서 문장 두 개의 순서가 바뀐다면 문서에 저장된 조각의 테이블 행 번호값의 순서를 바꾸면 된다.

마이크로소프트 워드는 이 조각 테이블을 사용하고 있고 이를 이용해서 되돌리기Undo 기능을 구현했다.​1​

보안

보안이라고 하면 흔히, 외부의 악의적 공격으로부터 시스템을 보호하는 것으로 이해할 때가 많다. 하지만 좀 더 넓게 생각하면 보안은 여러 가지 발생 가능한 상황에서 시스템을 ‘보호’하는 것을 의미한다.

램슨이 시스템 ‘보호’에 관심을 가지게 된 것은, 시분할 시스템의 특성 때문이었다. 시분할 시스템에서는 여러 개의 프로세스들이 돌아가면서 수행되는데 어떤 프로세스가 다른 프로세스의 자원을 잘못 건드려서는 안 되었다. 최초의 시분할 시스템이라고 할 수 있는 CTSS에서는 메모리에 대한 보호가 고려되었다. 어떤 프로세스가 사용하고 있는 메모리에 대해서 다른 프로세스가 쓰기 작업을 한다면 곤란했으므로, 각 프로세스가 사용하고 있는 메모리 영역에 대해 다른 프로세스는 접근할 수 없도록 보호하는 하드웨어적인 기능이 추가되었다.

그런데 시분할 시스템이 발전하면서 다양한 상황이 펼쳐졌고 무조건 막는 것이 능사는 아님을 깨닫게 되었다. 예를 들어, 어떤 파일의 경우는 여러 프로세스에 의해 ‘공유’될 수 있으므로 어떤 프로세스가 그 파일을 사용하고 있다고 해서 다른 프로세스의 접근을 완전히 ‘불허’하는 것은 바람직하지 못했다.

그래서 램슨은 Cal TSS를 개발하면서 ‘능력capability‘이라는 개념을 구현하려 노력했다. 하지만 실질적으로 구현하기가 어려움을 경험했고 이를 대체하기 위해 ‘접근 행렬access matrix이라는 방식을 제안했다. 접근 행렬이란, 주체domain – 예를 들어 프로그램 또는 프로세스 – 들을 행에 놓고, 객체object – 예를 들어 파일, 메모리, 입출력 장치 – 들을 열에 놓은 후에 행과 열이 만나는 지점에는 접근 권한에 대한 정보를 저장하는 거대한 행렬이다.​7​

파일 1파일2장치1장치2
프로세스1읽기/쓰기읽기읽기
프로세스2읽기실행하기읽기
프로세스3쓰기실행하기쓰기읽기
접근 행렬의 예

DEC에서는 동료들과 함께 디지털 분산시스템 보안 구조Digital Distributed System Security Architecture를 만들었으며 마이크로소프트 시절에는 TPM 개발에 중요한 역할을 했다.​2​

1 2 3 4 5