Tính năng ‘Format Dialog’ của Windows NT
(twitter.com/davepl1968)- Vào cuối năm 1994, khi Microsoft chuyển mã giao diện Windows95 sang Windows NT, do khác biệt giữa NT và Windows95 nên cần một UI riêng cho việc định dạng đĩa
- Các tùy chọn định dạng như hệ thống tệp, nhãn, kích thước cụm, nén và mã hóa được phác ra trên giấy trước, rồi dùng VC++ 2.0 Resource Editor để tạo danh sách lựa chọn theo chiều dọc
- Hộp thoại tạm thời định dùng cho đến khi có UI tốt hơn vẫn còn giữ nguyên hình dạng ban đầu sau khoảng 30 năm
- Trong cùng quá trình đó, một quyết định mang tính tùy ý về mức cho phép của cluster slack đã dẫn tới giới hạn 32GB khi định dạng phân vùng FAT
- Một triển khai được check-in tạm thời cũng có thể trở thành hành vi và ràng buộc dài hạn của sản phẩm, vì vậy cần thận trọng khi đưa vào các giải pháp “temporary”
Hộp thoại Format của Windows NT được tạo ra vào sáng thứ Năm
- Vào cuối năm 1994, Microsoft đang port phần lớn mã giao diện người dùng của Windows95 sang Windows NT
- Tính năng Format là khu vực cần UI tùy chỉnh riêng vì sự khác biệt giữa NT và Windows95 là khá lớn
- Các mục cần chọn khi định dạng đĩa trước tiên được ghi ra giấy
- Hệ thống tệp
- Nhãn
- Kích thước cụm
- Nén
- Mã hóa
- Sau đó dùng VC++ 2.0 và Resource Editor để sắp xếp các mục lựa chọn thành dạng xếp dọc gần với thứ tự cần thiết
- UI này không phải là một thiết kế hoàn chỉnh, mà là triển khai tạm thời để dùng cho đến khi có UI tốt hơn
Ảnh hưởng dài hạn mà một triển khai tạm thời để lại
- Khoảng 30 năm sau, hộp thoại đó vẫn còn tồn tại với đúng hình dạng được tạo ra vào sáng thứ Năm ấy
- Việc kích thước định dạng của phân vùng FAT bị giới hạn ở 32GB cũng bắt nguồn từ một quyết định mang tính tùy ý trong cùng thời điểm
- Khi đó cần phải quyết định sẽ cho phép cluster slack ở mức nào
- Quyết định đó đã dẫn tới giới hạn kích thước định dạng phân vùng FAT
- Một check-in “temporary” có thể, trái với ý định ban đầu, trở thành hành vi và giới hạn dài hạn của sản phẩm
1 bình luận
Các ý kiến trên Hacker News
Có thể xác nhận trong mã nguồn Windows NT4 rằng vào ngày 13/2/1995, ông ấy lần đầu viết một phần mã của hộp thoại định dạng, nên mốc cuối năm 1994 đến đầu năm 1995 nhìn chung là đúng
Tuy nhiên, NT4 không hỗ trợ FAT32, còn các volume FAT cũng cho phép cluster 64K nên có thể lên tới 4GB, lớn hơn nhiều hệ thống thời đó. Phần format FAT của NT4 không có kiểm tra hay tùy chọn cluster; kích thước cluster được quyết định theo kích thước volume
Hơn nữa, giới hạn 32GB của volume FAT32 nằm ở hàm format nội bộ chứ không phải ở hộp thoại. Trên Windows 2000, có thể thử format ổ đĩa lớn hơn 32GB thành FAT32, nhưng sẽ thất bại ở cuối quá trình format vì giới hạn được hard-code. Công cụ dòng lệnh format.com dùng cùng hàm cũng như vậy
Không rõ tại sao ông ấy luôn phóng đại mức độ tham gia của mình. Mã Zip Folders mà Microsoft mua giấy phép từ Info-Zip cũng khiến có người tin rằng ông ấy đã viết, chỉ vì ông ấy có can thiệp trong quá trình tích hợp. Giờ có vẻ ông ấy muốn trở thành influencer, và phóng đại là việc những người như vậy hay làm
Không rõ FAT32 đã được phát triển vào cuối năm 1994 chưa, nhưng nó không có trong Windows NT 4 hay bản Windows 95 đầu tiên. Ngay cả khi được đưa vào Windows 95 OSR2, lệnh format vẫn chấp nhận tốt các phân vùng tới 128GiB, dù Windows 95 không phải NT
Nguyên nhân thực tế có vẻ là hàm format nội bộ của Windows 2000. GUI, lệnh format và diskpart đều không thể tạo file system vượt quá 32GiB. Không rõ vì sao lại vậy, trong khi lúc đó đã có ổ đĩa lớn hơn mức này. Nếu dùng thứ như mkdosfs của Linux, driver VFAT của Windows 2000+ vẫn chấp nhận volume 2TiB, và thậm chí có thể cài Windows 2000 lên những volume lớn như thế
Thành thật mà nói, trông nó như đã chạy qua công cụ obfuscation, và tôi từng nghĩ tác giả gốc cố tình làm vậy để Microsoft khó sửa đổi hay cải tiến. Đến giờ tôi vẫn còn mơ ác mộng về đoạn mã đó
Vậy chiếc Corvette đến từ đâu: https://www.tomshardware.com/software/windows/dev-shows-off-...
Đoạn mã đó dường như vẫn còn trong một số phiên bản XP: https://github.com/tongzx/nt5src/blob/daad8a087a4e75422ec96b...
Về hỗ trợ ZIP, khó tìm được mã nguồn của chính Zip Folders. Thay vào đó có một đoạn mã trích của công ty khác, Schlumberger Technology Corp.: https://github.com/tongzx/nt5src/blob/daad8a087a4e75422ec96b... Nếu tin phần chú thích thì đây là mã được thêm vào năm 1996
Dave Plummer là một người thật sự rất thú vị. Tôi thích cách ông ấy kể rất bình thản về chuyện tạo ra một trong những kernel được dùng rộng rãi nhất trong lịch sử
Ông ấy đã tạo ra nhiều phần mềm như Task Manager cho Windows, bản port Space Cadet Pinball sang Windows NT, hỗ trợ file Zip cho Windows, HyperCache[4] cho Amiga, và được cho là có 6 bằng sáng chế trong lĩnh vực kỹ nghệ phần mềm
https://en.wikipedia.org/wiki/Dave_Plummer
Cho thấy rất rõ một cái bẫy phổ biến. Nếu “giải quyết” vấn đề bằng một giải pháp tạm thời, thì mức ưu tiên của một giải pháp tốt hơn sẽ thấp hơn tất cả những vấn đề vẫn chưa được giải quyết
Những vấn đề chưa giải quyết như vậy lúc nào cũng đủ nhiều, nên rốt cuộc chẳng ai quay lại xem xét giải pháp tạm thời nữa
Không biết nghe ở đâu, nhưng tôi hay dùng câu này khi thuyết phục công ty đừng tung ra giải pháp tạm thời mà hãy làm cho đúng ngay từ đầu
Từ mạch “đã viết ra giấy tất cả các tùy chọn có thể chọn liên quan đến định dạng đĩa như hệ thống tệp, nhãn, kích thước cluster, nén, mã hóa, v.v.” mà kết luận “đó là UI tạm thời để dùng cho đến khi có UI thanh lịch” thì có vẻ không khớp lắm
Nếu đã hiển thị mọi tùy chọn cần thiết trong một giao diện đơn giản, thì giao diện “thanh lịch” hơn sẽ cần thêm gì?
Hộp thoại đó không chỉ vẫn còn, mà còn ảnh hưởng đến các công cụ như HP USB Disk Storage Format Tool. Đây là công cụ tôi luôn dùng để vượt qua giới hạn FAT32 32GB: https://www.majorgeeks.com/files/details/hp_usb_disk_storage...
Hiện tại nó đã hoàn hảo rồi, nên tôi mong họ đừng đổi sang “UI thanh lịch”
Với vai trò thay thế hộp thoại format, UI mới tôi thấy khá ổn. Chỉ có phần thay thế chức năng Disk Manager thì hơi thiếu vì không có biểu diễn đồ họa bố cục đĩa
Giao diện mặc định: https://i.imgur.com/56yZ8gZ.png
Phần giao diện nâng cao: https://i.imgur.com/fKb3R8c.png
Format phân vùng hiện có: https://i.imgur.com/DmbX3FQ.png
Không hoàn hảo, nhưng nhìn chung vẫn giữ cùng bố cục, đồng thời khớp với theme của OS, và còn thêm vài tùy chọn trước đây trong Disk Manager cũ là wizard nhiều trang. Cũng có vài cải tiến nhỏ như “format” trực tiếp hơn “start”, và “cancel” phù hợp hơn “close”. Dĩ nhiên chắc vẫn có người xem việc nó rộng hơn 33% như tận thế
Tuy vậy, việc vẫn bắt nhập kích thước phân vùng mới theo MB thì hơi lấn cấn. Dù có thêm dấu phân tách số theo locale, nhưng số sẽ ngày càng lớn hơn, nên bắt người dùng bận tâm đến hàng triệu MB thì hơi kỳ
Tôi nghĩ không hẳn có giải pháp tạm thời và giải pháp vĩnh viễn riêng biệt, mà là có giải pháp tệ và giải pháp tốt. Giải pháp tốt, dù được triển khai nhanh, vẫn đủ tốt nên tiếp tục tồn tại
Giải pháp tệ cũng có thể tồn tại nếu trong một thời gian nó là lựa chọn duy nhất hoặc thực tế nhất, và mọi thứ về sau phải tương thích ngược với nó
Tôi từng làm ở một trong những ngân hàng lớn và lâu đời nhất châu Âu, và môi trường vận hành thường đầy những giải pháp tạm thời kiểu này
Thường đó là những thứ được làm tạm để nhanh chóng sửa một vấn đề lớn do bản sửa tạm trước đó gây ra
Cần cẩn thận với những giải pháp tạm thời “đủ tốt”. Thành phần logging cốt lõi của công ty do một thực tập sinh viết, và trong tên có POC
Định dạng dữ liệu cũng kiểu như thực tập sinh sẽ nghĩ ra, nhưng đến khi mọi người thật sự nhận ra thì đã ghi quá nhiều dữ liệu, khiến ngân sách và công sức để sửa còn lớn hơn chính vấn đề
Tôi thường tự trấn an rằng không phải lúc nào cũng có thể làm mọi thứ hoàn hảo; cần ưu tiên những gì quan trọng nhất và bỏ qua phần nào những thứ ít quan trọng hơn
Như câu ngạn ngữ cũ, không có gì vĩnh viễn bằng giải pháp tạm thời