16 คะแนน โดย GN⁺ 2023-08-13 | 2 ความคิดเห็น | แชร์ทาง WhatsApp
  • แม้เคอร์เนลลินุกซ์จะเป็นโอเพนซอร์สขนาดมหึมาที่มี 36 ล้านบรรทัด แต่เวอร์ชันแรกมีเพียง 10,239 บรรทัดเท่านั้น (ถ้าไม่รวมคอมเมนต์/บรรทัดว่าง จะเหลือ 8,670)
  • Linux v0.01 ด้วยความเรียบง่ายของมัน จึงเป็นจุดเริ่มต้นที่ดีสำหรับการเรียนรู้ภายในของเคอร์เนล OS สไตล์ Unix
  • v0.01 มี system call เพียง 66 รายการ
    • สร้าง/ลบ/เขียนไฟล์และไดเรกทอรี
    • chmod, chown, pipe, fork, execve
    • ยังไม่มีการนำแนวคิด socket เข้ามา จึงไม่รองรับเครือข่าย
    • mount ยังไม่ได้ถูก implement
  • ถูก hardcode ไว้กับสถาปัตยกรรม Intel 386 (ผู้เขียน MINIX เคยวิจารณ์เรื่องนี้)
    • strcpy ถูกเขียนเป็นแอสเซมบลีที่ใช้คำสั่ง i386
  • รองรับเฉพาะอุปกรณ์ PC/AT
    • CMOS, PIT (Programmable Interval Timer), ATA (PIO), VGA (text mode), คีย์บอร์ด Intel 8042 PS2 (แอสเซมบลี)
    • ตอนนั้นยังไม่มีโฟลเดอร์ drivers และถูก hardcode ไว้ใน subsystem
  • ใน Makefile มีคอมเมนต์ที่มีชื่อเดิมที่ Linus ตั้งไว้คือ "FREAX" Kernel
  • ระบบไฟล์รองรับเฉพาะ MINIX เท่านั้น (ext ได้แรงบันดาลใจจาก MINIX)
  • ในโค้ด scheduler มีคอมเมนต์ว่า "ส่วนนี้เป็นโค้ดที่ค่อนข้างดีและน่าจะทำงานได้ในทุกสภาพแวดล้อม จึงคงไม่มีเหตุผลต้องเปลี่ยน!"
    • แน่นอนว่าปัจจุบันมีการปรับปรุงและนำอัลกอริทึมหลากหลายแบบเข้ามาใช้แล้ว ดังนั้นคำทำนายนี้จึงไม่เป็นจริง
  • ส่วน implementation ของ kernel panic มีเพียง 5 บรรทัด: พิมพ์ "kernel panic: สาเหตุ" แล้วหยุดระบบด้วย for(;;)
  • มีส่วนที่เรียก fork(2) จาก kernel space
    • แม้จะดูเป็นเช่นนั้น แต่จริง ๆ แล้วมีลูกเล่น move_to_user_mode() อยู่ก่อนหน้า
  • Linus ไม่มีเครื่องที่มี RAM มากกว่า 8Mb (ตัวเองไม่มีจึงทดสอบไม่ได้ เลยบอกให้คนที่มีลองกันเอาเอง..)
  • คอมไพล์ด้วย toolchain สมัยใหม่ได้ยาก
    • แม้ GCC จะพอมี backward compatibility แต่ก็ยังไม่เพียงพอ
    • Linus มี GCC ของตัวเองที่มีออปชัน -mstring-insns (น่าจะเป็นออปชันสำหรับรองรับคำสั่ง string ของ x86)

2 ความคิดเห็น

 
arfwene 2023-10-31

น่าสนใจดีนะ

 
GN⁺ 2023-08-13
ความคิดเห็นจาก Hacker News
  • มีการถกเถียงถึงความซับซ้อนของ Linux ยุคปัจจุบัน พร้อมตั้งคำถามว่าความซับซ้อนที่มากกว่า Linux v0.01 ถึง 4500 เท่าตามจำนวนบรรทัดโค้ดนั้นจำเป็นจริงหรือไม่
  • ผู้อ่านอยากเห็นการวิเคราะห์เชิงกราฟิกเกี่ยวกับจำนวนบรรทัดโค้ดและหน้าที่ของแต่ละโมดูลซอฟต์แวร์หลักใน Linux
  • มีการแนะนำให้อ่านโค้ดเบสคลาสสิกอย่าง Linux, SQLite และ vim ซึ่งส่วนใหญ่เขียนโดยคนคนเดียว และประสบความสำเร็จหรือทรงอิทธิพลอย่างมาก
  • มีคำอธิบายเกี่ยวกับวิธีทำงานของ counter ใน Linux โดยระบุว่าหากงานไม่อยู่ในสถานะพร้อมรัน ค่าจะลดลงแบบเอ็กซ์โพเนนเชียลจนเหลือ 2 * ลำดับความสำคัญ
  • มีรายงานว่า Redhat เคยส่งโปสเตอร์ที่มีซอร์สโค้ด 0.01 ให้ผู้ถือหุ้นในช่วง IPO และผู้อ่านมองว่าน่าสนใจที่จะหยิบมาอ่านเป็นครั้งคราว
  • มีการพูดคุยเรื่องความเข้ากันได้ย้อนหลังของ GCC (GNU Compiler Collection) โดยมีความเห็นว่า GCC ไม่สามารถคอมไพล์เวอร์ชันก่อนหน้าของตัวเองได้อยู่เป็นเวลานาน
  • ผู้อ่านถูกชี้ไปยัง Linux Kernel Source Code ฉบับที่ใส่คำอธิบายประกอบไว้อย่างละเอียด เพื่อให้อ่านและทำความเข้าใจได้ลึกขึ้น
  • มีข้อเสนอว่าการอ่านเวอร์ชันแรกที่ใช้งานได้จริงของโปรเจกต์ที่ประสบความสำเร็จมากอย่าง Linux เป็นวิธีที่ดีในการทำความเข้าใจ เพราะมักมีเพียงฟังก์ชันแกนหลักที่สำคัญที่สุดโดยยังไม่มี abstraction/generalization มากนัก
  • ผู้อ่านบางคนสังเกตว่าในซอร์สโค้ดมีการใช้ช่องว่างแทนแท็บ และคาดว่า Torvalds อาจกลายมาเป็นผู้สนับสนุนแท็บในภายหลัง
  • มีการชื่นชมความลึกและความถี่ของคอมเมนต์ในโค้ด ซึ่งช่วยให้ผู้อ่านเข้าถึงได้ง่ายขึ้น และมีคนสงสัยว่ามีใครคอมไพล์สำเร็จแล้วหรือไม่