1 điểm bởi GN⁺ 2 giờ trước | 1 bình luận | Chia sẻ qua WhatsApp
  • Principia Softwarica là một loạt sách diễn giải mã nguồn của kernel, shell, hệ thống cửa sổ, compiler, linker, editor, browser và debugger của Plan 9 from Bell Labs, giúp hiểu cách máy tính vận hành bên trong
  • Mỗi cuốn sách được tạo từ một literate program chứa cả mã nguồn lẫn tài liệu, trong đó mã thực tế và sách được tự động sinh ra từ cùng một tài liệu
  • Toàn bộ loạt gồm 205,081 LOC, 82,014 LOE, 6,312 trang, và mục tiêu là đạt LOE/LOC 1.0 bằng cách ghép một dòng giải thích cho mỗi dòng mã
  • Plan 9 có toàn bộ hệ thống chỉ 183K LOC, nhỏ gọn, với phong cách C nhất quán và áp dụng đồng đều các ý tưởng như “mọi thứ đều là tệp”, namespace theo từng tiến trình và tính trong suốt mạng, biến toàn bộ hệ điều hành thành một đối tượng có thể giải thích được
  • Mã nguồn dự án được công khai tại github.com/aryx/principia-softwarica, và Getting Started cung cấp cách build và chạy Plan 9 bằng Docker hoặc từ mã nguồn

Tổng quan dự án

  • Principia Softwarica là một loạt sách giúp lập trình viên hiểu cách máy tính vận hành bên trong bằng cách diễn giải chi tiết toàn bộ mã nguồn của các chương trình hệ thống cốt lõi mà họ sử dụng
  • Tất cả chương trình đều được lấy từ Plan 9 from Bell Labs, một hệ điều hành được thiết kế như hậu duệ của Unix, với tiền đề cốt lõi là mã nguồn nhỏ gọn và thanh nhã
  • Các chương trình được đề cập bao gồm kernel, shell, hệ thống cửa sổ, compiler, linker, editor, trình duyệt web và debugger; mỗi chương trình được tổ chức thành một cuốn sách riêng
  • Cuốn sách vừa là tài liệu giải thích cách hiện thực, vừa chính là bản thân hiện thực đó
    • Mỗi chương trình được tạo ra từ một literate program chứa cả mã nguồn lẫn tài liệu, và cả mã thực tế lẫn cuốn sách đều được tự động sinh ra từ tài liệu này
    • Phần giải thích riêng về literate programming có tại more about literate programming
  • Mã nguồn dự án được công khai tại github.com/aryx/principia-softwarica

Vì sao điều này cần thiết

  • Khoảng trống trong giáo dục

    • Khi nhập ls trong cửa sổ terminal, câu trả lời cho việc điều gì xảy ra sẽ đi qua shell, thư viện C, kernel, graphics stack và hệ thống cửa sổ
    • Keith Adams từng là đồng nghiệp tại Facebook và sau này trở thành Chief Architect của Slack, đã dùng câu hỏi này làm câu hỏi phỏng vấn. Toàn bộ quá trình lần theo có trong The Journey of ls
    • Ngày nay, “full-stack” thường có nghĩa là React, Node và cloud, nhưng ở tầng stack thực sự bên dưới còn có compiler, linker, kernel và system call
    • Có nhiều giáo trình xuất sắc giải thích các khái niệm của chương trình hệ thống, nhưng gần như không có tài liệu nào cho thấy mã nguồn thực tế, và Principia Softwarica muốn lấp đầy khoảng trống này
  • Tầm quan trọng trong thời đại AI

    • Các công cụ lập trình AI chạy những chương trình như grep, sed, diff, awk, gcc, ld mà Principia Softwarica giải thích hàng trăm lần mỗi ngày
    • Nếu trong công việc lập trình, việc viết mã chiếm 20% và việc hiểu chiếm 80%, thì khi AI đảm nhận 20%, phần 80% là hiểu mã thực sự làm gì, xuống đến tận phần cứng, càng trở nên quan trọng hơn
    • Ẩn dưới đó là nhận thức rằng nếu máy móc đã trải qua deep learning thì con người cũng cần học thật sâu

Sách và phạm vi

Lý do chọn Plan 9

  • Plan 9 đủ nhỏ để có thể hiểu toàn bộ hệ điều hành một cách thực tế, được viết theo phong cách C nhất quán và áp dụng đồng đều một số ý tưởng mạnh mẽ
    • Mọi thứ đều là file
    • Sử dụng namespace theo từng tiến trình
    • Cung cấp tính trong suốt mạng
  • Dù không hào nhoáng như macOS hay Windows, về bản chất nó cung cấp cùng những dịch vụ cốt lõi
    • Kernel quản lý tiến trình và bộ nhớ
    • Hệ thống cửa sổ
    • Shell
    • Trình biên dịch
    • Mạng
    • Ứng dụng đồ họa
  • Toàn bộ hệ thống Plan 9, bao gồm kernel, trình biên dịch, shell, hệ thống cửa sổ, v.v., chỉ có 183K LOC, gần như nhỏ hơn vim 350K LOC tới 2 lần
  • Nếu coi một cuốn sách 400 trang bao quát khoảng 12K LOC, thì Principia Softwarica có thể bao quát toàn bộ Plan 9 trong khoảng 15 cuốn
    • Một chương trình đơn lẻ như gdb sẽ cần số sách nhiều hơn 10 lần
    • gcc sẽ cần số sách nhiều hơn 100 lần
  • Wayland là bản thay thế hiện đại cho X11 và Clang là bản thay thế hiện đại cho GCC, nhưng chỉ “viết lại sạch sẽ” không khiến chương trình nhỏ hơn
  • Cách tiếp cận của Plan 9, được thiết kế ngay từ đầu với mục tiêu đơn giản, khiến mọi dòng đều có thể được giải thích bằng sách

Cách áp dụng những gì đã học sang các hệ thống khác

  • Không nhất thiết phải dùng trực tiếp Plan 9; chỉ cần hiểu một hệ điều hành nhỏ và thanh lịch là có thể có trực giác về Linux, macOS và Windows
  • Kernel, trình biên dịch, linker, shell, editor, debugger, GUI toolkit và network stack đều giải cùng những bài toán nền tảng; dù mã nguồn là 5 nghìn dòng hay 500 nghìn dòng thì bản chất vấn đề vẫn như nhau
  • Đọc trình biên dịch C của Plan 9 giúp có được vốn từ vựng cần thiết khi khám phá GCC
  • Nếu có thể hiểu linker của Plan 9 trong một lần, thì cách LLD xử lý relocation sẽ không còn quá áp đảo mà trở thành thứ có thể đọc được
  • Quan sát cách acid đọc symbol table và lần theo stack sẽ giúp biết cần nhìn gì trong GDB
  • Các triển khai nhỏ cung cấp một mô hình làm việc để phân biệt độ phức tạp bản chất với độ phức tạp ngẫu phát trong các codebase lớn
  • Các ý tưởng của Plan 9 đã lan rộng từ lâu
    • UTF-8 do Thompson và Pike tạo ra cho Plan 9
    • /proc đến từ Plan 9
    • Linux namespaces, nền tảng của Docker và container, đến từ Plan 9
    • Go do Pike và Thompson tạo ra, và goroutine lấy cảm hứng từ libthread của Plan 9
    • Giao thức 9P được dùng trong WSL2
  • Các công cụ grep, sed, awk, diff, cc, ld mà Principia Softwarica giải thích là những công cụ lập trình viên dùng hằng ngày, và cùng các khái niệm đó được thể hiện rõ ràng hơn nhiều trong Plan 9
  • plan9port mang grep, sed, awk của user space Plan 9 sang Linux và macOS
  • goken9cc cho phép dùng toolchain C của Plan 9 trên Linux, macOS và Windows để tạo binary native cho chính các nền tảng đó

Mã nguồn và chạy thử

  • github.com/aryx/principia-softwarica — mã Plan 9 và các chương trình literate được dùng trong Principia Softwarica
  • Getting Started — cách build và chạy Plan 9 bằng Docker hoặc từ mã nguồn
  • The Journey of ls — theo dõi cách một lệnh đơn giản đi qua từng lớp của hệ thống và cách các cuốn sách kết nối với nhau

Bản port OCaml và công cụ hỗ trợ

  • Sau khi viết nhiều cuốn sách, một số chương trình đã được port sang OCaml, một ngôn ngữ hàm kiểu tĩnh
  • Động lực ban đầu là để hiểu mã C tốt hơn
    • Khi chuyển một chương trình sang ngôn ngữ khác, sẽ lộ ra phần nào là bản chất và phần nào là thứ phụ trợ
    • Lỗi trong bản port làm lộ những điểm tinh vi vốn ẩn trong bản gốc
  • Bản port OCaml đã phát triển thành dự án riêng là XIX, có website riêng và một loạt sách lập trình literate để trình bày các công cụ phiên bản OCaml
  • syncweb — công cụ lập trình literate dùng để tạo tất cả các cuốn sách, là hậu duệ của Noweb
  • goken9cc — trình biên dịch chéo C để build Plan 9 trên Linux, macOS và Windows, là hậu duệ của Kencc

Công trình liên quan và điểm khác biệt

  • Project Oberon là công trình gần gũi nhất về mặt tinh thần với Principia Softwarica ở chỗ trình bày toàn bộ hệ điều hành cùng toàn bộ mã nguồn, bao gồm cả trình biên dịch và hệ thống cửa sổ
    • Oberon là một thế giới tự hoàn chỉnh, đẹp như Smalltalk nhưng bị cô lập, vì chỉ có thể chạy các chương trình Oberon
    • Plan 9 và Unix là các hệ thống đa dụng có thể biên dịch và chạy chương trình viết bằng bất kỳ ngôn ngữ nào
    • Oberon không có mạng và chạy trên phần cứng tùy biến
    • Principia Softwarica bao quát phạm vi rộng hơn, từ trình biên dịch, linker, shell, debugger, đồ họa đến mạng trên một hệ điều hành thực
  • The Elements of Computing Systems còn được biết đến với tên Nand2Tetris, xây dựng máy tính từ cổng NAND đến Tetris
    • Đây là tài liệu giáo dục xuất sắc, nhưng phần cứng và phần mềm đều là CPU đồ chơi, OS đồ chơi và ngôn ngữ đồ chơi được tạo ra cho mục đích giảng dạy
    • Principia Softwarica chọn cách tiếp cận ngược lại: giải thích mã thật và hệ điều hành thật chạy trên phần cứng thật
  • Computer Systems: A Programmer's Perspective được biết đến là CS:APP, là giáo trình xuất sắc giải thích các khái niệm lập trình hệ thống như bố trí bộ nhớ, linking, bộ nhớ ảo và đồng thời
    • CS:APP dừng ở mức khái niệm và không cho thấy mã nguồn của kernel thật, linker thật hay trình biên dịch thật
    • Principia Softwarica bổ sung cho CS:APP bằng cách giải thích mã nguồn đó theo từng dòng

Lịch sử phát triển và tác giả

  • Tháng 3 năm 2026, website Principia Softwarica được công bố
  • Năm 2025, dự án được khởi động lại để có thể build và chạy trở lại trên QEMU và Raspberry Pi, đồng thời bổ sung Dockerfile và CI
  • Từ 2019 đến 2024 có giai đoạn gián đoạn do công việc tại Semgrep
  • Năm 2017, kernel được port sang Raspberry Pi và công việc cho các sách Shell và Graphics được tiến hành
  • Năm 2016, sách Build System được hoàn thành và các chương trình literate Libcore và Compiler đầu tiên được tạo ra
  • Năm 2015, các sách Assembler và Linker được hoàn thành và tác giả đã gặp Knuth
  • Năm 2014, dự án bắt đầu với việc fork Plan 9, cross-compile trên macOS và tạo chương trình literate đầu tiên
  • Principia Softwarica do Yoann Padioleau viết, và mã nguồn bao gồm mã của Ken Thompson, Rob Pike, Dave Presotto, Phil Winterbottom, Tom Duff, Andrew Hume và Russ Cox
  • Cũng như Principia Mathematica bàn về nền tảng của toán học, mục tiêu của Principia Softwarica là bàn về các chương trình hệ thống nền tảng

1 bình luận

 
Ý kiến trên Lobste.rs
  • Tiêu đề rõ ràng là tham chiếu đến Principia Mathematica, nhưng “softwarica” không phải tiếng Latin
    Nó giống như một lời gọi hàm C được viết cho có vẻ Latin nhưng lại vỡ như foo(bar; baz]; một tiêu đề hay hơn có thể là “Principia Programmatum” (các nguyên lý của chương trình) hoặc “Principia Artis Programmatoriae” (các nguyên lý của nghệ thuật lập trình)

    • Nói chính xác thì “Programmatum” cũng không tồn tại, và từ gần nhất là “Programmum” lại có nghĩa là “công bố, sắc lệnh”, chứ không phải chương trình
      Tiếng Latin không có từ chỉ phần mềm hay lập trình, nên tự tạo từ mới cũng không sao
      “Programmum/Programmatum” nghe hợp lý hơn là vì tiếng Anh “program” đi từ tiếng Pháp “programme”, rồi ngược về tiếng Latin “programmum”
      Nếu lấy trực tiếp hơn từ tiếng Pháp logiciel thì nó là “logique” (logic) + “iel” (hậu tố từ matériel), và có thể nối nó với tiếng Latin “logica”, “materialis/materia” để chuyển “program” thành “logicia”, còn “programs” thành “logicium”
      Tuy vậy, tôi chỉ học tiếng Latin 2 năm hồi trung học nên cũng không dám chắc
    • “Principia Programmatica” có vẻ cũng ổn
    • Tôi nghĩ điểm mấu chốt là cố tình làm hỏng tiếng Latin
      Đây đã là một ngôn ngữ chết, lại còn là tiêu đề tham chiếu đến một dự án thất bại nổi tiếng, nên việc gắn một nhan đề Latin chuẩn chỉnh cho một cuốn sách tiếng Anh ngày nay tự nó đã hơi buồn cười
      Ngay cả với tư cách người từng đọc tiếng Latin khá trôi chảy, tôi vẫn thấy vậy
  • Lúc đầu tôi hơi khựng lại khi thấy nhắc đến Plan 9, nhưng tôi thích phần giải thích chi tiết vì sao tác giả chọn Plan 9
    Tóm lại là vì nó nhỏ, và bản thân lời giải thích đó đọc như một bài quảng bá sách rất hay

    • Tôi tò mò vì sao bạn lại khựng lại ở chỗ nhắc đến Plan 9
  • Tôi thích việc sau khi tác giả port OCaml sang Plan 9, ông ấy đã viết lại một phần lớn user space bằng OCaml để hiểu rõ hơn chuyện gì đang diễn ra trong C
    Trong quá trình đó, mã nguồn lại bất ngờ có thể chạy được cả trên Windows, và tôi cũng tò mò ai là người tài trợ cho công việc này

  • Đây thực sự là một khối lượng công việc khổng lồ đến khó tin
    17 tập, hơn 6.000 trang, mà trông như tất cả mới được công bố tuần trước
    Tôi muốn biết liệu có ai có thêm bối cảnh hay thông tin nền về tác giả không

    • Hãy xem thread này trên 9fans
      https://www.mail-archive.com/9fans@9fans.net/msg45156.html
      Tóm lại là dự án bắt đầu từ năm 2014, và tác giả sẽ trình bày công trình này tại IWP9 vào 13:45 giờ địa phương ngày mai
      http://iwp9.org/#prg
    • Tôi không khỏi nghĩ rằng với độc giả, vài cuốn ngắn hơn có lẽ sẽ hữu ích hơn
      Dĩ nhiên, có lẽ chính tác giả đã học được cực kỳ nhiều trong quá trình này
  • Principia Softwarica là một series sách giải thích cách máy tính hoạt động bên trong bằng cách chú giải chi tiết toàn bộ mã nguồn của các chương trình cốt lõi mà lập trình viên sử dụng
    Kernel, shell, hệ thống cửa sổ, compiler, linker, editor, debugger, v.v. đều được nói riêng trong từng cuốn, và hệ điều hành mục tiêu có vẻ là Plan 9

    • Tóm tắt kiểu “hệ điều hành mục tiêu có vẻ là Plan 9” là rất thiếu chính xác
      Trên trang có ghi Learn Here, Apply Everywhere, và cũng giải thích rằng bạn không cần phải dùng Plan 9
      Ý là nếu hiểu được một hệ điều hành nhỏ gọn, thanh nhã, thì bạn cũng sẽ có trực giác sâu sắc hơn về Linux, macOS, thậm chí cả Windows
  • Tôi hiểu ý tác giả muốn nói, nhưng việc nói “Oberon chỉ chạy được các chương trình Oberon” không hẳn là một hạn chế của hệ thống Oberon
    Về nguyên tắc, bất kỳ ngôn ngữ lập trình nào cũng có thể nhắm đến kiến trúc và runtime đó

  • Tôi hiểu là nó được fork từ Plan 9, nhưng tôi tò mò giữa Plan 9 và Inferno thì bên nào tốt hơn

  • Trông đây là một dự án cực kỳ tham vọng
    Tôi tin rằng đọc mã nguồn tốt, đặc biệt là mã có kèm giải thích về các lựa chọn thiết kế, sẽ giúp người ta trở thành lập trình viên giỏi hơn
    Nếu đó lại còn là mã thuộc một lĩnh vực hơi nằm ngoài chuyên môn của mình thì càng đúng hơn, và thứ này có thể là một công cụ học tập tuyệt vời