2P by GN⁺ | ★ favorite | 댓글 1개
  • DMR 테이프의 s1/s2를 포렌식 분석해 동작 가능한 UNIX 시스템을 구성했으며, s1은 커널이 든 UNIX INIT DECtape이고 s2는 배포 파일 대부분을 담고 있음
  • s1 커널은 현재까지 확인된 가장 이른 기계 판독 가능한 UNIX 커널로, V1과 V2 사이에 있으며 V1·V2 a.out을 모두 실행할 수 있음
  • 사용자 코어 크기는 V2처럼 16 KiB(8K words) 로 늘었지만, syscall table은 V1 및 unix-jun72 커널과 같아 V2 syscall은 포함되지 않음
  • 부팅 조건이 까다로워 aap의 PDP-11/20 에뮬레이터만 커널 부팅에 성공했고, SIMH와 Ersatz-11은 login prompt 전에 멈춤
  • 공개된 RF 디스크 이미지는 s1/s2 파일만 포함하며 aap 에뮬레이터에서 부팅 가능하고, init(7)의 동작상 /usr가 RF에 있었던 것으로 보임

s1/s2 테이프에서 복원한 UNIX V2 “Beta”

  • DMR 테이프를 포렌식 분석한 결과, s1/s2 테이프에서 작동 가능한 시스템을 만들 수 있었음
    • DMR tapes는 분석 대상이 된 테이프 묶음임
    • s1 tape는 커널을 담은 UNIX INIT DECtape
    • s2 tape는 배포 파일 대부분을 포함함
  • s1 커널은 현재까지 확인된 가장 이른 기계 판독 가능한 UNIX 커널로, V1과 V2 사이에 위치함
    • 수정되지 않은 unix-jun72 커널은 V1 a.out만 지원함
    • s1 커널은 V1과 V2 a.out을 기본으로 모두 실행할 수 있음
    • 사용자 코어 크기는 8 KiB(4K words)에서 16 KiB(8K words) 로 증가함
  • syscall table은 V1 및 unix-jun72 커널과 같음
    • V2 syscall은 포함하지 않음
    • syscall 측면에서는 V1에 가깝고, 코어 크기와 V2 바이너리 실행 측면에서는 V2 특성이 있어 “V2 beta”로 간주됨
  • 시스템에서 ed, cc, a.out 실행이 가능함
    • 예시 세션에서는 hello world! 프로그램을 작성·컴파일·실행함

부팅 제약과 RF 디스크 이미지

  • 부팅 가능한 환경은 제한적임
  • 원래 설치 과정은 s1에서 부팅한 뒤 s2에서 파일을 복원하는 방식임
    • aap 에뮬레이터는 TC11을 지원하지 않아 s1/s2 테이프에서 직접 설치하기 어려움
  • 실제 구성은 RF 디스크 이미지를 우회적으로 만드는 방식으로 진행됨
    • s1 tape의 파일을 추출해 빈 RF 디스크에 배치함
    • unix-jun72 커널을 설치한 뒤 SIMH에서 RF로 부팅함
    • s2의 나머지 파일을 추출함
    • 마지막에 hex editor로 unix-jun72 커널을 s1 커널로 교체함
  • 생성된 RF 이미지는 s1/s2에서 온 파일만 포함함
    • Research-UNIX-V2-Beta에서 받을 수 있음
    • s1s2unix_rf.img 직접 다운로드 링크가 제공됨
    • 이 이미지는 aap 에뮬레이터에서는 부팅되지만 SIMH에서는 부팅되지 않음
  • init(7) 프로그램은 RK를 /usr에 마운트하지 않음
    • 이 동작은 /usr가 RF에 저장되어 있었음을 시사함

댓글과 토론

Hacker News 의견들
  • Brian Kernighan 강연에서 들은 농담이 떠오름. Ken Thompson이 3주 만에 텍스트 편집기, B 컴파일러, 입출력 파일 관리 골격을 만들었고, 그게 결국 UNIX가 됐다는 이야기였음
    농담의 핵심은 요즘 우리는 그때보다 조금 덜 효율적이라는 것임

    • Ken은 확실히 최상급 프로그래머이고, 그런 사람이 3주 동안 집중할 수 있으면 정말 많은 걸 할 수 있음
      아내가 아이들을 데리고 영국에 가서, Ken이 원하는 걸 마음대로 할 수 있었다고 기억함. 물론 첫 UNIX를 쓰기 전부터 이미 경험도 아주 많았음
      머릿속에 프로젝트가 있는 프로그래머라면 한 번 해볼 만함. 3주 동안 오두막 같은 곳에서 일과 가족을 떠나, 필요한 책과 문서를 챙기고 인터넷을 끊어보는 것임. 가능하면 피처폰을 쓰고, 얼마나 멀리 갈 수 있는지 보는 방식임
      다만 이미 충분히 생각해두고 약간의 코드도 써둔 프로젝트여야 함. 더 생각해보니 외부 라이브러리에 거의 의존하지 않는 저수준 프로젝트가 이런 실험에 가장 잘 맞음. 서드파티 라이브러리 더미에 기대는 프로젝트라면 인터넷 없이 문제가 생겼을 때 막히기 쉽고, Ken도 적절한 프로젝트를 고른 셈임
    • 인터뷰는 여기 있음: https://www.youtube.com/watch?v=EY6q5dv_B-o
      한 시간짜리이고 Thompson이 재미있는 이야기를 많이 함. Kernighan은 Thompson이 말하도록 잘 놔두는 역할을 훌륭히 해냄
    • 요즘식 농담으로는 Ken Thompson이 Rob Pike, Robert Griesemer와 함께 C / C++ 컴파일을 기다리다가 Go를 설계했다는 게 있음
    • 초기 UNIX 개발자들이 어떻게 이런 수준의 생산성에 도달했는지 궁금함
      9시부터 5시까지 일하듯 했던 건지, 아니면 삶의 다른 부분을 제쳐두고 끝내기 위해 고블린 모드로 들어갔던 건지 알고 싶음
    • 프로젝트 기능의 처음 80% 는 정말 빨리 진행되기도 함. 특히 흥미가 있고 동기가 강할 때 더 그렇다
      하지만 남은 20%는 긴 꼬리처럼 이어지고, 대개 엄청난 고역이 되어 의욕을 꺾어버림
  • 스팍도 감탄할 만큼 흥미로움. Mac에서 PDP-11 에뮬레이터를 컴파일하는 법을 배워보고 싶음

    • 에뮬레이터 컴파일은 꽤 쉬움. simh를 보면 됨. 이식성이 좋아서 거의 바로 동작할 것임
      그다음에는 2.11BSD 배포판 설치를 시도해보면 좋음. 문서화가 잘 되어 있고 초기 Unix의 많은 혼란이 지나간 뒤 나온 것임. 이후에는 RT-11을 가지고 노는 것도 아주 재미있었고, 실제로 작은 앱도 몇 개 작성해봄
    • https://opensimh.org/
      Apple Silicon에서도 잘 동작함
    • 금속탐지기로 종교 유물을 찾아낸 순간 같은 느낌임
    • 너무 쉬움! NAND 게이트로 직접 하나 만들겠음
  • 정말 좋음
    사람들이 실제 작업에 ed를 쓰는 걸 처음 봄
    또 누가 ed를 다뤄야 했는지도 궁금함. 최근에 vi가 없는 아주 오래된 시스템에 접속해야 해서 직접 편집기를 만들었고, 고대 시스템용 편집기가 필요한 사람이 있으면 연락해도 됨. 아주 화려하진 않음
    이 소프트웨어를 만든 사람들과 연구자들의 작업이 놀랍고, 진짜 엔지니어들에게 존경을 보냄

    • 1960년대에 Honeywell 시분할 시스템에서 Teletype ASR-33을 통해 ed 비슷한 편집기를 썼던 기억이 있음
      자세히는 기억나지 않지만 새 파일을 만들 때 make 로 실행했음. make love를 입력하면 편집기에 들어가기 전에 not war를 출력했음
    • ed는 아니지만 분명히 영향을 받은 것으로, MS-DOS 3.3의 edlin으로 타자 학교 시험을 볼 만큼 나이가 있음
      그 뒤로는 다시 쓴 적이 없고, 몇 년 뒤 Xenix를 쓸 수 있게 됐을 때도 ed는 안 썼음. vi가 훨씬 제정신인 대안이었음
    • 8월에 휴대폰의 Termux에서 ed를 써서 http://canonical.org/~kragen/sw/dev3/justhash.c를 작성했음
      누군가 Android 화면 키보드가 vi에 너무 끔찍해서 휴대폰에서 ed를 쓴다고 했고, 실제로 맞는 말이라 시도해봄. 휴대폰에서는 ed가 vi보다 조금 더 나빴지만, 둘은 서로 다른 방식으로 나쁨
      HeliBoard 기준으로 키보드에서 ed 명령을 입력하는 건 vi보다 훨씬 쉬웠지만, 몇 번은 vi라면 헷갈리지 않았을 버퍼 상태 때문에 혼란스러웠음. 연습하면 나아질 수도 있겠지만 결국 vi로 돌아감
    • 90년대 중반에 AT&T 3B2가 있었는데 거기에는 ed만 있었고, DEC VT-102 터미널로 사용했음
      ed는 동작하긴 하지만 현대 기준으로는 재미가 없음. 그래도 텔레타이프 출력과 비교하면 화면에서 쓰는 건 엄청났을 것임
      덧붙이면 약 1 MIP짜리 3B2가 동시 사용자 약 20명을 감당할 수 있었음
    • 초기 컨설팅 일 중 하나가 Coherent 시스템용 ed 튜토리얼을 쓰는 것이었음
      ed를 자주 쓰고, 사실 어제도 썼음. 화면을 지우지 않고 뭔가를 편집해야 했기 때문임
      그보다 전에는 디스크에 저장된 카드 이미지를 위한 편집기도 만들었는데, 아주 원시적이었음
  • 가끔 tuhs 메일링 리스트를 둘러보는 걸 좋아함. Ken Thompson, Rob Pike 같은 이름과, 덜 알려졌지만 초기 UNIX와 컴퓨팅 현장에 참여했던 여러 이름을 보는 게 멋짐

  • 소프트웨어 고고학 같음

    • SaaS 시대가 싫은 여러 이유 중 하나가, 이런 일이 다시는 일어나지 않을 거라는 점임. 2075년에 누군가 연구나 향수를 위해 오래된 Notion이나 Figma를 부팅하는 일은 없을 것임
      소셜 미디어에서 생산되고 소비되는 문화나 인터넷 문화의 다른 많은 모습처럼 완전히 일시적이고 일회용임. 역사도 없고 미래도 없음
      SaaS는 단순히 닫혀 있는 수준이 아니라, 사실상 문자 그대로 단일 설치본에 묶여 있는 경우가 많음. 보관해서 다른 곳에서 부팅할 수는 있겠지만, 원래 팀 없이 수년 뒤에 그렇게 하는 일은 현대 PC의 에뮬레이터에서 1972년 Unix를 부팅하는 것보다 훨씬 큰 작업이 됨
      그 Unix에는 매뉴얼이 있었고, 여러 배포 환경에 설치하고 실행되도록 설계됐음. SaaS는 작성자만 배포할 수 있는 잡탕에 가까운데, 반드시 의도 때문은 아니고 그렇게 만들도록 압박하는 진화적 힘이 없기 때문임
      내부적으로 다른 SaaS와 얽혀 있는 경우도 많아서, 마치 독점 소프트웨어가 제자리에서 편집되고 있는 하나의 전역 컴퓨터처럼 클라우드 전체 상태를 보관하고 복원해야 할 수도 있음
    • 들리는 것만큼 멋진 일은 아님
  • 저 파일 권한들이 무슨 뜻인지 참고 자료를 줄 수 있는 사람이 있을까? 대충 짐작은 되지만 찾아봐도 Unix v2 권한에 관한 내용을 못 찾았음
    ls 출력은 익숙해 보이는데, sdrwrw 부분만 낯섦

    • 메일링 리스트 스레드에 누군가 추출한 매뉴얼 페이지를 링크해뒀음
      https://gitlab.com/segaloco/v1man/-/blob/master/man1/stat.1?...
      sdrwrw에서 첫 번째 열은 s 또는 l이고 small 또는 large를 뜻함. 두 번째 열은 d, x, u, -로 디렉터리, 실행 가능, setuid, 없음이라는 뜻임. 나머지는 소유자와 비소유자의 읽기/쓰기 비트임
  • hello world가 1328바이트라니? 비대화됐네!

    • 예전에 장난 삼아 모든 바이너리에 긴 시를 넣던 컴파일러가 떠오름. 매직 넘버는 들어봤겠지만, 그건 매직 소네트가 있었던 셈임
      초기 Rust 컴파일러였다고 생각했는데 관련 자료를 못 찾겠음. Go였을지도 모름
      수정: 찾았음. 'rust-lang/rust#13871: "hello world" contains Lovecraft quotes' https://github.com/rust-lang/rust/issues/13871
    • https://github.com/pts/minilibc686는 i386에서 printf로 hello world를 1 KiB 미만에 할 수 있음. write로 hello world는 170바이트 미만임
    • 내 Unix를 튜닝할 시간이네!
  • 멋짐. 저 시간 포털에 들어가서 대체 현실에서 살 수 있을까?

    • 유연휘발유가 쓰이고, 담배 연기가 어디서나 당연했고, 석면이 생각할 수 있는 모든 것에 쓰이던 때 말인가? 매혹적인 10년이긴 하지만 삶의 질은 그 뒤로 엄청나게 높아졌을 가능성이 큼
    • 가능하긴 함. 실제 VT 터미널을 하나 사면 됨. 예를 들면 https://www.ebay.com/itm/176698465415?_skw=vt+terminal&itmme... 같은 것임
      컴퓨터에 연결할 어댑터를 구하고, 원하는 *nix를 simh에서 실행하면 됨. 참고 자료로는 https://jstn.tumblr.com/post/8692501831를 추천함
      동작하게 만든 뒤 호스트 머신을 책상 뒤나 안 보이는 곳에 밀어 넣으면 1980년처럼 살 수 있음
  • RF 테이프를 복구해보면, 단순한 텍스트 파일만 봐도 DOS나 .iso 파일이 쓰지 않는 버퍼 공간이 드러남
    2.11 BSD 배포판에서도 기본 타일링과 창 관리자는 네이티브 OS에 설치해야 함. 그래서 KDE든 X11 창 관리자든 쓰게 되는 것임