Những điều mọi hacker từng biết (2017)
(catb.org)- Từng có thời, hacker nào cũng tự nhiên biết cấu trúc bit của ASCII, RS-232, terminal phần cứng và kiến thức về modem, nhưng khi thiết bị và môi trường mạng thay đổi thì những điều này không còn được truyền dạy trong quá trình nhập môn nữa
- Những cách gọi như
tty,SIGHUP,core dump,README,Ctrl-Dlà tàn dư của các công cụ đã biến mất, nên nếu biết nguồn gốc của chúng thì sẽ hiểu rõ hơn về Unix hiện đại và các tập quán phát triển - ASCII, máy 36-bit, bát phân, cấu hình RS-232, MIME, termios, curses, điều khiển terminal ANSI cho thấy các lớp tương thích lịch sử vẫn còn tồn tại trong những hệ thống hiện nay
- Trước thời Internet đại chúng, UUCP, USENET, BBS, FidoNet, FTP, Gopher, dịch vụ chia sẻ thời gian thương mại và WAN học thuật từng đảm nhiệm riêng các vai trò truyền tệp, email, diễn đàn và cộng tác
- Phát triển dựa trên kho mã công khai được hình thành qua các giai đoạn từ băng DECUS, FTP và email, các nhóm mã nguồn USENET,
patch(1), SCCS/RCS/CVS, SourceForge, Subversion cho tới Git vào năm 2005
Dấu vết Unix do phần cứng đã biến mất để lại
- Việc các hacker trẻ không còn biết cấu trúc bit của ASCII và các ký tự điều khiển kỳ lạ không phải là vấn đề cá nhân, mà là hệ quả của việc terminal phần cứng và RS-232 biến mất khỏi đời sống thường ngày
- Terminal ngày xưa không phải là cửa sổ phần mềm mà là terminal hiển thị video (VDT) kết nối với máy tính trung tâm; trước đó nữa là các thiết bị thuộc dòng teletype in ra giấy
ttytrong Unix bắt nguồn từ viết tắt của teletype,lptrong/dev/lplà line printer, còn/dev/drumtrong một số BSD Unix xuất phát từ thiết bị trống quay thời kỳ đầu\rCarriage Return là thao tác đưa đầu in về phía bên trái của dòng, và Unix xử lý kết thúc dòng chỉ bằng\n, trong khi các hệ điều hành khác vẫn tiếp tục dùng\r\n- Thứ tự
\r\nxuất hiện vì trên phần cứng đời đầu, carriage return mất nhiều thời gian hơn thời gian truyền một ký tự, nên phải được thực hiện trước
- Thứ tự
- Cách nhiều người dùng cùng chia sẻ CPU của một máy tính trung tâm được gọi là timesharing, và dấu vết của nó vẫn còn trong cấu trúc nhiều terminal ảo của Unix hiện đại
RS-232, modem và lệnh AT
- RS-232 là giao thức phần cứng được phát triển vào đầu thập niên 1960 để teletypewriter và modem có thể giao tiếp; trước thời USB, liên kết “serial” thường mặc định chỉ RS-232
- Modem là thiết bị cho phép gửi tín hiệu số qua đường dây điện thoại, và giới hacker thường dùng modem ngoài dưới dạng hộp rời
- Modem trong dễ bị nhiễu RF bên trong vỏ máy, còn đèn báo của modem ngoài rất hữu ích cho việc chẩn đoán sự cố
- Có thể phân biệt tương đối giữa kết nối thành công và lỗi đồng bộ qua các tiếng bíp và rít của modem
- Trong
SIGHUPcủa Unix,HUPlà viết tắt của Hang Up, vốn ban đầu chỉ tình huống kết nối modem bị ngắt làm terminal điều khiển biến mất - Tốc độ modem tăng từ 110bps lên 56kbps vào cuối thập niên 1990, và trong giai đoạn ổn định khoảng 1984~1991 thì 9600bps là phổ biến
- Vì vậy nhiều thiết bị còn dùng giao thức serial ngày nay vẫn đặt mặc định là 9600bps
- Tiền tố lệnh
ATcủa Hayes Smartmodem gần như trở thành chuẩn thực tế từ sau năm 1981, và có thể quay số bằng cách thêm số điện thoại sauATDT- Mẫu bit của
ATcó dạng dễ nhận biết ngay cả khi bộ nhận chưa biết tốc độ truyền, nên thuận lợi cho việc tự đồng bộ - Ngay cả năm 2017, lệnh AT vẫn được tìm thấy trong chức năng điều khiển modem di động 3G/4G của smartphone, và trong một loại được phân phối rộng rãi,
AT+QLINUXCMD=được dùng làm tiền tố để chuyển lệnh tới một phiên bản Linux trong firmware của chip
- Mẫu bit của
“core”, máy 36-bit và bát phân
- Trong khoảng 1955~1975, trước khi bộ nhớ bán dẫn trở thành chủ đạo, loại bộ nhớ chính là core memory làm từ các vòng ferrite nhỏ và dây đồng, và các thuật ngữ Unix như
in core,core dumpra đời từ đây - Từ sau năm 2000, khi hệ thống đa bộ xử lý trở nên phổ biến cả trên desktop,
corecũng được dùng như cách viết tắt của processor core, còn nghĩa bộ nhớ cũ dần ít được hiểu hơn - Việc phân tầng byte 8-bit và word 16/32/64-bit trở nên gần như phổ quát thực ra là từ sau năm 1983; trước đó truyền thống kiến trúc word 36-bit rất mạnh
- DEC PDP-10 và máy Lisp Symbolics 3600 là những đại diện tiêu biểu của dòng máy 36-bit
- Việc hủy PDP-10 vào năm 1983 báo hiệu sự kết thúc của hệ này, còn Symbolics 3600 tồn tại thêm khoảng 10 năm nữa
- Word 36-bit được chia tự nhiên thành 12 trường 3-bit nên cách biểu diễn bát phân rất phù hợp, và người ta từng cho rằng chỉ cần nhìn xem trong memory dump có xuất hiện chữ số lớn hơn 7 hay không là có thể phân biệt hệ 32-bit với hệ 36-bit
- Cú pháp trong C mà số có
0ở đầu mang nghĩa bát phân bắt nguồn từ lịch sử của B và PDP-7/PDP-11, và nhiều ngôn ngữ như Java, Python cũng thừa hưởng dấu vết này khi đi theo các quy tắc từ vựng mức thấp của C- Python 3, Perl 6 và Rust đã bỏ cú pháp bát phân với số 0 ở đầu vốn dễ gây nguy hiểm, nhưng Go vẫn giữ
- Tập lệnh x86 dù thường được mô tả bằng hệ thập lục phân, nhưng phần lớn sẽ tự nhiên hơn nếu hiểu theo các trường 3-bit và biểu diễn bằng bát phân
Địa ngục cấu hình RS-232 và thế giới 7-bit
- Liên kết TCP/IP thường trông như một luồng byte 8-bit sạch, nhưng với thiết bị RS-232 thì hai phía phải khớp tốc độ đường truyền, khung byte, parity và stop bit
- Từ sau năm 1984,
8N1—8 bit, no parity, 1 stop bit—trở nên phổ biến, nhưng trước đó có rất nhiều tổ hợp khác nhau, và nếu cấu hình không khớp thì chỉ thấy rác 8-bit ngẫu nhiên, thứ được gọi là baud barf - Lý do giao diện terminal POSIX/Unix
termios(3)có quá nhiều tùy chọn phức tạp mà ngày nay khó thấy ý nghĩa là vì nó từng phải thao tác các cấu hình RS-232 như vậy - Khi bật parity, bit cao của dữ liệu nhị phân 8-bit có thể bị hỏng, và các mạng hay phần mềm không làm hỏng bit cao
0x80được gọi là 8-bit clean- Mã hóa MIME cho email và MIME64 xuất hiện chính vì những môi trường còn tồn tại ràng buộc 7-bit như vậy
- Trước MIME,
uuencode/uudecodeđược dùng trong môi trường Unix để chuyển dữ liệu 8-bit sang 7-bit, và ngày nay đôi khi vẫn có thể bắt gặp
- Đầu nối RS-232 cũng lẫn lộn giữa DB-25 và DB-9, nên cần các thiết bị như gender changer, bộ chuyển DB-25↔DB-9, breakout box và null modem
- Sau năm 2000 còn xuất hiện cái bẫy là RS-232 chuẩn trên DB9/DB25 và TTL serial trên bo mạch cùng bị ghi là RS232
- TTL serial dùng mức 3.3V hoặc 5V, còn RS-232 chuẩn dùng biên độ điện áp lớn hơn nhiều, nên nếu nối trực tiếp mà không có level shifter thì linh kiện phía TTL có thể bị hỏng
- RS-232 đã biến mất khỏi tri thức phổ thông vào nửa sau thập niên 1990, nhưng đến khoảng năm 2010 vẫn chưa hoàn toàn biến mất khỏi máy tính phổ thông, và vẫn còn hiện diện trong thiết bị POS, console chẩn đoán của router thương mại, console debug nhúng, cảm biến GPS và thiết bị IoT
WAN và cộng đồng trước Internet
- Ngày nay WAN hầu như đã hội tụ về Internet TCP/IP, nhưng từ cuối thập niên 1970 đến giữa thập niên 1990 từng có nhiều WAN tiền Internet cùng tồn tại
- UUCP là viết tắt của Unix to Unix Copy Program; sau khi được đưa ra ngoài Bell Labs vào năm 1979, nó cung cấp mạng chi phí thấp giữa các site Unix qua modem và mạng điện thoại cho đến trước khi Internet đại chúng phổ biến vào giữa thập niên 1990
- Ban đầu đây là một hệ thống store-and-forward để phát tán bản cập nhật phần mềm, nhưng mục đích sử dụng chính đã trở thành email và USENET, khởi đầu vào năm 1980
- Trong cơ cấu cước điện thoại khi đó được chia thành gói cố định nội hạt và tính phí theo lưu lượng đường dài, lưu lượng UUCP có thể nối các local hop để tránh truyền tải đường dài trực tiếp
- USENET đã trở thành hạt giống của các thông lệ mã nguồn mở hiện đại từ các nhóm chia sẻ mã nguồn, và các tên tệp siêu dữ liệu dự án như
README,NEWS,INSTALLđã định hình ở đó vào đầu thập niên 1980- Great Renaming năm 1987 là cuộc tái tổ chức hệ phân cấp tên nhóm USENET
- Năm 1993, khi AOL mở quyền truy cập USENET cho người dùng, “September that never ended” bắt đầu, và làn sóng lớn người dùng mới khiến việc thích nghi văn hóa trở nên khó khăn
- Địa chỉ UUCP có dạng bang-path như
…!bigsite!foovax!barbox!user, và dần được thay thế bằng định dạnguser@hostnamekhi quyền truy cập Internet tăng lên vào đầu thập niên 1990- Trong thời kỳ chuyển tiếp còn có các địa chỉ lai kết hợp định tuyến UUCP và định tuyến Internet bằng ký tự
%
- Trong thời kỳ chuyển tiếp còn có các địa chỉ lai kết hợp định tuyến UUCP và định tuyến Internet bằng ký tự
- BBS thường là các hệ thống trên một máy tính gắn một modem, cho phép từng người một kết nối để gửi tin nhắn, tải lên/tải xuống tệp và chơi game
- BBS đầu tiên được vận hành ở Chicago năm 1978, và trong 18 năm sau đó đã có hơn 100.000 BBS xuất hiện rồi biến mất
- Từ năm 1984, FidoNet hỗ trợ email giữa các BBS và một hệ thống diễn đàn tương tự USENET
- XMODEM, YMODEM, ZMODEM gần như là ký ức duy nhất còn sót lại của văn hóa BBS, và ngay cả năm 2018 một số thiết bị Cisco vẫn nhận bản vá bằng cách tải lên XMODEM qua cổng serial
- Cũng tồn tại các dịch vụ timesharing thương mại như AOL, CompuServe, GEnie, The Source, Prodigy cùng các WAN học thuật như CSNET, BITNET, EARN, VIDYANET; từ
listservbắt nguồn từ email reflector của BITNET
Truy cập thông tin trước FTP, Gopher và web
- Trước khi World Wide Web trở nên phổ biến rộng rãi chỉ trong vài năm đầu thập niên 1990, việc truyền tệp giữa các site Internet từ sau năm 1971 thường được thực hiện bằng ftp và File Transfer Protocol
- Khi trình duyệt web có thể trực tiếp nói chuyện với giao thức FTP, việc dùng ftp phần lớn được hấp thụ vào trong trình duyệt, và tiền tố URL
ftp:cho biết cần giao tiếp với máy chủ FTP - Năm 1991, cùng năm Tim Berners-Lee tạo ra World Wide Web, các hacker ở University of Minnesota đã tạo ra giao thức hypertext theo thực đơn Gopher
- Gopher đã cạnh tranh với Web sơ khai trong vài năm, nhưng đầu năm 1993 việc trường đại học quyết định thu phí giấy phép triển khai đã làm chậm quá trình chấp nhận
- Các trình duyệt web thời kỳ đầu hỗ trợ giao thức Gopher và hiển thị tài liệu của nó, nhưng đến năm 2000 Gopher về thực chất đã biến mất, chỉ còn một số ít máy chủ được vận hành vì hoài niệm và tính mỉa mai
Trình giả lập terminal và di sản của VDT
- Các trình giả lập terminal của Unix hiện đại gần như là dạng cuối cùng tiếp nối từ các thiết bị hiển thị đời đầu mô phỏng teletype, tức glass TTY và dumb terminal
- Thiết bị đầu tiên thuộc loại này được xuất xưởng vào năm 1969, và mẫu được nhớ đến nhiều là ADM-3 ra mắt năm 1975
- VDT thời kỳ đầu, giống như ASR-33, chỉ có thể hiển thị chữ in hoa; Unix và Linux năm 2018 vẫn giữ hành vi chuyển sang chế độ biến mọi đầu vào thành chữ in hoa nếu tên đăng nhập bắt đầu bằng chữ in hoa
- Các “smart terminal” xuất hiện từ năm 1975 như ADM-3A và DEC VT-100 năm 1978 đã để lại độ rộng 80 ký tự có nguồn gốc từ thẻ đục lỗ, cùng kích thước màn hình mặc định 24x80 hoặc 25x80
- Các chức năng điều khiển như cursor addressing, bold, underline, reverse-video trở nên phổ biến, và để trừu tượng hóa chúng, Unix dùng cơ sở dữ liệu terminfo và thư viện
curses(3) - Từ sau năm 1979, mã điều khiển terminal ANSI dựa trên DEC VT-100 lan rộng, và đến đầu thập niên 1990 tính tương thích ANSI trên VDT đã gần như phổ quát
- Khoảng năm 1992, khi màn hình màu bitmapped của máy tính cá nhân bắt kịp mức dot pitch và khả năng hiển thị văn bản sắc nét của VDT đơn sắc, thị trường VDT sụp đổ nhanh chóng trong điện toán đa dụng
- Dòng lệnh Unix có nguồn gốc từ thời printing terminal trước cả VDT, và đó cũng là lý do người ta dùng từ “printing” với nghĩa xuất ra màn hình
- Các giao diện hai chiều dựa trên ký tự như
vi(1),top(1),mutt(1)là giao diện trực quan cao cấp của thời VDT, và về sau khi thuật ngữ GUI trở nên phổ biến, chúng được gọi là TUI - Screensaver khởi đầu là phần mềm thay đổi hình ảnh màn hình để ngăn hiện tượng phosphor burn-in trên CRT, và với màn hình phẳng thì mục đích ban đầu đó đã không còn
Màn hình bitmapped thời kỳ đầu và mỹ học 8-bit
- Ví dụ đầu tiên của một hệ thống sản phẩm dẫn tới màn hình thao tác theo từng pixel ngày nay là Alto của Xerox PARC năm 1973
- Màn hình của Alto có độ phân giải 608x808 pixel; ký ức cho rằng nó thuộc cỡ 1024x1024 là sự nhầm lẫn với các màn hình đời sau
- Năm 1981, Dandelion đạt 1024x809, nhưng nỗ lực thương mại hóa nó thành Xerox Star đã thất bại
- Năm 1982, Sun-1 của Sun Microsystems cung cấp 1024x800 pixel, và các workstation đẳng cấp Sun trở thành thứ nhiều hacker khao khát sở hữu
- Máy tính màu cá nhân từ năm 1975 đã cung cấp các màn hình bitmapped thô sơ, nhưng chế độ Hi-res của Apple II chỉ đạt 280x192
- Các hacker cần hiển thị văn bản tốt cho việc lập trình và biết đến đồ họa workstation cỡ 1024x1024, nên họ thường xem các màn hình màu dùng TV cho người tiêu dùng như những món đồ chơi gần như vô dụng
- Năm 1984, original Macintosh là chiếc máy tiêu dùng đầu tiên có màn hình bitmapped đơn sắc 512x342, và không lâu sau IBM EGA cùng các máy clone đã cung cấp 640x350 với 16 màu
- Phải đến khoảng năm 1990, màn hình màu 1024x1024 mới chạm tới phân khúc cao cấp của thị trường tiêu dùng, và khi trở nên phổ biến vào khoảng năm 1992, các hãng sản xuất PC bắt đầu gây sức ép lên các nhà cung cấp workstation
- Một số hacker trẻ vào giữa thập niên 1980 cố gắng khai thác tối đa các màn hình màu độ phân giải thấp và phần cứng âm thanh đời đầu; những thành quả như chunky graphics, pixelated sprites, âm thanh chirpy/buzzy sau này được dùng như hoài niệm 8-bit trong game thế kỷ 21
Văn hóa game trước thời GUI
- Trước khi màn hình màu bitmap trở nên phổ biến, đã tồn tại một truyền thống mạnh mẽ của các game vận hành chỉ bằng giao diện văn bản và đồ họa ô ký tự của VDT
- Dòng Trek là một họ game có nguồn gốc từ năm 1971, trong đó người chơi điều khiển Enterprise để chiến đấu với Klingon, Romulan và các phe khác
- Đằng sau giao diện rất thô sơ được thiết kế cho teletype là một wargame tương đối tinh vi, nơi initiative, tactical surprise và logistics đóng vai trò quan trọng
- Colossal Cave Adventure là game phiêu lưu dungeon-crawling đầu tiên của năm 1977, và các câu như “You are in a maze of twisty little passages, all alike” cùng
xyzzyđều xuất phát từ game này- Do PDP-10 dùng tên tệp 6 ký tự, người dùng thời kỳ đầu đôi khi gọi game này là ADVENT
- Cũng có bản port C hiện đại là ADVENT
- Zork là hậu duệ trực tiếp của ADVENT, lần đầu được các hacker MIT phát hành trên PDP-10 vào năm 1979, và sau đó thành công về mặt thương mại
- Những cách nói như zorkmid, Great Underground Empire, grue đều bắt nguồn từ đây
- roguelike là một họ game lấy tên từ Rogue năm 1980, với lối chơi chiến đấu với quái vật và tìm kho báu trong hầm ngục dạng bản đồ nhìn từ trên xuống
- Hack xuất hiện năm 1982, Nethack năm 1987
- Nethack là một trong những chương trình sớm nhất có nhóm phát triển được tổ chức một cách có chủ ý theo mô hình cộng tác phân tán qua Internet, và tính mới đó được phản ánh trong tên dự án
- Các hậu duệ của Rogue là những game TUI phổ biến và thành công nhất; dù đã biến mất khỏi hiểu biết phổ thông từ giữa thập niên 1990, chúng vẫn duy trì được một nhóm fan tận tâm nhỏ cho đến ngày nay
Cấu trúc bit của ASCII và ký tự điều khiển
- ASCII phát triển từ họ mã ký tự teletype đầu thập niên 1960, và vì 127 code point thấp của Unicode được thiết kế là ASCII nên nó có khả năng còn sống rất lâu
- Nếu bạn biết UTF-8, thì mọi tệp ASCII cũng đều là tệp UTF-8 hợp lệ
- Phím bổ trợ Control về cơ bản xóa 3 bit cao của ký tự đầu vào, chỉ giữ lại 5 bit thấp rồi ánh xạ nó thành ký tự điều khiển trong khoảng 0~31
Ctrl-SPACE,Ctrl-@, `Ctrl-`` đều có nghĩa là NUL
- Những bàn phím rất cổ triển khai Shift theo cách bật/tắt 32 hoặc 16 bit tùy phím, vì thế quan hệ giữa chữ thường và chữ hoa, cũng như giữa số và ký hiệu trong ASCII có tính quy luật
- ASCII nguyên bản năm 1963 khác với ASCII 1967 hiện dùng; nó không có tilde và vertical bar,
5Ekhông phải caret mà là up-arrow, còn5Fkhông phải underscore mà là left arrow - Trong các ký tự điều khiển 0~31, nhiều ký tự là tàn dư của giao thức teletype; một số còn tồn tại trong văn bản hay tập quán Unix, số khác còn lại trong các giao thức dữ liệu nhị phân
NUL: ký tự kết thúc chuỗi CEOT/Ctrl-D: nhập end of file trên terminal UnixBEL/Ctrl-G: chuông của teletype hoặc tín hiệu attention của VDTBS,HT,LF,FF,CR,ESC,DEL: tập ký tự điều khiển tương đối quen thuộcDC1/DC3: từng được dùng cho software flow control XON/XOFF và cũng được triển khai trong Unix, CP/M, DOSSUB/Ctrl-Z: ký tự end-of-file của DOS và Windows, kế thừa từ CP/M và các hệ điều hành minicomputer của DEC; trong Unix nó được dùng làm phím suspend tiến trìnhESC: tiếp tục được dùng làm control sequence introducer cho VT100, ANSI VDT và các terminal emulator hiện đại
- Giá trị
0x7FcủaDELbắt nguồn từ việc trên paper tape, người ta có thể ghi đè bất kỳ ký tự ASCII nào bằng 7 lỗ đục; tape reader sẽ bỏ qua DEL và NUL - Phím Meta hoặc Alt trên VDT thường cộng thêm 128 vào ASCII keycode, nhưng các terminal emulator hiện đại cũng thường dùng cách chèn
ESCtrước phím đã được sửa đổi - Có thể xem cấu trúc bit của ASCII bằng ascii(1), và các bảng ASCII trong bài cũng được tạo bằng công cụ này
Sự ra đời chậm chạp của cộng tác phân tán
- Ngày nay, chúng ta coi phân tán version control công khai và cộng tác từ xa là điều hiển nhiên, nhưng các công cụ nền tảng và tập quán sử dụng của nó đã mất rất lâu mới hình thành
- Một trong những tổ tiên ban đầu là việc chia sẻ tape của DECUS, tức Digital Equipment Corporation Users' Group, được thành lập năm 1961
- Người dùng DEC lưu hành các magnetic tape chứa phần mềm public-domain, và đến năm 1976 thì tập quán này đã được định hình
- Tập quán
READMEđi vào thế giới Unix qua USENET, nhưng có vẻ là dấu vết lan truyền từ các tape DECUS
- Trong thập niên 1970 đã có các hình thức cộng tác phần mềm học thuật như gửi mã nguồn qua email và đưa bản phát hành lên các FTP site
- Email mạng được phát minh năm 1971, và đến năm 1973 đã được dùng rộng rãi đến mức chiếm 75% lưu lượng ARPANET
- TeX của Donald Knuth là một ví dụ tiêu biểu còn tồn tại từ giai đoạn này, bắt đầu năm 1978
- Sau năm 1980, việc công khai source code trên các USENET newsgroup chuyên dụng và nhận patch từ người đóng góp bên ngoài qua email nhanh chóng trở thành tập quán
comp.sources.unixlà nơi thường nhật để các hacker Unix tìm mã mới
- Để có phát triển phi tập trung hoàn chỉnh cần có version control, patching và forge
- SCCS ra đời năm 1972 nhưng đến 1977 mới ra ngoài Bell Labs, và giấy phép độc quyền đã làm chậm sự lan rộng của nó
- RCS là lựa chọn thay thế có thể tái sử dụng tự do, xuất hiện năm 1982
patch(1)ra đời năm 1984; trước đó, việc gửi cả tệp đã thay đổi là chuyện phổ biến
- Nethack là game roguelike khởi đầu năm 1987, và là một trường hợp phát triển hoàn toàn phân tán sớm, trong đó các nhà phát triển gửi cho nhau toàn bộ tệp rồi đến các patch qua email, đồng thời dùng SCCS/RCS để quản lý các bản sao cục bộ
- CVS xuất hiện năm 1990, và sau khi được bổ sung khả năng hoạt động từ xa qua mạng vào năm 1993, các dự án lớn như FreeBSD và NetBSD đã nhanh chóng tiếp nhận nó
- Linux được công bố năm 1991 như một nỗ lực cộng tác phân tán, nhưng giai đoạn phát triển đầu tiên vẫn theo kiểu patch qua email như Nethack, và khi đó chưa có kho lưu trữ Linux công khai
- SourceForge xuất hiện năm 1999 như software forge chuyên dụng đầu tiên; ban đầu chỉ hỗ trợ CVS nhưng đã thúc đẩy việc tiếp nhận Subversion, ra mắt năm 2000
- Subversion trở thành hiểu biết phổ thông trong giai đoạn 2000~2005, rồi khi Linus Torvalds tạo ra Git vào năm 2005, các hệ thống quản lý phiên bản trước đó nhanh chóng trở nên lỗi thời
Dòng thời gian cần ghi nhớ
- Năm 1969, Ken Thompson bắt đầu công việc sau này trở thành Unix, chiếc VDT thương mại đầu tiên được xuất xưởng, và gói tin đầu tiên được trao đổi trên ARPANET
- Năm 1970, DEC PDP-11 được xuất xưởng và sau đó tạo ảnh hưởng lớn đến các dòng kiến trúc bao gồm Intel và ARM
- Năm 1971, email mạng và việc sử dụng ký hiệu
@được phát minh trên ARPANET thời kỳ đầu - Năm 1973, Xerox Alto tiên phong cho workstation, một máy tính cá nhân nối mạng với màn hình độ phân giải cao và chuột
- Năm 1977, Unix được port sang Interdata, trở thành phiên bản đầu tiên có phần lớn kernel được viết bằng C; SCCS được phát hành; và Colossal Cave Adventure được xuất xưởng
- Năm 1980, Rogue được phát minh và USENET ra đời
- Năm 1981, IBM PC được xuất xưởng, và TCP/IP được triển khai trên VAX-11/780 của 4.1BSD Unix, khiến ARPANET và văn hóa Unix bắt đầu hội tụ
- Năm 1983, PDP-10 bị hủy bỏ và ARPANET, sau khi trải qua các thay đổi kỹ thuật, đã trở thành Internet
- Năm 1987 chứng kiến Great Renaming của USENET, sự ra đời của Perl, và việc khởi động dự án Nethack
- Năm 1991, Linux và World Wide Web lần lượt ra đời, còn Python được phát minh
- Năm 1993, Linux có được khả năng TCP/IP và chuyển từ một món đồ chơi cho người thích mày mò thành một hệ điều hành nghiêm túc; việc AOL mở USENET đã khởi đầu “September That Never Ended”; còn Mosaic bổ sung đồ họa và hình ảnh cho Web
- Năm 1994, Internet đại chúng thực sự bùng nổ ở Mỹ và USB được công bố
- Giai đoạn 1995~1996 là đỉnh cao của văn hóa UUCP/USENET và BBS, đồng thời cũng là lúc nó sụp đổ dưới áp lực của Internet đại chúng
- Năm 1999, SourceForge ra mắt, và khi Linux chạy được trên PC, thị trường workstation Unix độc quyền của Sun và các hãng khác đã sụp đổ
- Năm 2005, các nhà sản xuất lớn ngừng sản xuất CRT và chuyển sang flat-panel; AOL ngừng hỗ trợ USENET; và Git được phát hành lần đầu
- Giai đoạn 2007~2008, sự chuyển đổi sang 64 bit trên PC đại chúng đã khép lại kỷ nguyên 32 bit, còn iPhone và Android lần đầu được xuất xưởng cùng với các hệ điều hành dựa trên Unix
1 bình luận
Các ý kiến trên Hacker News
Điều thú vị là cách bài viết này liên hệ với thế giới hiện đại khá thiếu chính xác. Ví dụ, ngay sau khi giải thích rằng tiền tố lệnh Hayes
ATcó đặc tính hữu ích cho việc tự đồng bộ tốc độ đường truyền, bài lại nói rằng đến năm 2017 lệnh AT vẫn được dùng để điều khiển modem di động 3G/4GNhưng modem hiện đại không được kết nối nối tiếp, và cũng không có khái niệm tốc độ đường truyền. Đặc tính này không liên quan đến phần cứng hiện đại; cách giải thích rằng việc mở rộng codebase cũ sang môi trường mới dễ hơn nghe hợp lý hơn nhiều
Câu “IoT devices still speak RS-232” cũng sai một cách nguy hiểm. RS-232 dùng điện áp dương cho 0, điện áp âm cho 1, mỗi mức nằm trong khoảng 3–15V, nên nếu nối trực tiếp RS-232 vào giao tiếp nối tiếp của thiết bị IoT hiện đại thì rất có thể sẽ làm hỏng thiết bị. Phần mà serial đời cũ và cổng serial của thiết bị hiện đại chia sẻ nằm ngoài phạm vi RS-232; chẳng hạn framing 8N1 không do RS-232 định nghĩa
Câu “mọi tệp ASCII đều là UTF-8 hợp lệ” cũng mơ hồ. ASCII là một bộ ký tự, không định nghĩa biểu diễn trên đĩa; một tệp ASCII lưu bằng cách đóng gói ký tự thành 7 bit không phải là UTF-8 nếu không xử lý thêm. Xét việc trước đó bài đã nói đến nhiều độ dài word khác nhau và các định dạng truyền không 8-bit-clean, đây là một lập luận kỳ lạ
Nói rằng Git nhanh chóng khiến mọi hệ thống quản lý phiên bản trước đó trở nên lỗi thời cũng là phóng đại nếu nghĩ đến Perforce. Git là cải tiến lớn so với CVS và SVN, nhưng nói nó biến tất cả những gì trước đó thành đồ bỏ đi thì có vẻ là một nhận định không biết đến một phần lớn của ngành phần mềm
Tất nhiên đây là kiểu bắt bẻ quá mức, nhưng nếu giọng điệu của toàn bài là tỏ ra sành sỏi và xét nét tỉ mỉ, thì phê bình lại bằng cùng tiêu chuẩn cũng không bất công
Nói rằng modem hiện đại không được kết nối nối tiếp cũng không đúng. Chỉ là không nhất thiết ở dạng gọi là RS-232; vài năm trước người ta thường dùng đường USB, và USB cũng là bus nối tiếp
Lệnh AT vẫn được dùng trong gần như mọi modem, kể cả trong chiếc điện thoại trong túi bạn. Đó là cách modem di động thiết lập cuộc gọi trên mạng điện thoại, và
ATDTlâu đời vẫn tiếp tục được dùng để thiết lập cuộc gọi mạng. Bộ lệnh AT vốn dùng để điều khiển các thuộc tính cuộc gọi như thiết lập cuộc gọi, tốc độ tối đa và giao thức được phép; tự thương lượng là một bước riêng ở tầng mạng/modem. Modem ngày xưa cho bạn nghe quá trình đó qua loa, còn bây giờ chỉ là bạn không nghe thấy nữaViệc các bộ ký tự như vậy được vận chuyển trên các giao thức khác ra sao nằm ngoài phạm vi định nghĩa
Mặc định là đường
115200 8n1, tốc độ cũng có thể đổi, và cũng có tự nhận tốc độ. Sau khi modem báo trạng thái sẵn sàng qua một đường riêng, nếu gửiATở tốc độ mong muốn thì thường đến lần thứ ba sẽ có phản hồiTheo nghĩa đó, hiện nay Git trên thực tế là hệ thống quản lý phiên bản duy nhất được dùng cho cộng tác phân tán trên mã nguồn
Bổ sung từ một lão làng: với modem điện thoại, 56K thật sự là mức tối đa. Bên trong mạng điện thoại, các mẫu 8 bit được truyền 8 nghìn lần mỗi giây, tức 64Kbps, nhưng đôi khi bit thấp bị lấy mất để dùng cho tín hiệu khác và khách hàng dùng điện thoại không nghe thấy
Thay vì cố đồng bộ modem với những bit bị lấy mất đó, dùng 7 bit đáng tin cậy thì dễ hơn, nên thành 56Kbps. https://en.wikipedia.org/wiki/Robbed-bit_signaling
9600bps được dùng trên thực tế làm tốc độ terminal là một thông lệ còn lâu đời hơn modem 9600bps. Vào khoảng giữa đến cuối thập niên 80, modem 9600bps là món rất xịn; với người dùng terminal thì đủ nhanh, đồng thời là tốc độ các terminal thời đó còn chịu được. Một terminal mà tôi nhớ là Volker-Craig 4404 không theo kịp 9600bps, nên phải hạ xuống khoảng 4800bps
Bộ ghép kênh terminal của máy mini thường gom truyền khi có thể: dùng DMA lấy cả cụm ký tự từ bộ nhớ để gửi, rồi chỉ gửi interrupt “xong” cho CPU. Ngay cả ở chế độ ký tự, nó chỉ báo CPU khi bộ đệm nhận đầy hoặc khi có ký tự theo thứ tự như carriage return đi vào
Vì vậy nhiều mainframe và máy mini dùng terminal chế độ khối. Ứng dụng dùng API biểu mẫu, còn chỉnh sửa và nhập liệu được xử lý trên terminal. Máy tính gửi toàn bộ biểu mẫu xuống terminal; người dùng sửa lỗi và thậm chí hoàn tất kiểm tra như trường số/chữ-số, rồi bằng thao tác “xong” rõ ràng mới gửi nội dung các trường về máy tính
Ngay cả khi sử dụng tương tác hoàn toàn, các hệ thống này vẫn chuộng line mode, nơi nội dung dòng hiện tại chỉ được truyền ở một số thao tác nhất định và việc chỉnh sửa dòng diễn ra trên terminal. Chế độ “raw” kiểu UNIX có overhead quá lớn so với số người dùng mà hệ thống phải gánh, dù chi phí terminal có nhỉnh hơn một chút
Buồn là tôi dùng board 1200, còn chú tôi nói modem đầu tiên của ông ấy là 300
Tôi còn nhớ cả thiết lập 110, có lẽ còn ngược về tận chiến dịch cầu hàng không Berlin năm 1948
Lần đầu tôi chạm vào việc dùng lệnh AT trên modem 4G, thật sự đã bật cười. Cảm giác quen tay vẫn còn nguyên. Chỉ hơi tiếc là không còn quay số và tiếng modem nữa
Thật ngạc nhiên là ngành modem 3G/4G đã không tạo ra được cách tốt hơn để nói chuyện với thiết bị. Ngay cả ISDN cũng từng có một API tử tế được triển khai rộng rãi
Dù sao thì cảm giác hoài niệm, kính nể và kinh hãi trộn lẫn theo tỷ lệ ngang nhau
https://docs.espressif.com/projects/esp-at/en/latest/esp32/A...
Dù vậy vẫn còn cổng giao tiếp ảo để nói chuyện bằng AT, và với một số tác vụ chẩn đoán thì có thể vẫn cần đến nó
Thiết lập kết nối dữ liệu bằng QMI/MBIM dễ và hiệu quả hơn nhiều so với loay hoay với AT và PPP
Thay vì nói “có thể tìm thấy kho lưu trữ USENET lịch sử trên Google Groups”, tôi khuyên dùng archive.org. Có nhiều bộ sưu tập tuyệt vời lưu các nhóm USENET dưới dạng file mbox và có thể tải xuống
Chỉ cần cài thứ gì đó như
mboxgrep, hoặc nhập vào trình đọc mail, hoặc đọc như file văn bản cũng đượcVí dụ ở đây
https://archive.org/details/usenet-comp
cd ..https://archive.org/details/usenethistorical
Vào giữa thập niên 1980, trên một máy tính của một trường đại học ở London (hình như là CDC Cyber của Imperial), tôi đã thử kết nối sang máy tính của một trường khác (hình như là Queen Mary) để dùng một gói đại số ký hiệu chỉ có trên máy minicomputer Unix
Tôi mất trọn 2 tiếng chỉ để tìm đúng thiết lập terminal và cấu hình cho các phần mềm trung gian, và cảm thấy thà tự code những gì có thể làm được trên một máy 8-bit 2MHz 64K còn hơn
Phần mềm có vấn đề “cứ tiếp tục chất lên trên”. Trong xây dựng, ta có thể tái sử dụng tòa nhà và các thành phần hiện có, nâng cấp vài thứ bên trong, hoặc phá đi rồi xây mới
Nhưng phần mềm thì không làm vậy. Nó lắp nguyên ống chì, dây CAT-3, vật liệu cách nhiệt bằng lông ngựa, cửa kính đơn vào một tòa nhà chọc trời mới. Có lẽ vì cứ tiếp tục xây trên công nghệ cũ hàng chục năm thì dễ hơn là phát minh ra PVC, CAT-6, vật liệu cách nhiệt phun và kính ba lớp tốt hơn; hoặc vì chưa muốn biến các tiêu chuẩn mà những tòa nhà cũ vẫn dùng thành lỗi thời, còn chủ nhà thì không muốn trả chi phí nâng cấp
Kết quả là có một tòa nhà chọc trời hoạt động được, nhưng không hiểu sao lại phải đào tạo kỹ sư mới về vật liệu cách nhiệt bằng lông ngựa
Vì thế phần lớn chỉ dừng lại ở các dự án nghiên cứu thử nghiệm, và nếu may mắn thì những phần tốt nhất sẽ dần dần được đưa vào các dự án hiện hữu theo thời gian
Điều bị bỏ lỡ là lý do vì sao khá nhiều “công nghệ cũ kỹ và tệ hại” này vẫn còn tồn tại. Chúng đã chịu được phép thử của thời gian. Công nghệ hiện đại không giữ chúng lại chỉ vì hoài cổ thuần túy. Nhìn chung, chúng vẫn hữu ích vì giải quyết vấn đề một cách thanh nhã, hoặc cung cấp một lớp trừu tượng hữu ích trên các hệ thống hiện đại hơn, hoặc vì không thể tránh việc tương thích với các hệ thống hiện có
Tất nhiên những công nghệ cũ này cũng có khuyết điểm. Vài chục năm nữa, toàn bộ code của các bạn cũng sẽ như vậy
XKCD về tiêu chuẩn là cái nào nhỉ?
Là người sinh năm 1997 và đang làm trong ngành phần mềm, một điều tôi học được là lĩnh vực kỹ nghệ phần mềm đôi khi gần với việc hiểu lịch sử của hệ thống. Đọc những bài như thế này thật hay vì đôi lúc một khái niệm bỗng nhiên khớp vào đúng chỗ
Với tư cách người làm hệ thống nhúng, rất nhiều nội dung này đến nay vẫn còn liên quan. Bản thân RS-232, tức đặc tả tầng vật lý, ít được dùng hơn, nhưng giao thức truyền thông UART bên dưới nó thì vẫn rất khỏe
Ví dụ, bo mạch phát triển Beaglebone có thể khởi động bằng cách tải bootloader lên qua XModem
Thực ra ASR-33 ban đầu có một giao diện TTY cũ hơn nữa từng được dùng, gọi là vòng dòng điện, bắt nguồn từ mạch điện báo. Trong thập niên 1970, các ASR-33 chế độ kép hỗ trợ cả RS-232 bắt đầu xuất hiện, và cuối cùng RS-232 đã thay thế hoàn toàn vòng dòng điện
KIM-1(https://en.wikipedia.org/wiki/KIM-1) dùng phương thức này, và giao diện vòng dòng điện(https://en.wikipedia.org/wiki/Current_loop) hiện vẫn còn khá phổ biến trong bối cảnh điều khiển công nghiệp. Nó cũng là nền tảng của MIDI(https://en.wikipedia.org/wiki/MIDI#Electrical_specifications)
FF (Form Feed), tức Ctrl-L, được nhiều thiết bị đầu cuối hiển thị video diễn giải là lệnh “xóa màn hình”, và các trình giả lập terminal bằng phần mềm đôi khi vẫn còn làm như vậy
Điều này thường được dùng trên Usenet để đánh dấu spoiler. Vì phần còn lại của thông điệp sẽ không hiển thị cho đến khi người dùng chuyển tiếp bằng phím như PgDn. Trên màn hình nó hiện dưới dạng
^L, nên có thể biết là phía sau còn nội dung; và cho đến khi^Lđược cuộn ra khỏi màn hình, phần còn lại của màn hình sẽ bị xóa