- ไดรเวอร์ ftape เป็นไดรเวอร์เคอร์เนลโอเพนซอร์สของลินุกซ์เพียงตัวเดียวที่สามารถกู้คืนข้อมูลจากเทปสำรอง (QIC-80) ยุค 1990 ได้
- แต่ไดรเวอร์นี้ ไม่ได้รับการบำรุงรักษา อีกต่อไปหลังปี 2000 ทำให้ใช้งานได้เฉพาะบนสภาพแวดล้อมลินุกซ์รุ่นเก่าเท่านั้น
- ผู้เขียนใช้ Claude Code รีแฟกเตอร์ซอร์สโค้ดเก่าให้เข้ากับ เคอร์เนลลินุกซ์ รุ่นใหม่ และ แปลงสำเร็จ ให้เป็นโมดูลเคอร์เนลแบบแยกอิสระ
- ระหว่างกระบวนการ Claude ได้แปลง ฟังก์ชันและโครงสร้างข้อมูลแบบเก่า ไปเป็น API รุ่นใหม่โดยอัตโนมัติ ขณะที่ผู้ใช้วิเคราะห์ผลลัพธ์ด้วยตนเองเพื่อแก้ไขความผิดพลาดของการตั้งค่าบางส่วน
- ประสบการณ์การใช้ AI coding agent ครั้งนี้ให้มุมมองเกี่ยวกับ การขยายขีดความสามารถของโปรแกรมเมอร์ และการ onboarding เข้าสู่เทคโนโลยีหรือเฟรมเวิร์กใหม่ได้อย่างรวดเร็ว
เบื้องหลัง: การกู้คืนเทปสำรองเก่าและไดรเวอร์ ftape
- หนึ่งในงานอดิเรกของผู้เขียนคือการกู้คืนข้อมูลจาก ตลับเทป เช่น QIC-80
- เทปเหล่านี้ส่วนใหญ่ต้องใช้ เทปไดรฟ์แบบพิเศษ ที่เชื่อมต่อกับฟลอปปีดิสก์คอนโทรลเลอร์
- ไดรฟ์เหล่านี้มักถูกใช้เพื่อการสำรองข้อมูลโดยธุรกิจขนาดเล็กหรือผู้ใช้ตามบ้านในช่วงทศวรรษ 1990
- วิธีที่ใช้ฟลอปปีดิสก์คอนโทรลเลอร์นั้นทำได้ในต้นทุนต่ำโดยไม่ต้องมี SCSI adapter แยก แต่ก็มีข้อเสียหลายอย่าง เช่น ข้อจำกัดด้านความเร็ว (500Kbps) และโปรโตคอลที่ไม่เป็นมาตรฐาน
- ในการสื่อสารกับอุปกรณ์เทปเหล่านี้ บนลินุกซ์จำเป็นต้องมี ไดรเวอร์เคอร์เนล ftape
- เนื่องจากมีเพียง ftape เท่านั้นที่สามารถอ่านข้อมูลไบนารีดิบได้โดยตรง จึงจำเป็นต่อการกู้คืนข้อมูล
- อย่างไรก็ตาม ไดรเวอร์ ftape ไม่ได้รับการบำรุงรักษาอีกเลยหลังราวปี 2000 ทำให้ไม่สามารถใช้งานบนเคอร์เนลลินุกซ์สมัยใหม่ได้
- ดังนั้นทุกครั้งที่ต้องการกู้ข้อมูล ผู้เขียนจึงต้องบูตลินุกซ์รุ่นเก่าโดยตรง (เช่น CentOS 3.5)
เริ่มปรับปรุงไดรเวอร์เคอร์เนลให้ทันสมัยด้วย Claude Code
- ผู้เขียนขอให้ Claude Code พร้อมคำอธิบายของรีโพซิทอรีว่าให้ "ปรับปรุงไดรเวอร์ให้สามารถ build ได้บนเคอร์เนลรุ่นใหม่"
- Claude ค้นหาและแทนที่ ฟังก์ชันและโครงสร้างข้อมูลแบบเก่า ให้สอดคล้องกับ API และโครงสร้างของเคอร์เนลปัจจุบัน
- หลังผ่านการให้ฟีดแบ็กหลายรอบและการปรับแก้ด้วยตนเอง ก็ได้โค้ดไดรเวอร์ที่คอมไพล์ได้โดยไม่มีข้อผิดพลาด
- โค้ดในช่วงแรกยัง build ได้เฉพาะภายในซอร์สทรีของเคอร์เนลทั้งหมด แต่เมื่อมีการร้องขอเพิ่มเติม Claude ก็สร้าง ระบบ build สำหรับ external module แบบแยกอิสระ ให้โดยอัตโนมัติ
- ทำให้สามารถสร้างโมดูลเคอร์เนลเป็นไฟล์ .ko แยกต่างหากได้ และเริ่มทดสอบกับฮาร์ดแวร์จริง
กระบวนการแก้ปัญหา
- แม้โมดูลเคอร์เนลจะโหลดได้ตามปกติ แต่กลับเกิด ปัญหาเรื่องการตรวจพบไดรฟ์และการสื่อสาร
- งานที่ต้องใช้สิทธิ์ sudo ทำให้ Claude ไม่สามารถรันซ้ำเองได้โดยตรง ผู้เขียนจึงส่ง
dmesg log ให้ด้วยตนเองเพื่อติดตามปัญหา
- จากการเทียบ log กับกรณีที่เคยสำเร็จ Claude พบข้อบกพร่องเกี่ยวกับ การไม่ได้ตั้งค่า I/O port address เริ่มต้น และการกำหนดค่าเริ่มต้นของพารามิเตอร์
- ค่าเริ่มต้นถูกแปลงจาก -1 เป็น 0xffff จนตรวจจับไม่สำเร็จ และเมื่อรีเซ็ตเป็น address ที่ถูกต้องก็แก้ปัญหาได้
- ในที่สุดโมดูลก็โหลดได้สมบูรณ์ และ dump ข้อมูลจากเทปทดสอบได้สำเร็จ
ข้อสังเกตจากประสบการณ์ทำงานร่วมกับ AI coding agent
- การโต้ตอบกับ Claude Code ให้ความรู้สึกเหมือน "การทำงานร่วมกับนักพัฒนาระดับจูเนียร์" คล้ายกับการทำงานกับวิศวกรจริง
- ผู้ใช้ยังคงต้องเป็นผู้นำในการตัดสินใจด้านสถาปัตยกรรม การค้นหาปัญหา และการกำหนดทิศทาง
- ยิ่งใช้ คีย์เวิร์ดที่เฉพาะทางตามโดเมน และคำขอที่ชัดเจน ก็ยิ่งได้ผลดี
- AI agent จะเพิ่มผลิตภาพอย่างมากเมื่อได้รับ งานในประเภทที่เหมาะสม จึงต้องเข้าใจทั้งข้อจำกัดและจุดแข็งของมัน
- AI ช่วยเพิ่มความสามารถของผู้เขียนได้อย่างมาก งานที่ถ้าทำด้วยมือล้วน ๆ อาจใช้เวลาหลายสัปดาห์ กลับเสร็จได้ในไม่กี่วันผ่านการสนทนาและฟีดแบ็กตามปกติ
- ในกระบวนการนี้ ผู้เขียนยังได้เรียนรู้ทักษะที่ใช้งานได้จริง เช่น แนวปฏิบัติการพัฒนาเคอร์เนลสมัยใหม่, สถาปัตยกรรม x86, เครื่องมือ command line แบบใหม่
- ผู้เขียนเน้นว่า AI ช่วยเร่ง กระบวนการ onboarding และการปรับตัวช่วงเริ่มต้น กับเฟรมเวิร์กใหม่ ๆ (เช่น Rust, Flutter) ได้อย่างมาก
บทสรุป: ftape กลับมามีชีวิตอีกครั้ง
- หลังผ่านไป 25 ปี ftape ก็กลับมา build และใช้งานได้บนลินุกซ์รุ่นใหม่ อีกครั้ง
- ผู้เขียนกำลังดำเนินการปรับปรุงฟีเจอร์เพิ่มเติมและทดสอบต่อเนื่อง อีกทั้งยังยืนยันการรองรับ อุปกรณ์ที่ใช้พอร์ตขนาน นอกเหนือจากไดรฟ์ที่ใช้ฟลอปปี
- ตัวอุปกรณ์จริงแทบไม่ต่างจากในอดีต แต่ระบบปฏิบัติการเปลี่ยนจาก CentOS 3.5 มาเป็น Xubuntu 24.04
อ้างอิง
- ซอร์สโค้ดของโปรเจกต์ ftape เปิดเผยบน GitHub
- รายการอุปกรณ์สะสมของผู้เขียนและรายละเอียดอื่น ๆ สามารถดูได้จากบล็อกส่วนตัว
ยังไม่มีความคิดเห็น