16 điểm bởi GN⁺ 2023-08-13 | 2 bình luận | Chia sẻ qua WhatsApp
  • Nhân Linux ngày nay là một dự án mã nguồn mở khổng lồ với 36 triệu dòng, nhưng phiên bản đầu tiên chỉ có 10.239 dòng (nếu bỏ chú thích/dòng trống thì là 8.670)
  • Linux v0.01 nhờ sự gọn gàng của nó nên là điểm khởi đầu rất tốt để học nội bộ của một nhân hệ điều hành kiểu Unix
  • v0.01 chỉ có 66 lời gọi hệ thống
    • Tạo, xóa, ghi tệp/thư mục
    • chmod, chown, pipe, fork, execve
    • Chưa có khái niệm socket nên không hỗ trợ mạng
    • mount vẫn chưa được hiện thực
  • Được hard-code cho kiến trúc Intel 386 (tác giả MINIX đã chỉ trích điều này)
    • strcpy được viết bằng assembly dùng lệnh i386
  • Chỉ hỗ trợ các thiết bị PC/AT
    • CMOS, PIT (Programmable Interval Timer), ATA (PIO), VGA (chế độ văn bản), bàn phím Intel 8042 PS2 (assembly)
    • Khi đó thậm chí còn chưa có thư mục drivers, mọi thứ được hard-code vào các subsystem
  • Trong Makefile có chú thích ghi tên gốc mà Linus từng đặt là nhân "FREAX"
  • Hệ thống tệp chỉ hỗ trợ MINIX (ext được lấy cảm hứng từ MINIX)
  • Trong mã scheduler có một chú thích: "phần này là đoạn mã khá tốt, chạy được trong mọi môi trường nên sẽ không có lý do gì để thay đổi!"
    • Tất nhiên hiện nay nó đã được sửa vì có nhiều cải tiến và thuật toán khác nhau được đưa vào, nên lời tiên đoán này đã sai
  • Phần hiện thực kernel panic chỉ có đúng 5 dòng: in ra "kernel panic: nguyên nhân" rồi dừng hệ thống bằng for(;;)
  • Có đoạn gọi fork(2) trong không gian kernel
    • Trông là vậy, nhưng thực ra ngay trước đó có mẹo move_to_user_mode()
  • Linus không có thiết bị nào có hơn 8Mb RAM (vì bản thân ông không có để thử nên ai có thì tự kiểm tra giúp...)
  • Khó biên dịch bằng toolchain hiện đại
    • GCC có tương thích ngược, nhưng như vậy vẫn chưa đủ
    • Linus có một bản GCC riêng với tùy chọn -mstring-insns (có lẽ là tùy chọn hỗ trợ các lệnh chuỗi của x86)

2 bình luận

 
arfwene 2023-10-31

Thú vị đấy.

 
GN⁺ 2023-08-13
Ý kiến Hacker News
  • Thảo luận về độ phức tạp của Linux hiện đại, đặt câu hỏi liệu mức độ phức tạp lớn gấp 4.500 lần số dòng mã của Linux v0.01 có thực sự cần thiết hay không.
  • Người đọc muốn xem một phân tích trực quan về số dòng mã và chức năng được dùng cho từng mô-đun phần mềm chính của Linux.
  • Có đề xuất nên đọc các codebase kinh điển như Linux, SQLite và vim; phần lớn chúng được viết bởi một người và đã rất thành công hoặc có ảnh hưởng lớn.
  • Giải thích về cách hoạt động của counter trong Linux, cho rằng nó sẽ giảm theo cấp số nhân xuống mức 2 * độ ưu tiên khi tác vụ không thể chạy.
  • Có người kể rằng khi IPO, Redhat đã gửi cho các cổ đông một tấm poster chứa mã nguồn 0.01, và người đọc thấy thú vị khi thỉnh thoảng đem ra đọc.
  • Thảo luận về tính tương thích ngược của GCC (GNU Compiler Collection), với một bình luận rằng trong thời gian dài GCC thậm chí không thể biên dịch các phiên bản trước của chính nó.
  • Người đọc được dẫn tới Linux Kernel Source Code có chú thích rất dày để đọc và hiểu sâu hơn.
  • Có ý kiến cho rằng đọc phiên bản hoạt động đầu tiên của một dự án cực kỳ thành công như Linux là cách tốt để hiểu nó, vì phiên bản đó thường chỉ chứa các chức năng cốt lõi quan trọng nhất mà không có quá nhiều lớp trừu tượng hóa/khái quát hóa.
  • Một số người đọc nhận ra mã nguồn dùng dấu cách thay vì tab, và suy đoán rằng có thể Torvalds về sau mới trở thành người ủng hộ tab.
  • Độ sâu và tần suất của các chú thích trong mã được đánh giá cao vì giúp người đọc dễ tiếp cận hơn, đồng thời cũng có sự tò mò liệu đã có ai biên dịch thành công hay chưa.