เมื่อไม่นานมานี้ NASA ได้เปิดเผยซอร์สโค้ดของระบบคอมพิวเตอร์นำทาง AGC (Apollo Guidance Computer) ของภารกิจ Apollo 11 ปี 1969 โดยเผยแพร่ในรูปแบบ “สาธารณสมบัติ” (Public Domain) บน GitHub ทั้งที่ในยุคนั้นเทคโนโลยีฮาร์ดแวร์ยังจำกัดมาก แต่ก็สามารถทำภารกิจลงจอดบนดวงจันทร์ได้สำเร็จด้วยหน่วยความจำเพียง 4KB, ROM 74KB และซีพียูความเร็ว 1MHz
การเปิดเผยซอร์สโค้ด AGC ครั้งนี้มีคุณค่าทั้งในเชิงประวัติศาสตร์และการศึกษาอย่างยิ่ง โดยในปี 1969 ไมโครโปรเซสเซอร์อย่าง Intel 4004 ยังไม่ถูกพัฒนาขึ้น ระบบ AGC ใช้วงจรรวมที่ประกอบจากเกต NOR แบบอินพุตคู่จำนวน 2,800 ตัว ทำงานที่ความถี่ 1.024 MHz ใช้ชุดคำสั่ง 16-bit และสามารถคำนวณการบวกได้ประมาณ 40,000 ครั้งต่อวินาที
ระบบมี RAM เพียง 4KB ใช้หน่วยความจำแบบ Magnetic Core Memory ความจุประมาณ 2,000 คำ (words) ส่วน ROM ขนาด 74KB ใช้เทคโนโลยี Core Rope Memory ซึ่งเป็นการถักสายไฟผ่านแกนแม่เหล็กโดยแรงงานคน หากสายลอดผ่านแกนจะเป็นค่า 1 หากไม่ลอดจะเป็น 0 ทำให้โปรแกรมถูก “ฮาร์ดโค้ด” ทางกายภาพ ไม่สามารถถูกแก้ไขจากรังสีหรือไฟดับได้
ด้วยพลังประมวลผลเพียงเท่านี้ ตัวเครื่องมีน้ำหนักประมาณ 32 กิโลกรัม และใช้พลังงานราว 70 วัตต์ ปัจจุบันไมโครคอนโทรลเลอร์ในอุปกรณ์ราคาถูกอย่างที่ชาร์จ USB-C ยังมีพลังประมวลผลมากกว่า AGC หลายสิบถึงหลายร้อยเท่า แต่ระบบที่สร้างจากเกต NOR เพียง 2,800 ตัวนี้กลับสามารถพามนุษย์ไปเหยียบดวงจันทร์ได้สำเร็จ
โค้ดทั้งหมดของ AGC มีขนาดเพียง 72KB ซึ่งเล็กกว่าภาพความละเอียดสูงในปัจจุบันหนึ่งภาพเสียอีก แต่ภายในกลับรวมตรรกะทั้งหมดสำหรับการนำทาง ควบคุม ลงจอด และกลับโลกไว้ครบถ้วน
นักพัฒนาในยุคนั้นต้องเขียนโปรแกรมด้วยภาษา Assembly ทุกบรรทัดถูกปรับแต่งอย่างละเอียดเพื่อไม่ให้เสียพื้นที่แม้แต่บิตเดียว ในซอร์สโค้ดยังพบฟังก์ชันคำนวณ sine/cosine ความแม่นยำสูงที่เขียนด้วย Assembly เพียงประมาณ 30 บรรทัด ซึ่งถือว่าล้ำหน้าอย่างมากในยุคนั้น
นอกจากนี้ ในโค้ดยังมีระบบ “มัลติทาสก์” และ “การกู้คืนข้อผิดพลาด” ที่ล้ำยุค ระหว่างภารกิจ Apollo 11 เคยเกิดเหตุ “1202 alarm” จากข้อมูลเรดาร์ล้นจนใช้ RAM หมด แต่ระบบสามารถจัดลำดับความสำคัญ (priority scheduling) โดยตัดงานที่ไม่สำคัญออก และคงไว้เฉพาะงานควบคุมเครื่องยนต์และการนำทาง พร้อมรีสตาร์ตตัวเองอัตโนมัติ แนวคิด “ล้มเหลวอย่างมีประสิทธิภาพ” (graceful failure) นี้ถือเป็นต้นแบบของระบบปฏิบัติการสมัยใหม่
ในซอร์สโค้ดยังเต็มไปด้วยอารมณ์ขันของวิศวกร เช่น คอมเมนต์ “BURN_BABY_BURN” ในขั้นตอนจุดเครื่องยนต์ หรือ “SEE IF THE SILLY THING IS STILL ON” ในโค้ดเรดาร์ลงจอด รวมถึงการอ้างอิงบทละครของ William Shakespeare เพื่อแซวขั้นตอนป้อนข้อมูลที่ยุ่งยาก
หลังจากการเปิดเผยครั้งนี้ ยังมีนักพัฒนาสร้างตัวจำลอง AGC ขึ้นมา ทำให้คนทั่วไปสามารถทดลองใช้งานระบบนำทางของ Apollo ได้ด้วยตัวเอง
น่าสนใจว่า ในยุคปัจจุบันที่ซอฟต์แวร์ใช้หน่วยความจำระดับหลาย GB ยังมีเหตุการณ์อย่างภารกิจ Artemis II ที่ระบบ Microsoft Outlook เกิดขัดข้องระหว่างเดินทางไปดวงจันทร์ ต้องให้ศูนย์ควบคุมภาคพื้นดินแก้ไขจากระยะไกล เมื่อเทียบกับโค้ดขนาดเพียง 72KB เมื่อ 60 ปีก่อน จึงยิ่งตอกย้ำว่า “ซอฟต์แวร์ที่ออกแบบดี สามารถชดเชยข้อจำกัดของฮาร์ดแวร์ได้”
“That’s one small step for man, one giant leap for mankind.” ขอร่วมคารวะเหล่าวิศวกรซอฟต์แวร์ผู้อยู่เบื้องหลังระบบ AGC เมื่อ 60 ปีก่อน
ที่มา: HKEPC



