Công bố mã nguồn tích lũy hơn 40 năm khi nghỉ hưu
(dunfield.themindfactory.com)- Một nhà phát triển đã công bố mã nguồn tích lũy hơn 40 năm nhân dịp nghỉ hưu, cho phép mọi người trực tiếp xem xét các hệ thống cũ, công cụ và dự án cá nhân
- Phạm vi công bố bao gồm cả hệ điều hành và kernel, như kernel đa tiến trình/tác vụ cho ARM, hệ điều hành cho CPU 6809, và các OS đời đầu từ thời Altair 1980
- Cũng cung cấp các công cụ phát triển cấp thấp như Micro-C Compiler, cross assembler, disassembler, trình giả lập 8052 và debugger
- Nhiều tiện ích cho công việc trên PC được công bố rộng rãi, gồm DOSBox, tiện ích DOS, đồng bộ tệp, xử lý ZIP, tạo gói cài đặt và trình soạn thảo văn bản
- Bao gồm cả các dự án phần cứng cá nhân như radio nghiệp dư, điều khiển hồng ngoại RS-232, Ethernet TTY, điều khiển X10 và robot để đọc 1.500 DVD, nên có giá trị lưu trữ lớn
Mục đích công bố và tài liệu hướng dẫn
- Nhân dịp nghỉ hưu, tác giả công bố mã nguồn tích lũy hơn 40 năm thuộc nhóm “những thứ tôi đã viết”
- Mục đích công bố là để người khác có thể sử dụng hữu ích các đoạn mã này, hoặc học hỏi từ một phần trong đó
- Trang công bố cũng dẫn tới các tài liệu sau:
Hệ điều hành, kernel, máy ảo, mô phỏng
- ARMOS: kernel đa tiến trình/tác vụ cho ARM
- CUBIX: hệ điều hành cho CPU 6809
- DMF: OS đời đầu từ thời Altair 1980
- DVM: Dunfield Virtual Machine
- SIMSYS: hệ thống liên quan đến Altair, D6809, H8, Horizon, Mod8
- MONITORS: monitor cho nhiều bộ xử lý nhúng
- 8051ICE: trình giả lập in-circuit sử dụng EMILY
- EMILY52: trình giả lập 8052
Compiler, assembler, debugger, công cụ hỗ trợ phát triển
- MICRO-C: Micro-C Compiler
- MCSAMPLE: chương trình ví dụ Micro-C
- XASM: cross assembler và công cụ
- DISASM: cross disassembler
- DMS: debugger Dunfield MicroScope
- DESMO: Debug Scripting Monitor
- DDSIDE: Dunfield Development Systems IDE
- BLDTOOL: công cụ hỗ trợ tác vụ build
- PUBSRC: công cụ bảo trì mục mã nguồn công khai
- HFC: Help File Compiler
- ESL: Extensible Script Language
Tiện ích DOS, tệp, đĩa, chỉnh sửa và đóng gói
- DBBD: đĩa mềm khởi động DosBox
- DBUTIL: tiện ích DosBox
- DD_DBSRC: cây mã nguồn DosBox
- DOSUTIL: nhiều tiện ích DOS
- FDI: Floppy Disk Image
- IMDSRC: ImageDisk
- EDT: trình soạn thảo văn bản EDT
- ELF: công cụ chỉnh sửa tên tệp dài
- FTOOLS: nhiều công cụ cho thao tác tệp
- SYNC: đồng bộ hai cây thư mục
- ZDIR: liệt kê tệp bên trong ZIP và
touch - MAR: MicroARchiver từng dùng để nén tệp cài đặt
- MKPKG: tạo tệp cài đặt dạng gói
.exeđơn lẻ - ESP: vá chuỗi trong tệp thực thi
- PT: công cụ PaperTape
- MICROCAD: chương trình vẽ CAD rất nhỏ
Phần cứng, truyền thông, điều khiển, dự án cá nhân
- DARC: Dunfield Amateur Radio Controller
- HTX242: điều khiển bộ thu phát radio nghiệp dư RS HTX-242
- ICOMCIV: mã giao diện ICOM CI-V cho radio nghiệp dư
- IR232: điều khiển từ xa hồng ngoại học lệnh qua serial RS-232
- ETTY: Ethernet TTY
- SNIFF: Ethernet sniffer
- DLM: Data Line Monitor
- ITS: Interactive Terminal Switch
- DDLINK: DavesDataLink để truyền tệp qua COM, LPT, NET
- SERCNCT: chuyển đổi nhiều thiết bị trên một cổng COM
- DBOX: bộ điều khiển Sony VCR
- DVDROBOT: robot được tạo để đọc 1.500 DVD
- EPROM: bộ lập trình EPROM
- 8031DWG: mẫu thiết kế dựa trên 8031
- X10CTRL: điều khiển thiết bị X10 từ PC
- RINGSW: switch distinctive ring cho đường dây điện thoại
- PC100: trình giả lập terminal VT-100
- LABTOOLS: nhiều công cụ phòng lab/kiểm thử
- CAM: dự án dành cho trẻ em khuyết tật phát triển
- MACMON: giám sát/ghi log việc sử dụng mạng của trẻ em
- TRANZTCL: công cụ phát triển Verifone TRANZ PointOfSale
1 bình luận
Các ý kiến trên Hacker News
Xem qua DOSUTIL.ZIP thì thấy các chương trình C đơn giản và thanh nhã thật sự rất hay
Điều ấn tượng nữa là phần lớn chỉ dùng 1–2 dòng
#includechuẩn của C, và trong 20.000 dòng mã C chỉ có 24 chỗ#ifTrải nghiệm đọc một codebase như thế này đã truyền cảm hứng khi bắt đầu làm Cosmopolitan Libc
#ifDù vậy, nếu so sánh tương đương thì đúng là chỉ có 2 câu lệnh
useQuy ước
True=7trongSTYLE.TXTkhá lạ lẫmNội dung nói rằng do kinh nghiệm với mã cấp thấp và phần cứng, để “giảm thiểu những thứ có thể sai ở tầng thấp”, tác giả tận dụng việc trong C
0==FALSE,!0==TRUEnên đôi khi dùng7làm giá trị đúng thay vì1Đây là lựa chọn theo thói quen rằng chênh lệch 3 bit tốt hơn chênh lệch 1 bit, nhưng nếu thật sự có lỗi phần cứng 1 bit như vậy thì phần lớn hệ thống cũng đã hỏng, nên chính tác giả cũng thừa nhận là ngốc nghếch
Tôi thắc mắc ngày xưa việc bit ngẫu nhiên bị lật làm hỏng câu điều kiện có phổ biến không
Còn phải quyết định trong trường hợp lỗi thì giả định nhánh nào chạy an toàn, đếm số bit của từng điều kiện rồi nếu số bit 1 nhiều hơn 0 thì coi là đúng hay không, và liệu có ghi log hoặc báo cho người vận hành rằng bit đã bị lật mà không có sửa lỗi hay không
Có những nơi mã phát hiện lỗi hữu ích, nhưng chỉ quy định true là 7 thì chưa đủ
Dù vậy, đọc tài liệu phong cách này rất thú vị, và tôi thích việc ông ấy công khai toàn bộ như thế. Chắc chắn sẽ có công cụ rất hợp với ai đó
0xA5(1010 0101) để gửi một chuỗi bit xen kẽ hơi biến thểĐó là cách nhằm kiểm tra càng nhiều khả năng hỏng hóc càng tốt trong một lần
TRUE=7không phải là giải pháp thật sựNếu là biến Boolean thì với mỗi điều kiện đều phải xử lý
if (var == TRUE),else if (var == FALSE), và trường hợp các giá trị khác thì làm gì; bản thân đoạn mã xử lý đó cũng không được lỗiHơn nữa, việc lật bit có thể ảnh hưởng đến biến dùng trong
switch, các điều kiện nhưif (i > 17), con trỏ, địa chỉ trả về trên stack, và cả chính mã chương trìnhCùng lắm đây chỉ là một giải pháp rất cục bộ, việc triển khai cũng không hề nhỏ nhặt, nên khó coi là quy ước chuẩn
Cá nhân tôi có lẽ sẽ dùng
-1Thật tiếc vì đã không lưu giữ cẩn thận mã cũ
Từ game Rắn săn mồi là chương trình không tầm thường đầu tiên, tiện ích đầu tiên viết bằng assembly, driver thiết bị đầu tiên cho máy in Centronics, cho đến lịch vạn niên làm bằng Pascal trong một giờ khi đang nôn nao nặng vì bài tập đại học, tôi đều nghĩ chúng nhỏ nhặt và không đáng lưu
Kết cục là không còn lại mã nào trước cuối thập niên 1990. Các lập trình viên trẻ nên lưu giữ mã của mình cho tốt
Tất nhiên nếu các dịch vụ “miễn phí” đó đóng cửa thì sẽ thành vấn đề, nên self-hosting cũng hữu ích
Hồi đó TSR trông như phép thuật. Có lẽ chúng vẫn nằm đâu đó trong mấy đĩa mềm ở tầng hầm nhà mẹ tôi
Bài tác giả hồi tưởng chuyện suýt chết vào năm 2019 cũng đáng đọc: https://dunfield.themindfactory.com/2019.htm
Kết quả xét nghiệm tệ đến mức có bác sĩ từ chối điều trị vì sợ ông ấy có thể chết bất cứ lúc nào trong lúc khám
Vậy mà đến giờ ông ấy vẫn sống, sinh hoạt bình thường và thứ Bảy nào cũng chạy ngoài bãi biển. Kết quả xét nghiệm không cải thiện và ông ấy luôn hụt hơi, nhưng trông như một người đơn giản là từ chối chết
Giống câu bác sĩ trong liên kết nói: “trông anh khá hơn nhiều so với những gì ghi trên giấy tờ”
Trong bài có đoạn nói ngay cả những việc “ôm con, ngủ trên giường của mình, ăn uống, và làm một chút việc bằng tay” cũng đều bị phủ nhận; khi cha tôi bị bạch cầu và viêm phổi, không khá lên và không thể tháo ống thở, các bác sĩ cũng khăng khăng nói y hệt rằng ông sẽ bị tàn tật suốt đời
Thật sự rất hay. Tôi đã nhiều lần nghĩ rằng một ngày nào đó mình cũng muốn làm điều tương tự
Nó giống như nhận di sản từ ông bà vậy. Chắc hẳn sẽ có những viên ngọc thật sự và những món đồ kỳ lạ lẫn trong đống linh tinh và rác rưởi, nhưng toàn bộ chúng kể câu chuyện về những con người có thật đã sống một cuộc đời phong phú và thú vị
Chỉ vài điểm nổi bật thì không thể khắc họa đúng cuộc đời đó
May mắn là vẫn còn bộ cấp phát bộ nhớ thương mại tôi làm vào cuối thập niên 90. Nó chạy đơn luồng và chỉ hỗ trợ Metrowerks CodeWarrior cùng MacOS cũ, nhưng từng là bộ cấp phát nhanh nhất và ít lỗi nhất trên Mac
Khi MacOS X ra đời thì nó trở nên vô dụng, và giờ tôi cũng không biết còn ai quan tâm không
Như đã nói hôm qua, tôi đã mất mã nguồn Trapeze (https://en.wikipedia.org/wiki/Trapeze_(spreadsheet_program)). Có lẽ tôi chưa từng nghĩ đến việc lưu giữ các sản phẩm của mình để sau này chia sẻ khi không còn ai bận tâm nữa
Thật tuyệt. So với lịch sử code của tôi sau này, những thứ này có cảm giác như mã nguồn thuần khiết
Đến năm 2040, code của tôi có lẽ sẽ cho thấy dấu vết dùng đầy những thư viện và framework “giờ chẳng ai dùng nữa”
Không phải chuyện tốt hay xấu, chỉ là phản ánh thời đại mà thôi
Các thực hành phát triển đang thịnh hành ngày nay tạm bợ và mong manh đến đáng kinh ngạc. Rất ít dự án hiện nay có thể bị bỏ mặc mà sống sót 10 năm, nói gì đến 40 năm
pip installvànpm installnày rồi sẽ đều trở nên vô dụngTôi cho rằng tiện ích có ảnh hưởng nhất là ImageDisk
Nó được dùng để bảo tồn đĩa mềm từ nhiều loại máy tính khác nhau bằng IBM PC, và rất nhiều phần mềm cũ trên bitsavers.org và archive.org đã được khôi phục bằng công cụ này
Trong A Deepness in the Sky của Vernor Vinge có một xã hội loài người hàng nghìn năm sau, nơi gần như mọi phần mềm đều đã được viết, vấn đề chỉ là tìm ra chúng
Vì vậy các lập trình viên-nhà khảo cổ lục lọi kho lưu trữ, và nếu cần thì chạy code trong emulator nằm trong emulator nằm trong emulator: https://garethrees.org/2013/06/12/archaeology/
Bạn cũng đã góp vào một kho báu mà ai đó sẽ hưởng lợi, dù là ngày mai hay 5.000 năm nữa
Như một trò đùa về lần sửa lỗi cuối cùng ngay trước khi nghỉ hưu, tôi thử xem micro-cad thì gặp lỗi 404
URL: https://dunfield.themindfactory.com/dnld/sc/MICROCAD.ZIP
Hành vi mong đợi là có thể tải xuống tệp
.zipMCSAMPLETuyệt vời. Tôi đã tích lũy được vài “kinh thánh” cá nhân luôn để bên cạnh khi làm với một ngôn ngữ cụ thể hoặc các tác vụ tự động hóa, và cũng học được khá nhiều cách tổ chức từ HN
Tuy nhiên, chúng có cảm giác quá cá nhân và chuyên biệt theo quá trình suy nghĩ của tôi nên tôi chưa từng nghĩ đến việc công khai
Nhưng sau khi xem những tài liệu như thế này, tôi thấy được truyền cảm hứng. Đây là một ý tưởng thật sự tuyệt vời, và nếu có thể, tôi cũng muốn ủng hộ tiền cho dự án nghỉ hưu này để bày tỏ sự cảm kích
Và cũng muốn biết bạn đã học được những cách tổ chức nào. Tôi luôn quan tâm đến việc học các mẹo năng suất hoặc phần mềm của người khác
Nếu bạn quan tâm, tôi muốn thử trao đổi tệp với nhau. Tôi nghĩ mình có thể học được nhiều từ tài liệu của bạn. Tên người dùng Gmail của tôi giống tên người dùng HN