ข้าม​ไป​ยัง​เนื้อหา

Linus's Law

มี​ตา​มาก​พอ bug ทุก​ตัว​ก็​ตื้น

Linus’s Law ถูก​บัญญัติ​โดย Eric S. Raymond ใน​บทความ​และ​หนังสือ The Cathedral and the Bazaar (1999) ตั้ง​ชื่อ​เพื่อ​เป็น​เกียรติ​แก่ Linus Torvalds ผู้​ก่อตั้ง Linux kernel ประโยค​ต้นฉบับ​คือ

“Given enough eyeballs, all bugs are shallow” (เมื่อ​มี​สายตา​มาก​พอ bug ทุก​ตัว​ก็​ตื้น)

Raymond ให้​นิยาม​ที่​เป็น​ทางการ​กว่า​นั้น​ไว้​ด้วย​ว่า “Given a large enough beta-tester and co-developer base, almost every problem will be characterized quickly and the fix obvious to someone” — กล่าว​คือ ถ้า​มี​ฐาน​ผู้​ทดสอบ​และ​ผู้​ร่วมพัฒนา​ใหญ่​พอ ปัญหา​แทบ​ทุก​อย่าง​จะ​ถูก​ระบุ​สาเหตุ​ได้​เร็ว และ​มี​ใคร​สัก​คน​มอง​เห็น​ทาง​แก้​ได้​อย่าง​ชัดเจน นี่​คือ​หลักการ​ที่​อธิบาย​ว่า​ทำไม model การ​พัฒนา​แบบ “bazaar” (เปิด​ให้​ทุก​คน​ช่วย​กัน​ตรวจ​และ​แก้) ถึง​เอาชนะ model แบบ “cathedral” (ปิด ควบคุม​โดย​ผู้เชี่ยวชาญ​กลุ่ม​เล็ก) ได้​ใน​หลาย​กรณี​ของ Linux kernel และ​ซอฟต์แวร์​โอเพน​ซอร์ส​ยุค​แรก

หัวใจ​ของ​กฎ​นี้​คือ ปัญญา​รวม​หมู่ (collective intelligence) ของ​กลุ่ม​คน​ที่​หลากหลาย​และ​มาก​พอ มี​แนวโน้ม​เหนือ​กว่า​การ​พึ่งพา​ผู้เชี่ยวชาญ​เพียง​ไม่​กี่​คน เพราะ​แต่ละ​คน​มี​พื้นเพ ประสบการณ์ และ​มุมมอง​ต่าง​กัน สิ่ง​ที่​คน​หนึ่ง​มอง​ข้าม อีก​คน​อาจ​สะดุด​เจอ​ทันที เมื่อ​นำ​แนวคิด​นี้​มา​ใช้​กับ​ซอฟต์แวร์ ก็​หมายความ​ว่า​ยิ่ง​มี​คน​อ่าน code มาก​เท่าไร โอกาส​ที่ bug ข้อ​ผิดพลาด​เชิง​ตรรกะ หรือ​ช่อง​โหว่​ด้าน​ความ​ปลอดภัย​จะ​ถูก​พบ​เร็ว​ก็​ยิ่ง​สูง​ขึ้น — เป็น​รากฐาน​ที่​อธิบาย​พลัง​ของ open source, collective code ownership และ​วัฒนธรรม code review

แต่​กฎ​นี้​มี​ข้อ​จำกัด​สำคัญ​ที่​มัก​ถูก​มอง​ข้าม

  • “มี” สายตา ไม่​เท่ากับ “ใช้” สายตา — Robert Glass วิจารณ์​ไว้​ใน Facts and Fallacies of Software Engineering ว่า Linus’s Law เป็น​เพียง “mantra” ที่​ขาด​หลักฐาน​เชิง​ประจักษ์ งาน​วิจัย​ชี้​ว่า​อัตรา​การ​พบ bug ไม่​ได้​เพิ่ม​เป็น​เส้นตรง​ตาม​จำนวน​ผู้​ตรวจ แต่​มี​จำนวน​ผู้​ตรวจ​ที่​มี​ประโยชน์​สูงสุด​อยู่​ที่​ราว 2-4 คน​ต่อ​รอบ​เท่านั้น เกิน​กว่า​นั้น​ผล​ตอบแทน​จะ​ลด​ลง (diminishing returns)
  • ผู้​ใช้ ≠ ผู้​ตรวจ code — คน​ส่วน​ใหญ่​ที่ “ใช้” ซอฟต์แวร์​โอเพน​ซอร์ส​ไม่​เคย​อ่าน source code เลย พวก​เขา​เห็น​แค่​พฤติกรรม​ภายนอก การ​นับ​จำนวน​ผู้​ใช้​ทั้งหมด​ว่า​เป็น “eyeballs” จึง​เป็นการ​ประเมิน​สูง​เกิน​จริง
  • การ​เขียน code ง่าย​กว่า​การ​ตรวจ code — ปริมาณ code ที่​ถูก​เขียน​เพิ่ม​ขึ้น​เร็ว​กว่า​จำนวน​คน​ที่​มี​ทั้ง​เวลา​และ​ความ​เชี่ยวชาญ​พอ​จะ​ตรวจสอบ​มัน​อย่าง​จริงจัง โดย​เฉพาะ​การ​ตรวจ​ด้าน​ความ​ปลอดภัย​ที่​ต้อง​ใช้​ทักษะ​เฉพาะ​ทาง
  • สายตา​ที่​ไม่​ได้​มอง​จริง ๆ ไม่​ช่วย​อะไร — Jim Zemlin ผู้​อำนวย​การ​บริหาร​ของ Linux Foundation ให้​ความเห็น​หลัง​เหตุการณ์​ช่อง​โหว่​ใหญ่​หลาย​ตัว​ใน​ปี 2014 ว่า “the eyeballs weren’t really looking” (สายตา​เหล่า​นั้น​ไม่​ได้​จ้อง​มอง​อยู่​จริง)
  • กฎ​นี้​ไม่​ได้​ผูก​กับ open source โดยตรง — Microsoft Security Blog ชี้​ว่า​ปัจจัย​ตัดสิน​คือ​ทรัพยากร​คน​ที่ actively ตรวจ​และ​แก้ bug ไม่ใช่​ว่า code เปิด​หรือ​ปิด project closed-source ที่​มี developer 50 คน​กับ tester 50 คน​อาจ​พบ​และ​แก้ bug ได้​มากกว่า project โอเพน​ซอร์ส​ที่​มี core developer แค่ 5 คน​กับ​ผู้​ร่วมพัฒนา​อีก 20 คน — “ความ​สามารถ​ใน​การ​ตรวจ code ได้ (can)” ไม่​เหมือน​กับ “การ​ตรวจ code จริง (does)“
  • Heartbleed (2014) — ช่อง​โหว่​ร้ายแรง​ใน OpenSSL ซึ่ง​เป็น​โครงสร้าง​พื้นฐาน​สำคัญ​ของ​อินเทอร์เน็ต ส่ง​ผลกระทบ​ต่อ​เว็บไซต์ HTTPS ราว 18% ทั่ว​โลก แต่ bug นี้​ซ่อน​อยู่​ใน code ที่ “เปิด” ให้​ทุก​คน​ดู​ได้​นาน​ถึง​สอง​ปี​ก่อน​ถูก​ค้น​พบ Jeff Atwood เขียน​บทความ “Given Enough Money, All Bugs Are Shallow” ชี้​ว่า​นี่​คือ​หลักฐาน​ที่​หักล้าง Linus’s Law โดยตรง เขา​สรุป​ว่า​สิ่ง​ที่​ขาด​ไม่ใช่​สายตา แต่​คือ​แรง​จูงใจ — และ​หลัง​จาก​เหตุการณ์​นี้ อุตสาหกรรม​ก็​เริ่ม​พึ่งพา bug bounty program และ​เงิน​ทุน​สนับสนุน​การ​ตรวจสอบ​ความ​ปลอดภัย​ของ infrastructure โอเพน​ซอร์ส​อย่าง​จริงจัง​มาก​ขึ้น (เช่น Core Infrastructure Initiative)
  • Linux kernel เอง — ตัวอย่าง​ดั้งเดิม​ที่ Raymond ใช้​อ้างอิง การ​ที่ kernel เปิด​ให้​นัก​พัฒนา​ทั่ว​โลก​ส่ง patch และ​รายงาน bug เข้า​มา​จำนวน​มาก ทำให้​ปัญหา​ที่​ซับซ้อน​ถูก​วินิจฉัย​ได้​เร็ว​กว่า​การ​พึ่งพา​ทีม​ปิด​เล็ก ๆ ใน​หลาย​กรณี โดย​เฉพาะ​เมื่อ​ผู้​รายงาน​มา​จาก​บริบท​การ​ใช้งาน (hardware, workload) ที่​หลากหลาย
  • project GitHub ที่​มี​ความ​นิยม​สูง — งาน​วิจัย​พบ​ว่า project ยอด​นิยม​บน GitHub มี​อัตรา​การ​แก้ bug สูง​กว่า project ที่​ไม่​ค่อย​มี​คน​สนใจ สอดคล้อง​กับ​ที่​กฎ​นี้​ทำนาย​ไว้ — แต่​ก็​เป็นการ​เน้น​ย้ำ​ว่า​สิ่ง​ที่​สำคัญ​คือ “ผู้​มี​ส่วนร่วม​ที่ active” ไม่ใช่​แค่​จำนวน​ดาว​หรือ​ผู้​ใช้
  • Code review ใน​ทีม​โคลส​ซอร์ส — องค์กร​จำนวน​มาก​ใช้​หลักการ​เดียวกัน​ใน​สเกล​เล็ก​กว่า ผ่าน​การ​ทำ pull request review ที่​บังคับ​ให้​มี​ผู้​ตรวจ​อย่าง​น้อย 1-2 คน​ก่อน merge หรือ​ทำ pair programming ที่​มี​สอง​สายตา​ช่วย​กัน​มอง code ตั้งแต่​ตอน​เขียน
  • อย่า​ตีความ​ว่า “code ถูก​เปิดเผย = code ถูก​ตรวจ​แล้ว” เปิด repository ให้ public ไม่​ได้​แปล​ว่า​มี​ใคร​อ่าน​มัน​จริง ๆ ทีม​ต้อง​จงใจ​สร้าง​กระบวนการ​ตรวจสอบ ไม่ใช่​หวัง​พึ่ง​ความ​บังเอิญ​ของ “สายตา​ที่​มาก​พอ”
  • จำนวน​ผู้​ตรวจ​ที่​มี​ประสิทธิผล​มี​ขีด​จำกัด งาน​วิจัย​ของ Glass ชี้​ว่า​ราว 2-4 คน​ต่อ​รอบ review คือ​จุด​ที่​คุ้ม​ค่าที่สุด — การ​เพิ่ม​ผู้​ตรวจ​เกิน​จำเป็น​อาจ​ทำให้​เกิด diffusion of responsibility (ทุก​คน​คิด​ว่า​คน​อื่น​จะ​เจอ) มากกว่า​จะ​ช่วย​เพิ่ม​คุณภาพ
  • ลงทุน​กับ​ผู้​ตรวจ​ที่​มี​ทักษะ ไม่ใช่​แค่​จำนวน​คน สำหรับ code ที่​กระทบ​ความ​ปลอดภัย​หรือ business-critical ต้อง​มี​ผู้เชี่ยวชาญ​ด้าน​นั้น​โดย​เฉพาะ (security review, threat modeling) แทนที่​จะ​หวัง​พึ่ง​ชุมชน​ทั่วไป
  • ใช้​แรง​จูงใจ​เสริม​สายตา bug bounty, การ​จ้าง​งาน security audit และ​การ​สนับสนุน​ทุน​ให้ maintainer ของ dependency สำคัญ ล้วน​เป็น​วิธี​ทำให้ “eyeballs” ที่​มี​อยู่ actively มอง​จริง ไม่ใช่​แค่​มี​ศักยภาพ​จะ​มอง
  • ใน closed-source ก็​นำ​หลักการ​นี้​มา​ใช้ได้ ผ่าน​การ​บังคับ code review, collective code ownership และ whole-team activity ที่​ทำให้​คน​หลาย​บทบาท (dev, QA, ops) ได้​เห็น code เดียวกัน​จาก​มุม​ต่าง​กัน