1P by GN⁺ | ★ favorite | 댓글 1개
  • 1994년 말 Microsoft에서 Windows95 UI 코드를 Windows NT로 옮기던 중, NT와 Windows95의 차이 때문에 디스크 포맷용 별도 UI가 필요했음
  • 파일시스템, 레이블, 클러스터 크기, 압축, 암호화 같은 포맷 옵션을 종이에 정리한 뒤 VC++ 2.0 Resource Editor로 세로형 선택 목록을 구성함
  • 더 나은 UI가 오기 전까지 쓰려던 임시 대화상자가 약 30년 뒤에도 당시 형태로 남아 있음
  • 같은 작업 과정에서 cluster slack 허용 범위를 임의로 정한 결정이 FAT 볼륨 포맷 크기 32GB 제한으로 이어짐
  • 임시로 체크인한 구현도 장기 제품 동작과 제약이 될 수 있어, “temporary” 해법을 넣을 때 신중해야 함

목요일 아침에 만든 Windows NT Format Dialog

  • 1994년 말 Microsoft에서는 Windows95 사용자 인터페이스 코드 상당 부분을 Windows NT로 포팅하고 있었음
  • Format 기능은 NT와 Windows95의 차이가 커서 별도의 사용자 지정 UI가 필요했던 영역이었음
  • 디스크 포맷에서 고를 항목은 먼저 종이에 정리됨
    • 파일시스템
    • 레이블
    • 클러스터 크기
    • 압축
    • 암호화
  • 이후 VC++ 2.0과 Resource Editor로 선택 항목을 필요한 순서에 가깝게 세로 스택 형태로 배치함
  • 이 UI는 완성형 설계라기보다, 더 나은 UI가 오기 전까지 쓰기 위한 임시 구현이었음

임시 구현이 남긴 장기 효과

  • 약 30년이 지난 뒤에도 해당 대화상자는 그 목요일 아침에 만든 형태로 남아 있음
  • FAT 볼륨의 포맷 크기가 32GB로 제한된 것도 같은 시점의 임의 결정에서 비롯됨
    • 당시 cluster slack을 어느 정도까지 허용할지 판단해야 했음
    • 그 판단이 FAT 볼륨 포맷 크기 제한으로 이어짐
  • “temporary” 체크인은 의도와 달리 제품의 장기 동작과 제약으로 굳어질 수 있음

댓글과 토론

Hacker News 의견들
  • Windows NT4 소스 코드에서 1995년 2월 13일에 그가 포맷 대화상자 코드 일부를 처음 작성했다는 건 확인할 수 있었고, 1994년 말~1995년 초라는 말은 대체로 맞음
    다만 NT4는 FAT32를 지원하지 않았고, FAT 볼륨도 64K 클러스터를 허용해서 당시 많은 시스템보다 큰 4GB까지 가능했음. NT4의 FAT 포맷에는 클러스터 검사나 옵션이 없었고, 볼륨 크기에 따라 클러스터 크기가 정해졌음
    게다가 FAT32 볼륨의 32GB 제한은 대화상자가 아니라 내부 포맷 함수 쪽에 있었음. Windows 2000에서는 32GB보다 큰 드라이브를 FAT32로 포맷하려고 시도할 수 있지만, 포맷 끝에서 하드코딩된 제한 때문에 실패함. 같은 함수를 쓰는 명령행 format.com도 동일함
    그가 왜 자기 관여도를 항상 과장하는지 모르겠음. Microsoft가 Info-Zip에서 라이선스한 Zip 폴더 코드도, 통합 과정에서 손댔다는 이유로 그가 작성했다고 믿는 사람이 생겼음. 이제는 인플루언서가 되려는 듯하고, 과장은 그런 사람들이 하는 일 같음

    • 기억은 믿기 어렵지만, FAT32 제한을 포맷 대화상자가 강제했다는 이야기는 Dave의 옛날 이야기 중 가장 큰 오류에 가까움
      1994년 말에 FAT32가 개발 중이었는지는 모르겠지만, Windows NT 4에도 초기 Windows 95에도 포함되지 않았음. Windows 95 OSR2에 들어갔을 때도 format 명령은 128GiB 파티션까지 잘 받았지만, Windows 95는 NT가 아니긴 함
      실제 원인은 Windows 2000의 내부 포맷 함수로 보임. GUI, format 명령, diskpart 모두 32GiB 초과 파일 시스템을 만들 수 없음. 당시 이미 그 크기 이상의 드라이브가 있었는데 왜 그랬는지는 알 수 없음. Linux의 mkdosfs 같은 걸 쓰면 Windows 2000+의 VFAT 드라이버는 2TiB 볼륨도 받아들이고, 그런 큰 볼륨에 Windows 2000 설치도 가능함
    • Windows Vista 시절에 한동안 Zip 폴더를 담당했는데, 그 코드는 Microsoft 내부에서 작성된 게 아니라 구매한 코드였다고 확신했음
      솔직히 난독화 도구를 거친 것처럼 보였고, 원 저자가 Microsoft가 변경이나 개선을 어렵게 하려고 일부러 그렇게 했다고 생각했음. 아직도 그 코드 악몽을 꿈
    • plummer@visualzip.com으로 표시된 "vzip150.zip"에는 info-zip 관련 내용이 없음: https://www.sac.sk/files.php?d=7&l=V
      그렇다면 Corvette는 어디서 나온 걸까: https://www.tomshardware.com/software/windows/dev-shows-off-...
    • 참고용 소스: https://github.com/lianthony/NT4.0/blob/b4a8d373d8a082db6758...
    • 포맷 부분은 잘못 기억하는 듯함. UI에는 NTFS용 임의 클러스터 크기 관련 코드가 있긴 함: https://github.com/lianthony/NT4.0/blob/b4a8d373d8a082db6758...
      그 코드는 XP 일부 버전에도 남아 있었던 것 같음: https://github.com/tongzx/nt5src/blob/daad8a087a4e75422ec96b...
      ZIP 지원은 Zip 폴더 자체 소스 코드를 찾기 어려움. 대신 다른 회사인 Schlumberger Technology Corp.의 발췌 코드가 있음: https://github.com/tongzx/nt5src/blob/daad8a087a4e75422ec96b... 주석을 믿는다면 1996년에 추가된 코드임
  • Dave Plummer는 정말 멋진 사람임. 역사상 가장 널리 쓰인 커널 중 하나를 만들던 이야기를 너무 담담하게 쓰는 게 좋음
    Windows용 작업 관리자, Windows NT용 Space Cadet Pinball 포팅, Windows용 Zip 파일 지원, Amiga용 HyperCache[4] 등 여러 소프트웨어를 만들었고, 소프트웨어 공학 분야 특허도 6개 받았다고 함
    https://en.wikipedia.org/wiki/Dave_Plummer

  • 흔한 함정을 잘 보여줌. 문제를 임시 해결책으로 “해결”하면, 더 나은 해결책의 우선순위가 아직 해결 안 된 모든 문제보다 낮아짐
    그런 미해결 문제는 항상 충분히 많아서, 아무도 임시 해결책을 다시 보러 오지 않게 됨

    • 커리어에서 이런 일을 봐왔음. 교훈은 스스로 자랑스러울 정도가 되기 전에는 “출시”하지 말라는 것임. 물론 말처럼 쉽지 않을 때도 있음
    • “작동하는 임시 해결책보다 영구적인 것은 없다”
      어디서 들었는지는 모르겠지만, 회사에서 임시 해결책을 내보내지 않고 처음부터 제대로 만들자고 설득할 때 자주 씀
    • 동의하지 않음. 30년 동안 고칠 필요 없이 버틸 정도로 기능을 개발했다면, 그건 효율적인 엔지니어링의 완전한 승리라고 봄
  • “파일 시스템, 레이블, 클러스터 크기, 압축, 암호화 등 디스크 포맷과 관련해 선택할 수 있는 모든 옵션을 종이에 적었다”는 흐름에서 “우아한 UI가 올 때까지 버틸 임시 UI였다”는 결론은 잘 이어지지 않는 듯함
    필요한 모든 옵션을 단순한 인터페이스에 보여주는데, 더 “우아한” 인터페이스에는 뭘 넣어야 하는 걸까

  • 그 대화상자는 아직도 남아 있을 뿐 아니라, HP USB Disk Storage Format Tool 같은 도구에도 영향을 줬음. 32GB FAT32 제한을 우회할 때 항상 썼던 도구임: https://www.majorgeeks.com/files/details/hp_usb_disk_storage...

    • 유용한 도구임. 레트로 PC들 사이에서 게임 컬렉션을 공유하려고 128GB FAT32 플래시 드라이브를 만들 때 썼음
  • 지금 그대로 완벽하니 “우아한 UI”로 바꾸지 않았으면 좋겠음

    • 이미 Settings -> Storage -> Disks & volumes 아래에서 “대체”되어 있음. File Explorer에서 실행하면 예전 대화상자가 뜨는 건 File Explorer가 아직 대체로 레거시 스타일 앱이기 때문임
      포맷 대화상자 대체물로서 새 UI는 꽤 마음에 듦. 다만 Disk Manager 기능을 대체하는 부분은 디스크 배치의 그래픽 표현이 없어서 조금 부족함
      기본 보기: https://i.imgur.com/56yZ8gZ.png
      고급 보기 섹션: https://i.imgur.com/fKb3R8c.png
      기존 파티션 포맷: https://i.imgur.com/DmbX3FQ.png
      완벽하진 않지만 같은 레이아웃을 대체로 유지하면서 OS 테마에 맞췄고, 예전 Disk Manager에서 여러 페이지짜리 마법사였던 옵션도 몇 가지 추가했음. “start”보다 “format”이 더 직접적이고, “close”보다 “cancel”이 더 맞는 같은 작은 개선도 있음. 물론 폭이 33% 넓어진 걸 세상의 종말처럼 여길 사람도 있겠지만
      다만 새 파티션 크기를 여전히 MB 단위로 입력하게 하는 건 애매함. 지역화된 숫자 구분 기호를 넣어주긴 하지만, 앞으로 숫자가 더 커질 텐데 수백만 MB 단위를 신경 쓰게 하는 건 좀 이상함
    • Format에 업데이트가 필요합니다. 업데이트를 준비하는 중입니다…
    • 디스크 조각 모음 UI를 바꾼 건 정말 아쉬움. 블록이 이리저리 옮겨지는 걸 보는 게 좋았음. 그걸 위해 회전식 금속 하드디스크를 하나 보관할 가치가 있음
  • 임시 해결책과 영구 해결책이 따로 있다기보다, 나쁜 해결책과 좋은 해결책이 있다고 봄. 좋은 해결책은 빨리 구현했더라도 충분히 좋기 때문에 계속 남음
    나쁜 해결책도 한동안 유일하거나 현실적인 선택지라면 남을 수 있고, 이후의 모든 것이 거기에 하위 호환성을 맞춰야 함

  • 유럽에서 가장 크고 오래된 은행 중 하나에서 일했는데, 운영 환경이 이런 임시 해결책으로 가득한 경우가 많았음
    보통 이전 임시 수정 때문에 생긴 큰 문제를 빠르게 고치려고 또 임시로 만든 것들이었음

  • “충분히 좋은” 임시 해결책을 조심해야 함. 회사의 핵심 로깅 컴포넌트는 인턴이 작성했고 이름에 POC가 들어가 있음
    데이터 형식도 인턴이 만들 법한 형태였는데, 모두가 제대로 알아차렸을 때는 이미 너무 많은 데이터를 써버려서 고치는 예산과 노력이 문제 자체보다 커져 있었음

    • 오랫동안 아무도 눈치채지 못했다면, 실제로는 충분히 좋은 해결책이었고 굳이 사소한 논쟁을 할 가치가 없었을 수도 있음
      항상 모든 걸 완벽하게 할 수는 없고, 가장 중요한 것에 우선순위를 두고 덜 중요한 건 어느 정도 넘겨야 한다고 스스로를 달래는 편임
  • 오래된 격언처럼, 임시 해결책만큼 영구적인 것은 없음

    • 그건 세금에 관한 말이었던 것 같음