Lobsters

The Story of Mel

멜의 이야기

Ed Nather가 1983년에 쓴 글로, 기계어만으로 프로그램을 짜고 드럼 메모리의 회전 타이밍까지 맞춘 프로그래머 멜의 일화를 들려줍니다. 명령어 주소를 직접 수정해 반복문을 만들고 주소 오버플로를 분기 명령으로 활용한 사례가 중심입니다.

AI 요약

Ed Nather는 1983년 USENET에 이 글을 올렸습니다. 당시 “진짜 프로그래머는 FORTRAN으로 코딩한다”는 주장에 맞서, 더 오래된 컴퓨터 시대에는 기계어로 직접 프로그램을 썼다고 회고합니다. 글의 주인공 멜은 Royal McBee Computer Corp.에서 일하며 LGP-30용 블랙잭 프로그램을 기계어로 작성했습니다. 회사는 새 컴퓨터 RPC-4000용으로 프로그램을 다시 만들고 있었고, Nather는 FORTRAN 컴파일러를 맡아 멜에게 새 기계를 배웠습니다.

드럼 메모리에 맞춘 명령어 배치

RPC-4000은 회전식 드럼 메모리를 사용했습니다. 각 명령어에는 연산 코드와 피연산자 주소뿐 아니라 다음에 실행할 명령어의 위치도 들어 있었습니다. 명령어를 메모리 아무 곳에나 배치하면 드럼이 회전해 해당 위치가 읽기 헤드 아래로 올 때까지 기다려야 했습니다. 멜은 한 명령어의 실행이 끝나는 순간 다음 명령어가 헤드에 도착하도록 위치를 직접 정해 대기 시간을 줄였습니다.

기계어 명령어의 숫자값을 모두 알고 있던 멜에게는 명령어 자체도 숫자 상수였습니다. 필요한 숫자값을 가진 기존 명령어를 골라 연산에 재사용하기도 했습니다. 멜은 반복문의 안쪽부터 작성해 빠른 메모리 위치를 먼저 차지했고, 최적화 어셈블러보다 빠른 코드를 만들었습니다. 출력 장치인 Flexowriter가 문자 사이에 지연을 요구할 때도 대기 반복문을 넣지 않았습니다. 대신 다음 명령어가 읽기 헤드를 막 지나간 위치에 오도록 배치해 드럼이 한 바퀴 더 돌게 했습니다. 멜은 이처럼 가장 오래 기다리게 되는 위치를 “most pessimum”이라고 불렀습니다.

주소 오버플로를 이용한 반복문

블랙잭 프로그램을 고친 뒤, 영업 부서는 콘솔 스위치를 켜면 고객이 이기도록 확률을 바꿔 달라고 요청했습니다. 멜은 부정직한 변경이라며 거부하다가 결국 코드를 작성했지만, 조건을 거꾸로 넣었습니다. 스위치를 켜면 프로그램이 매번 이기도록 바뀌었습니다. 멜은 이를 고치지 않았습니다.

멜이 회사를 떠난 뒤 Nather는 해당 조건을 찾아 수정해 달라는 요청을 받았습니다. 코드를 살피다 검사 조건이 전혀 없는 반복문을 발견했습니다. RPC-4000에는 인덱스 레지스터가 있었지만 멜은 이를 쓰지 않았습니다. 대신 실행 중인 명령어를 레지스터로 가져와 주소를 1 증가시킨 뒤 저장하고, 수정한 명령어를 레지스터에서 실행했습니다. 데이터가 메모리의 가장 높은 주소 근처에 놓여 있었으므로 마지막 데이터를 처리한 뒤 주소를 증가시키면 오버플로가 발생했습니다. 이때 자리올림이 연산 코드까지 전달돼 다음 연산 코드인 점프 명령으로 바뀌었습니다. 점프 명령은 주소 0에 놓인 다음 프로그램 명령어로 이어졌습니다. 별도의 반복 조건 없이도 반복문을 빠져나오는 방식이었습니다.

Nather는 결국 문제의 조건을 찾아내지 못했다고 보고했고, 멜의 코드를 고치지 않았습니다. 그가 회사를 떠날 때도 특정 스위치를 켜면 블랙잭 프로그램은 계속 속임수를 썼습니다. 글의 덧붙임에서 Nather는 원래 산문으로 올린 글이 인터넷을 거치며 자유시처럼 바뀌었다고 설명합니다. 글 자체도 네트워크에서 ‘해킹’된 셈이라고 덧붙입니다.

Lobsters 반응

  • @drmorr — 많은 사람이 전에 봤겠지만, 저는 이번에 처음 접한 것 같아 신선하고 즐겁습니다. 전에 본 분들도 비슷하게 느끼면 좋겠습니다. 수정: 검색해 보니 이 글이 여기 올라온 건 이번이 처음은 아니고, 가장 최근 게시물은 8년 전이네요.
    • @hoistbypetard — 이제 이 이야기 속 프로그래머에 관한 짧은 글들도 즐겨 보실 수 있겠습니다.
    • @masklinn — 이 글은 ‘500마일 이메일’, ‘OpenOffice가 목요일에 인쇄하지 않는다’ 같은 고전과 나란히 놓이는 이야기입니다. https://beza1e1.tuxen.de/lore/index.html 에 몇 편을 모아 두었습니다.
    • @WilhelmVonWeiner — ‘500마일 이메일’은 떠오를 때마다 웃게 합니다. 정말 멋진 이야기입니다.
    • @JaDogg — 맞습니다. AI 시대에는 우리의 열정이 뒤틀리고 억지로 주입되는데, 이 이야기는 신선합니다.
  • @hjvt — 《The Daily WTF》의 ‘The Inner JSON Effect’가 《보이지 않는 위협》이라면, 이 이야기는 《새로운 희망》 같네요.

원문: Ed Nather / 번역·요약: Trawling