은퇴하며 40년 넘게 쌓은 소스 코드를 공개
(dunfield.themindfactory.com)- 한 개발자가 은퇴를 계기로 40년 넘게 축적한 소스 코드를 공개해, 오래된 시스템·도구·개인 프로젝트를 직접 살펴볼 수 있게 함
- 공개 범위는 ARM용 멀티 프로세스/태스크 커널, 6809 CPU용 운영체제, Altair 1980 시기의 초기 OS 등 운영체제와 커널까지 포함함
- Micro-C Compiler, 크로스 어셈블러, 디스어셈블러, 8052 에뮬레이터, 디버거처럼 저수준 개발 도구도 함께 제공됨
- DOSBox, DOS 유틸리티, 파일 동기화, ZIP 처리, 설치 패키지 생성, 텍스트 편집기 등 PC 작업용 유틸리티가 폭넓게 공개됨
- 아마추어 무선, RS-232 적외선 리모컨, Ethernet TTY, X10 제어, DVD 1500장을 읽기 위한 로봇 등 개인 하드웨어 프로젝트까지 포함돼 보존 가치가 큼
공개 목적과 안내 문서
- 은퇴를 계기로 “내가 작성한 것들”에 해당하는 40년 이상 축적된 소스 코드를 공개함
- 공개 목적은 다른 사람들이 이 코드를 유용하게 쓰거나, 일부를 통해 배울 수 있게 하는 데 있음
- 공개 페이지가 함께 안내하는 문서:
운영체제, 커널, 가상머신, 시뮬레이션
- ARMOS: ARM용 멀티 프로세스/태스크 커널
- CUBIX: 6809 CPU용 운영체제
- DMF: Altair 1980 시기의 초기 OS
- DVM: Dunfield Virtual Machine
- SIMSYS: Altair, D6809, H8, Horizon, Mod8 관련 시스템
- MONITORS: 여러 임베디드 프로세서용 모니터
- 8051ICE: EMILY를 사용하는 인서킷 에뮬레이터
- EMILY52: 8052 에뮬레이터
컴파일러, 어셈블러, 디버거, 개발 보조 도구
- MICRO-C: Micro-C Compiler
- MCSAMPLE: Micro-C 예제 프로그램
- XASM: 크로스 어셈블러와 도구
- DISASM: 크로스 디스어셈블러
- DMS: Dunfield MicroScope 디버거
- DESMO: Debug Scripting Monitor
- DDSIDE: Dunfield Development Systems IDE
- BLDTOOL: 빌드 작업을 돕는 도구
- PUBSRC: 공개 소스 섹션 유지 관리 도구
- HFC: Help File Compiler
- ESL: Extensible Script Language
DOS, 파일, 디스크, 편집, 패키징 유틸리티
- DBBD: DosBox 부팅 플로피 디스크
- DBUTIL: DosBox 유틸리티
- DD_DBSRC: DosBox 소스 코드 트리
- DOSUTIL: 여러 DOS 유틸리티
- FDI: Floppy Disk Image
- IMDSRC: ImageDisk
- EDT: EDT 텍스트 편집기
- ELF: 긴 파일명 편집 도구
- FTOOLS: 파일 작업용 여러 도구
- SYNC: 두 디렉터리 트리 동기화
- ZDIR: ZIP 내부 파일 나열과
touch - MAR: 설치 파일을 압축하던 MicroARchiver
- MKPKG: 단일
.exe패키지 설치 파일 생성 - ESP: 실행 파일 문자열 패치
- PT: PaperTape 도구
- MICROCAD: 매우 작은 CAD 드로잉 프로그램
하드웨어, 통신, 제어, 개인 프로젝트
- DARC: Dunfield Amateur Radio Controller
- HTX242: RS HTX-242 아마추어 트랜시버 제어
- ICOMCIV: 아마추어 무선용 ICOM CI-V 인터페이스 코드
- IR232: RS-232 직렬 적외선 학습 리모컨
- ETTY: Ethernet TTY
- SNIFF: Ethernet 스니퍼
- DLM: Data Line Monitor
- ITS: Interactive Terminal Switch
- DDLINK: COM, LPT, NET 파일 전송용 DavesDataLink
- SERCNCT: 하나의 COM 포트에서 여러 장치 전환
- DBOX: Sony VCR 컨트롤러
- DVDROBOT: DVD 1500장을 읽기 위해 만든 로봇
- EPROM: EPROM 프로그래머
- 8031DWG: 8031 기반 설계 샘플
- X10CTRL: PC에서 X10 장치 제어
- RINGSW: 전화선 distinctive ring 스위치
- PC100: VT-100 터미널 에뮬레이터
- LABTOOLS: 여러 실험실/테스트 도구
- CAM: 발달장애 아동용 프로젝트
- MACMON: 아이들의 네트워크 사용 모니터링/로그
- TRANZTCL: Verifone TRANZ PointOfSale 개발 도구
댓글과 토론
Hacker News 의견들
-
DOSUTIL.ZIP을 훑어보니 단순하고 우아한 C 프로그램들이 정말 좋음
상당수가 표준 C#include를 1~2줄만 쓰고, C 코드 2만 줄에#if가 24개뿐이라는 점도 인상적임
이런 코드베이스를 읽은 경험이 Cosmopolitan Libc 작업을 시작할 때 영감이 됐음- 빌드 대상이 하나뿐이면
#if매크로를 많이 줄일 수 있음 - 예전 C 컴파일러는 현대 C 컴파일러라면 제대로 잡아낼 온갖 잘못을 그냥 넘어가 줬음
- Rust 쪽에서는 단일 라우트가 있는 간단한 HTTP 리스너를 작성했는데, Cargo가 빌드하려고 의존성 105개쯤을 끌어왔음
그래도 동일 비교를 하자면use문은 2개뿐이긴 함 - 반대로 C에서 매크로만으로 구현한 해시 테이블도 있음. 꽤 멋짐: https://troydhanson.github.io/uthash/
- 빌드 대상이 하나뿐이면
-
STYLE.TXT의True=7관례가 낯설었음
저수준 코드와 하드웨어 경험 때문에 “저수준에서 잘못될 수 있는 것을 최소화”하려고, C에서0==FALSE,!0==TRUE인 점을 이용해1대신7을 참으로 쓰기도 했다는 내용임
1비트 차이보다 3비트 차이가 낫다는 습관적 선택인데, 실제로 그런 1비트 하드웨어 오류면 시스템 대부분이 망가질 테니 본인도 어리석다고 인정함
예전에는 무작위 비트 뒤집힘이 조건문을 망치는 일이 흔했는지 궁금함- 설령 그런 일이 있었다 해도 모든 조건문을 3상 불리언처럼 생각할 수는 없음
실패 중에도 어느 분기가 안전하게 실행된다고 가정할 건지, 각 조건의 비트 수를 세고 1이 0보다 많으면 참으로 볼 건지, 오류 정정 없이 비트가 뒤집혔다고 로그를 남기거나 운영자에게 알릴 건지까지 정해야 함
오류 검출 부호가 쓸모 있는 곳은 있지만, 참을 7이라고 정하는 것만으로는 부족함 - 저자도 사실상 어리석은 습관이라고 인정했고, 오히려 의도가 덜 명확해진다고 봄
그래도 스타일 문서를 읽는 건 즐거웠고, 이렇게 전부 공개해 둔 점이 좋았음. 누군가에게는 분명 딱 맞는 도구가 있을 것 같음 - 직렬 데이터 라인이 동작하는지 확인할 때는
0xA5(1010 0101)를 써서 약간 변형된 교대 비트열을 보냄
한 번에 최대한 많은 고장 가능성을 확인하려는 방식임 - 그런 걱정을 할 정도라면
TRUE=7은 진짜 해결책이 아님
불리언 변수라면if (var == TRUE),else if (var == FALSE), 그 외 값일 때 무엇을 할지 모든 조건마다 처리해야 하고, 그 처리 코드 자체도 충돌하지 않아야 함
게다가 비트 뒤집힘은switch에 쓰는 변수나if (i > 17)같은 조건, 포인터, 스택의 반환 주소, 코드 자체에도 영향을 줄 수 있음
기껏해야 매우 부분적인 해결책이고 구현도 사소하지 않으니 표준 관례라고 보기는 어려움 - 흔한 문제라기보다는 “일어날 수도 있으니 쉬운 곳에서는 막아보자”에 가까움
개인적으로는-1을 썼을 것 같음
- 설령 그런 일이 있었다 해도 모든 조건문을 3상 불리언처럼 생각할 수는 없음
-
예전 코드를 제대로 보관하지 않은 게 너무 아쉬움
첫 비 trivial 프로그램이던 스네이크 게임, 어셈블리로 만든 첫 유틸리티, Centronics 프린터용 첫 장치 드라이버, 대학 과제로 숙취가 심한 상태에서 한 시간 만에 Pascal로 만든 영구 달력까지 전부 사소하고 보관할 가치가 없다고 여겼음
결국 1990년대 후반 이전 코드는 하나도 남아 있지 않음. 어린 개발자들은 자기 코드를 잘 보관해야 함- 요즘 아이들은 Git과 여러 호스팅 허브를 쓰니 코드가 사라지는 일이 드물다는 점에서, 이 문제는 우리 세대만 겪을 듯함
물론 이런 “무료” 서비스가 내려가면 문제가 되니 셀프 호스팅도 쓸모가 있음 - 예전 코드는 많이 남아 있지만 너무 민망해서 다시 보고 싶지 않음
- 나도 비슷함. DOS 스프레드시트 프로그램도 만들었고, modeX 차트와 수식도 있었고, 게임 몇 개와 바이러스 몇 개도 만들었음
당시에는 TSR이 마법처럼 보였음. 아마 어머니 집 지하실의 플로피 디스크 어딘가에 있을지도 모름
- 요즘 아이들은 Git과 여러 호스팅 허브를 쓰니 코드가 사라지는 일이 드물다는 점에서, 이 문제는 우리 세대만 겪을 듯함
-
저자가 2019년에 거의 죽을 뻔했던 일을 회고한 글도 읽을 만함: https://dunfield.themindfactory.com/2019.htm
- 강렬했음. 2015년에 심장마비를 겪어 심장 90%가 손상된 장인이 떠올랐음
검사 결과가 너무 나빠서 어떤 의사는 진료 중 언제든 죽을까 봐 치료를 거부했을 정도였음
그런데 지금도 살아 있고 평범하게 지내며 매주 토요일 해변에서 달리기도 함. 검사 결과는 나아지지 않았고 늘 숨이 차지만, 그냥 죽기를 거부하는 사람 같음
링크 속 의사가 말한 “서류에 적힌 것보다 훨씬 좋아 보인다”와 비슷함 - 의사들이 왜 저러는지 궁금함
글에서 “아이들을 안고, 자기 침대에서 자고, 식사를 하고, 손으로 조금 일하는 것”조차 다 부정당했다는 대목이 있었는데, 아버지가 백혈병과 폐렴으로 호전되지 않고 호흡관을 떼지 못할 때도 의사들이 똑같이 평생 장애가 남을 거라고 강하게 말했음 - 이상하게도 H. P. Lovecraft의 The Shadow Out of Time이 떠오름
- 암울하지만 결국 해피엔딩처럼 보임
- 강렬했음. 2015년에 심장마비를 겪어 심장 90%가 손상된 장인이 떠올랐음
-
정말 좋음. 언젠가 비슷한 일을 해보고 싶다는 생각을 여러 번 했음
조부모에게 유산을 받는 것과 비슷함. 진짜 보석과 신기한 물건이 잡동사니와 쓰레기 사이에 섞여 있겠지만, 그 전체가 풍부하고 흥미로운 삶을 산 실제 사람들의 이야기를 보여줌
몇몇 하이라이트만으로는 그 삶을 제대로 담아낼 수 없음- 왜 은퇴한 뒤에만 해야 함? 지금 바로 하면 안 되나?
- 40년 동안 프로그래밍하며 만든 것들을 좀 남겨뒀으면 좋았겠지만, 새 직장으로 옮길 때마다 전부 두고 왔음
다행히 90년대 후반에 만든 상용 메모리 할당기는 남아 있음. 단일 스레드이고 Metrowerks CodeWarrior와 구 MacOS만 지원했지만 Mac에서 가장 빠르고 버그 없는 할당기였음
MacOS X가 나오면서 쓸모없어졌고, 지금 누가 관심을 가질지는 모르겠음
어제 말했듯 Trapeze 소스 코드는 잃어버렸음(https://en.wikipedia.org/wiki/Trapeze_(spreadsheet_program)). 나중에 아무도 신경 쓰지 않을 때 공유하려고 내 작업물을 보관한다는 생각을 해본 적이 없었던 것 같음
-
정말 멋짐. 내 코드 이력이 나중에 보일 모습과 비교하면 꽤 순수한 코드처럼 느껴짐
2040년에 내 코드는 “요즘 아무도 안 쓰는” 라이브러리와 프레임워크를 잔뜩 사용한 흔적을 보여줄 것 같음
좋고 나쁨의 문제가 아니라 시대의 반영일 뿐임- 그 의존성들을 직접 보관해두지 않으면, 나중에는 아무도 코드를 제대로 읽거나 빌드하지 못할 수 있음
오늘날 유행하는 개발 관행은 놀랄 만큼 일시적이고 취약함. 지금 프로젝트 중 방치된 채 10년을 버틸 만한 것도 거의 없고, 40년은 더더욱 어려움 - 이런
pip install과npm install은 전부 쓸모없어질 것임
- 그 의존성들을 직접 보관해두지 않으면, 나중에는 아무도 코드를 제대로 읽거나 빌드하지 못할 수 있음
-
가장 영향력 있는 유틸리티는 ImageDisk라고 봄
IBM PC를 이용해 다양한 종류의 컴퓨터에서 나온 플로피 디스크를 보존하는 데 쓰였고, bitsavers.org와 archive.org에 있는 많은 옛 소프트웨어가 이 도구로 복구됐음 -
Vernor Vinge의 A Deepness in the Sky에는 수천 년 뒤의 인류 사회가 나오는데, 거의 모든 소프트웨어는 이미 작성되어 있고 문제는 그것을 찾는 것뿐임
그래서 프로그래머-고고학자들이 아카이브를 뒤지고, 필요하면 에뮬레이터 안의 에뮬레이터 안의 에뮬레이터에서 코드를 실행함: https://garethrees.org/2013/06/12/archaeology/
당신도 내일이든 5,000년 뒤든 누군가가 혜택을 볼 보물 더미에 기여한 셈임- 현대, 즉 먼 미래의 달력이 인류 최초의 달 착륙을 기준으로 한다고 흔히 생각하지만 실제로는 Unix Epoch를 기준으로 한다는 대목을 Vinge를 좋아하는 엔지니어들이 특히 좋아함
-
은퇴 직전 마지막 버그 수정이라는 농담으로, micro-cad를 보려 했더니 404가 남
URL: https://dunfield.themindfactory.com/dnld/sc/MICROCAD.ZIP
기대한 동작은.zip파일을 내려받을 수 있는 것임MCSAMPLEzip에 전체가 같이 들어 있는 것 같음- 나도 같은 404를 만났음. 원본 CAD 프로그램은 많지 않아서 이걸 꼭 보고 싶음
-
훌륭함. 특정 언어나 자동화 작업을 할 때 항상 곁에 두는 개인적인 “바이블”들을 몇 개 쌓아왔고, HN에서 배운 정리 방식도 꽤 있음
다만 내 사고 과정에 너무 개인적이고 특화된 느낌이라 공개할 생각은 해본 적이 없었음
그런데 이런 자료들을 보고 나니 영감을 받음. 정말 멋진 아이디어이고, 가능하다면 은퇴 프로젝트에 감사의 뜻으로 금전 후원도 하고 싶음- 여기서 말하는 “바이블”이 정확히 무엇인지 궁금함
그리고 어떤 정리 방식을 배웠는지도 알고 싶음. 다른 사람들의 생산성 팁이나 소프트웨어를 배우는 데 늘 관심이 있음 - 나도 이런 바이블이 꽤 있음
관심 있다면 파일을 서로 교환해보고 싶음. 당신 자료에서 배울 게 많을 것 같음. 내 Gmail 사용자명은 HN 사용자명과 같음
- 여기서 말하는 “바이블”이 정확히 무엇인지 궁금함