
45년 전 코드를 다시 만나다
1980년에 Tim Paterson이라는 프로그래머가 Seattle Computer Products라는 회사에서 86-DOS(나중에 MS-DOS의 원형이 되는 운영체제예요)를 만들었어요. 이게 마이크로소프트에 인수되면서 IBM PC의 운영체제로 채택됐고, 결국 Windows 제국의 출발점이 됐죠. 그 역사적인 코드의 원본 프린트물을 한 줄 한 줄 옮겨 적어서 GitHub에 공개한 프로젝트가 바로 DOS-History/Paterson-Listings예요.
흥미로운 건 이게 "디지털 파일이 발견됐다"가 아니라 종이로 출력된 어셈블리 코드를 사람이 손으로 다시 타이핑해서 복원했다는 점이에요. 당시에는 코드를 도트 매트릭스 프린터로 뽑아서 바인더에 보관하는 게 일반적이었거든요. 하드디스크는 비싸고 백업 매체도 불안정했으니까 종이가 가장 믿을 만한 저장소였던 거죠. 그 프린트물이 수십 년 동안 살아남았다가 이제서야 디지털화된 셈이에요.
코드를 들여다보면 보이는 것들
DOS 1.0은 8086 어셈블리어로 작성됐어요. 어셈블리어가 뭐냐면, 기계어(0과 1로 된 CPU 명령)를 사람이 읽을 수 있게 살짝 추상화한 거의 가장 낮은 수준의 프로그래밍 언어예요. MOV, ADD, JMP 같은 짧은 명령어들로 메모리와 레지스터를 직접 조작하는 거죠. 요즘 우리가 쓰는 Python이나 JavaScript에서는 상상도 못 할 수준의 세밀한 컨트롤이 필요해요.
전체 운영체제가 고작 4000줄 정도의 어셈블리 코드로 이뤄져 있다는 게 진짜 놀라워요. 비교하자면 요즘 "Hello World" 수준의 React 앱도 빌드하면 수백 KB가 나오잖아요. DOS 1.0은 디스크 I/O, 파일 시스템, 명령어 해석기, 메모리 관리를 모두 합쳐도 그 정도였어요. 물론 기능이 단순하긴 했지만, 그 제약 안에서 PC라는 새로운 시장을 열었다는 게 대단한 거죠.
파일 시스템은 우리가 지금도 가끔 마주치는 FAT(File Allocation Table) 의 초기 버전이에요. USB 메모리 포맷할 때 "FAT32"라는 옵션 보신 적 있죠? 그 FAT의 조상이 여기 들어있어요. 디렉토리도 없고 파일 이름도 8.3 형식(예: README.TXT처럼 이름 8자, 확장자 3자)으로 제한됐지만, 이 단순한 구조가 너무 견고해서 SD카드, USB 같은 작은 저장 장치에서 지금도 쓰이고 있어요.
디지털 보존이라는 작업
이런 프로젝트가 중요한 이유는 소프트웨어 역사가 의외로 쉽게 사라진다는 거예요. 종이는 잘 보관하면 수백 년 가지만, 디지털 데이터는 매체가 바뀔 때마다 옮겨주지 않으면 10년도 못 가서 읽을 수 없게 돼요. 5.25인치 플로피, ZIP 드라이브, 옛날 광디스크에 담긴 코드들이 지금 얼마나 남아있을까요? 운 좋게 매체가 살아남아도 그걸 읽을 드라이브가 없으면 무용지물이고요.
그래서 컴퓨터 역사 박물관(Computer History Museum)이나 Internet Archive 같은 곳에서 옛날 소스코드 보존 작업을 꾸준히 해왔어요. 마이크로소프트도 몇 년 전에 MS-DOS 1.25와 2.0의 소스를 GitHub에 공식 공개한 적이 있고, 애플도 Apple II DOS의 소스를 공개했어요. 이번 Paterson Listings는 그것과는 다르게 마이크로소프트 인수 이전의 86-DOS 시점을 보여준다는 점에서 가치가 있어요. "DOS가 어디서 시작됐는가"의 진짜 출발점인 거죠.
업계 맥락에서 보면
요즘 같은 시대에 어셈블리어로 짠 운영체제가 무슨 의미가 있을까 싶을 수도 있어요. 하지만 시스템 프로그래머들에게는 여전히 교과서 같은 자료예요. 임베디드 개발(작은 칩에 들어가는 펌웨어 만드는 일)이나 OS 커널 공부할 때, 이렇게 작고 명확한 코드베이스가 오히려 가르치기 좋거든요. Linux 커널 소스는 너무 거대해서 어디부터 봐야 할지 모르겠지만, DOS 1.0 정도면 한 사람이 며칠 만에 전체를 읽을 수 있어요.
비슷한 결의 보존 프로젝트로 Xerox Alto(GUI의 시조), Unix v6(현대 OS의 뿌리), Lisp Machine 같은 게 있어요. 이런 코드들을 읽다 보면 "왜 지금 우리가 이렇게 코딩하고 있는가"의 역사적 맥락이 보여요. 예를 들어 우리가 매일 쓰는 C: 드라이브 표기법이 왜 C부터 시작하는지(A와 B는 플로피용으로 예약돼 있었어요), 왜 Ctrl+C가 프로그램을 중단시키는지 같은 게 다 이 시대의 흔적이거든요.
한국 개발자에게 주는 시사점
당장 실무에 쓸 일은 없을 거예요. DOS 1.0 어셈블리를 알아야 하는 자리는 거의 없으니까요. 하지만 두 가지는 가져갈 만해요.
첫째, 본질을 아는 즐거움이에요. 우리가 매일 쓰는 추상화 아래에 뭐가 있는지 한 번쯤 들여다보면 시야가 넓어져요. "파일을 연다"는 게 OS 입장에서 어떤 일인지, 인터럽트가 왜 필요한지 같은 걸 직접 코드로 보면 그 다음부터는 디버깅할 때 보이는 게 달라져요. 한 번에 다 이해할 필요는 없어요. 가끔 시간 날 때 한 페이지씩 읽어보는 것만으로도 충분해요.
둘째, 우리 프로젝트의 보존에 대해 생각해볼 기회예요. 지금 회사에서 만든 코드가 10년 후에도 빌드 가능할까요? 의존하는 라이브러리, CI 환경, 빌드 도구가 모두 살아있어야 하잖아요. 정말 중요한 코드라면 의존성을 최소화하고, README에 빌드 방법을 명확히 적어두고, 가능하면 핵심 로직은 외부 의존성 없이 동작하게 만드는 것도 미래의 디지털 보존에 도움이 돼요.
마무리
결국 이 프로젝트의 가치는 소프트웨어가 단순한 코드가 아니라 문화재라는 인식에 있어요. 우리가 일하는 디지털 세상의 뿌리를 추적할 수 있다는 건 후대 개발자들에게 큰 선물이 될 거예요.
여러분이 지금 만들고 있는 코드 중에 "45년 후에 누군가가 읽어볼 가치가 있는 것"이 있다면 어떤 게 떠오르세요?
🔗 출처: Hacker News
"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"
실제 수강생 후기- 비전공자도 6개월이면 첫 수익
- 20년 경력 개발자 직강
- 자동화 프로그램 + 소스코드 제공