POOOLING FOREST
50년 전의 '유물'에서 배우는 코드의 역사: Unix V4 테이프 분석기 - 50년 전의 유물 Unix V4 자기테이프 복원 소식을 통해, 레거시 코드가 갖는 역사적 의미와 우리가 코드
Culture & Philosophy

50년 전의 '유물'에서 배우는 코드의 역사: Unix V4 테이프 분석기

50년 전의 유물 Unix V4 자기테이프 복원 소식을 통해, 레거시 코드가 갖는 역사적 의미와 우리가 코드를 대하는 태도에 대해 이야기합니다.

송찬영

CTO

안녕하세요. 풀링포레스트 CTO 송찬영입니다.

개발자로서 가장 가슴 뛰는 순간은 언제일까요? 저는 말끔하게 리팩토링된 코드를 볼 때도 좋지만, 컴퓨터 과학의 역사가 담긴 '원전'을 마주할 때 묘한 전율을 느낍니다. 최근 유타 대학교에서 1970년대의 Unix Fourth Edition(V4) 자기테이프가 발견되어 복원되었다는 소식을 접했습니다. 지금까지 V4는 매뉴얼만 남아있고 실제 코드는 유실된 것으로 알려져 있었기에, 이는 단순한 발견이 아니라 잃어버린 고리를 찾은 것과 다름없습니다.

이 소식을 접하고 바로 Diomidis Spinellis가 공개한 초기 분석 리포트를 정독했습니다. 오늘은 그 내용을 바탕으로, 우리가 '레거시(Legacy)'라고 부르는 코드들이 사실은 어떤 의미를 갖는지 이야기해 보고자 합니다.

전설의 귀환, 그리고 C 언어의 여명기

Unix V4는 1973년 11월, 벨 연구소(Bell Labs)에서 탄생했습니다. 이 버전이 기술사적으로 중요한 이유는 커널의 상당 부분이 어셈블리어에서 C 언어로 재작성된 시점이기 때문입니다. 현대 운영체제의 기틀이 바로 여기서 잡혔다고 해도 과언이 아닙니다.

Spinellis 교수는 발견된 테이프의 덤프 파일에서 바이너리를 제거하고 소스 코드만을 추려 GitHub의 'Unix History Repository'에 통합하는 작업을 진행했습니다. 이 과정이 참으로 흥미롭습니다. 그는 단순히 파일을 복사해 넣은 것이 아니라, 과 파일 타임스탬프를 이용해 마치 고고학자가 유물을 복원하듯 커밋 히스토리를 재구성했습니다.

저자 정보가 불분명한 파일에는 그 유명한 (Ken Thompson과 Dennis Ritchie) 태그를 붙였습니다. 이 대목에서 저는 우리가 풀링포레스트에서 작성하는 커밋 메시지 하나하나가 훗날 우리 시스템의 역사가 된다는 사실을 새삼 깨달았습니다.

V4인가, V5인가? 데이터로 증명하는 역사

복원 과정에서 재미있는 논쟁이 있었습니다. "이 테이프의 내용이 진짜 V4가 맞는가? 혹시 초기 V5 아닌가?"라는 의문이었죠. 당시에는 소프트웨어 배포라는 개념이 지금과 달라서, 테이프는 그저 당시 연구실 컴퓨터의 상태를 복사한 스냅샷에 불과했기 때문입니다.

Spinellis 교수는 이를 검증하기 위해 감에 의존하지 않고, 철저하게 데이터 기반의 분석을 시도했습니다. , , 같은 전통적인 유닉스 툴을 활용해 파일 목록을 비교하고, 을 통해 코드 라인의 기원을 추적했습니다.

분석 결과는 명확했습니다.

  • 파일 차이: (C로 작성된 compare 유틸리티) 등이 V5에서 새로 등장했습니다.

  • 코드 비중: V5 코드의 약 5만 2천 라인이 V4에서 유래했지만, 1만 1천 라인의 새로운 코드가 추가되었습니다.

  • 타임스탬프: V4의 파일 평균 날짜는 1974년 3월, V5는 1974년 11월이었습니다.

약 8개월의 시차. 지금의 스타트업 속도로 치면 엄청난 기간이지만, 당시 시스템의 진화 속도를 고려하면 V4는 분명히 V5로 넘어가기 위한 독자적인 가교 역할을 하고 있었음을 증명해 낸 것입니다.

'레거시'를 대하는 우리의 태도

이 분석 과정을 지켜보며 저는 최근 풀링포레스트 내부에서 겪었던 일이 떠올랐습니다.

얼마 전, 저희 팀의 한 주니어 개발자가 입사 초기 작성된 레거시 코드를 보며 힘들어했습니다. "CTO님, 도대체 이 코드는 왜 이렇게 짜여 있나요? 구조가 엉망이에요." 솔직히 말해, 저도 그 코드를 처음 봤을 땐 막막했습니다. 하지만 을 따라가 보니, 그 코드는 회사가 생존을 위해 일주일 만에 서비스를 런칭해야 했던 시기에 작성된 것이더군요.

Unix V4가 V5의 밑거름이 되었듯, 그 '엉망인 코드'가 있었기에 지금의 풀링포레스트가 존재할 수 있었습니다. V4의 어셈블리 코드가 C로 대체되었다고 해서 어셈블리 코드의 가치가 사라지는 것은 아닙니다. 그것은 그 시대의 최선이었고, 다음 단계로 나아가기 위한 필수적인 발판이었습니다.

우리는 종종 과거의 코드를 '기술 부채'라고 부르며 청산의 대상으로만 여깁니다. 하지만 Spinellis 교수가 V4 테이프를 복원하며 보여준 존중의 태도는 우리에게 다른 시각을 제안합니다. 코드는 정적인 텍스트가 아니라, 끊임없이 진화하는 유기체라는 사실입니다.

맺음말

우리가 오늘 작성하는 코드도 언젠가는 '고대 유물'이 될 것입니다. 50년 뒤 누군가가 우리의 Git 저장소를 열어보았을 때, 단순히 "코드가 낡았네"라고 생각하기보다 "이 치열한 고민 덕분에 지금의 기술이 있구나"라고 느꼈으면 좋겠습니다.

이번 주에는 팀원들과 함께 코드 리뷰를 할 때, 단순히 로직의 오류를 찾는 것을 넘어 "왜(Why)" 이 코드가 탄생했는지, 그 맥락을 주석이나 커밋 메시지에 남기는 문화를 조금 더 강조해 볼 생각입니다. Ken Thompson과 Dennis Ritchie가 남긴 유산이 우리에게 영감을 주듯, 우리의 코드도 누군가에게 영감이 되길 바라면서요.

감사합니다.

지금 읽으신 내용, 귀사에 적용해보고 싶으신가요?

상황과 목표를 알려주시면 가능한 옵션과 현실적인 도입 경로를 제안해드립니다.