ปรับปรุงไดรเวอร์เคอร์เนลอายุ 25 ปีให้ทันสมัยด้วย Claude Code
(dmitrybrant.com)- ไดรเวอร์ 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 ไม่สามารถรันซ้ำเองได้โดยตรง ผู้เขียนจึงส่ง
dmesglog ให้ด้วยตนเองเพื่อติดตามปัญหา
- งานที่ต้องใช้สิทธิ์ sudo ทำให้ Claude ไม่สามารถรันซ้ำเองได้โดยตรง ผู้เขียนจึงส่ง
- จากการเทียบ 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
- รายการอุปกรณ์สะสมของผู้เขียนและรายละเอียดอื่น ๆ สามารถดูได้จากบล็อกส่วนตัว
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
ผมโหลดโมดูลด้วยตัวเองแล้วก็คัดลอกเอาต์พุตจาก
dmesgไปแปะให้ Claude แบบแมนนวลซ้ำๆหนึ่งในเหตุผลหลักที่ผมใช้ Claude เป็นหลักก็คือ มันสามารถเริ่มโปรเซสที่ใช้เวลานาน แล้วอ่านเอาต์พุตเพื่อนำไปดีบักต่อได้
ตรงนี้มีวิธีแฮ็กหลายแบบที่จะข้ามขั้นตอนที่ต้องทำเองได้—เช่น pipe
dmesgไปยังพอร์ต UDP ภายในเครื่อง แล้วให้ Claude เปิด listener ขึ้นมาผมคิดว่านี่เป็นกรณีศึกษาที่ดี
ผมมองว่าเวลาใช้เครื่องมือแบบนี้ เราจะได้ผลหลักๆ สองอย่าง
อย่างแรกคือ ในเฟรมเวิร์กที่ผมคุ้นเคยอยู่แล้ว Claude จะจับแพตเทิร์นงานซ้ำๆ ได้เร็วมาก ทำให้ผลิตภาพเพิ่มขึ้นมหาศาล
อย่างที่สองคือ ตอนต้องเรียนรู้เฟรมเวิร์กใหม่ ก็ onboard ได้เร็วขึ้นมาก—จุดนี้มีประโยชน์มากเป็นพิเศษในบริษัทใหญ่ที่ใช้สแตกหลากหลาย
ถ้าจะประเมินความสามารถของ AI ให้ถูกจริงๆ ต้องลงทุนเวลาไม่น้อยกับเทคโนโลยีและเฟรมเวิร์กที่เปลี่ยนเร็ว
ถ้าคุณยังไม่ได้ใช้ Claude Code หรือ Claude 4.0 เกิน 100 ชั่วโมง คุณอาจยังไม่เห็นศักยภาพของมันเต็มที่
สถานการณ์แบบ “คนที่ไม่ใช่โปรแกรมเมอร์ลองเขียนโค้ดแบบมั่วๆ แล้วเจอปัญหา” คงเป็นเรื่องปกติบน X (ชื่อเดิม Twitter) แต่ถ้าเป็นนักพัฒนาที่มีประสบการณ์และใช้มันอย่างต่อเนื่อง ประสบการณ์จะต่างออกไปมาก
นี่แหละคือประเด็นสำคัญ
ผมใช้ Claude Code เป็นเครื่องมือหลักสำหรับแก้ไขโค้ดใน codebase เดิมทุกวันแบบไม่ขาด
หลังจากลองผิดลองถูก ผมก็สร้างกระบวนการของตัวเองขึ้นมาได้ และมันช่วยเพิ่มทั้งผลิตภาพและความกล้าจะทำการทดลองขนาดใหญ่
โดยเฉพาะถ้าผมออกแบบ data structure, schema และ internal API ไว้ก่อน Claude Code จะทำ UI ของเครื่องมือภายในออกมาได้ดีมากแทบจะจบในรอบเดียว
มันทำให้ผมกลับไปคิดในระดับนามธรรมได้ โดยไม่ต้องจมกับงานซ้ำๆ หรือความซับซ้อนของเฟรมเวิร์ก และกลายเป็นจุดเปลี่ยนครั้งใหญ่ในอาชีพ 16 ปีของผม
ใช่เลย
เจ้าของโพสต์ก็คือสั่งให้ Claude ช่วยพอร์ตไดรเวอร์ Linux 2.4 ไปเป็น 6.8
เพราะมีข้อมูลที่เกี่ยวข้องอยู่บนอินเทอร์เน็ตมากพอ งานส่วนใหญ่เลยเป็นสิ่งที่ Claude จัดการได้ และความเชี่ยวชาญของเจ้าของโพสต์จำเป็นจริงๆ ก็เฉพาะในส่วนแกนหลักที่ซับซ้อนมากเท่านั้น
คำว่า “ใช้ AI เป็นเครื่องมือขยายทักษะของตัวเองแบบก้าวกระโดด” ฟังแล้วเข้าท่ามาก
แต่ถ้าความสามารถตั้งต้นของคุณเป็น 0 ต่อให้คูณด้วย AI ก็ยังเกือบเป็น 0 หรืออาจติดลบในแง่ผลิตภาพด้วยซ้ำ
ในทีมเราก็มีคนที่กล้าลองของใหม่ผ่าน LLM เหมือนกัน แต่ถึงจะให้ทุกคนใช้ Claude 4 thinking agent ก็ยังได้โค้ดแปลกๆ ออกมาเยอะมาก
ถ้าคุณใช้ชีวิตการเขียนโค้ดส่วนใหญ่ไปกับการจับแพตเทิร์น LLM agent ก็เหมือนเข้ามาจับแพตเทิร์นทับอีกชั้นหนึ่ง ซึ่งสำหรับสมาชิกทีมที่ไม่มีประสบการณ์แบบนั้นกลับกลายเป็นเรื่องปวดหัว
LLM agent ทำการจับแพตเทิร์นแบบที่มนุษย์ทำได้เร็วกว่าเยอะ แต่โดยรวมแล้วผมยังไม่คิดว่ามันเก่งกว่ามนุษย์แบบทั่วไปนัก
มันมีประโยชน์ไม่ใช่แค่กับการสำรวจเฟรมเวิร์กใหม่ แต่รวมถึงภาษาใหม่ด้วย
ทีมเราใช้ Ruby ซึ่งอ่านง่ายมาก จนไม่จำเป็นต้องเรียนไวยากรณ์จริงจังก็สามารถสั่งให้ LLM เขียนโค้ด แล้วเราเป็นคนตัดสินใจเองได้
ต่อให้ไม่รู้ Ruby ก็ยังเขียนโค้ดให้อยู่ในระดับที่ทีมยอมรับได้ทันที ทำให้ทำงานได้อย่างมีประสิทธิภาพตั้งแต่แรกแม้อยู่ในสภาพแวดล้อมที่ไม่คุ้นเคย
(หมายเหตุ: สมาชิกในทีมจะรีวิว Pull Request)
ประโยคที่ว่า “เครื่องมือขยายทักษะของตัวเองแบบก้าวกระโดด” นี่ผมเพิ่งรู้สึกชัดมากในสัปดาห์นี้ ตอนทำโปรเจ็กต์เล็กๆ แบบเดิมซ้ำ 10 รอบ
จุดที่มันแสดงพลังจริงๆ คือการที่ AI ทำของกระจัดกระจายออกมา แล้วผมใส่แนวทางกำกับเพื่อรวมมาร์กอัป สไตล์ และ JS ให้เป็นระเบียบขึ้น (consolidation)
ในสภาพแวดล้อมอย่างสตาร์ตอัปที่ coding convention ยังไม่แข็งแรง การขอให้มันจับแพตเทิร์นตามที่ต้องการอาจทำได้ยาก แต่ผมนึกภาพออกเลยว่าใน codebase ที่แข็งแรงและเติบโตเต็มที่ ผลลัพธ์จะต่างไปมาก
ผมคิดว่าควรเขียนพรอมป์ต์ให้เฉพาะเจาะจงที่สุดเท่าที่จะทำได้ โดยใช้คีย์เวิร์ดเชิงโดเมนให้มาก
ถ้าคุณขาดความเข้าใจเชิงเทคนิคในภาษาหรือเฟรมเวิร์กนั้นๆ พรอมป์ต์จะคลุมเครือ และ LLM จะเติมช่องว่างนั้นเอง ทำให้ผลลัพธ์ออกมาคลาดจากความตั้งใจได้ง่าย
ความคลุมเครือนี่แหละคือต้นตอของบั๊ก
มันคืออีกด้านหนึ่งของ “การขยายแบบก้าวกระโดด”
เวลาอ่านบทความแบบนี้ มันทำให้ผมนึกได้ว่าก่อนมี LLM งานที่ต้องการทำจริงๆ มีมากกว่างานที่ถูกทำสำเร็จอยู่มาก
ผมยังคิดว่าคอขวดไม่ใช่เรื่อง ‘การลงมือทำ’ แต่เป็น ‘ไอเดียที่ขายได้ในตลาด’ มากกว่า
งานที่คนยอมควักเงินจริงๆ มีไม่มากนัก
ปัญหาไม่ได้มีแค่งานไม่พอเสมอไป แต่เป็นเพราะคนที่มีทักษะและประสบการณ์นำหน้าซึ่งจำเป็นต่องานนั้นมีน้อย
ถ้าไม่มีประสบการณ์พัฒนาเคอร์เนล ต่อให้เขียนพรอมป์ต์เก่งแค่ไหน ก็คงยากจะได้ผลแบบเดียวกับเจ้าของโพสต์
ในทางทฤษฎี ดูเหมือนพลังของ LLM จะทำให้ “ทำให้ไดรเวอร์เก่าทั้งหมดทันสมัย” บนเคอร์เนลใหม่ได้ แต่ในความเป็นจริงจำเป็นต้องมีการกำกับดูแลโดยมนุษย์ที่มีทักษะเสมอ และจำนวนผู้เชี่ยวชาญแบบนี้ก็น้อยมากเมื่อเทียบกับจำนวนไดรเวอร์ที่ต้องดูแล
มีบทสนทนาและบทสัมภาษณ์ที่ดี ของ Alan Kay และ Joe Armstrong ซึ่งพูดถึงปัญหาที่เกิดจากการที่โค้ดส่วนใหญ่ไม่ได้ถูกพัฒนาขึ้นมาในลักษณะที่สามารถเปลี่ยน target แล้วคอมไพล์ใหม่ได้โดยไม่มีสเปกกำกับ
ถ้ามีสเปกอย่างเป็นทางการแยกจากตัวโค้ด งานย้ายไดรเวอร์ไปยังเคอร์เนล target ใหม่ก็คงง่ายขึ้นในลักษณะของ “คอมไพล์สเปกใหม่”
แต่ตอนนี้เราไม่ได้อิงจากสเปก เราอิงจากโค้ดเก่า ดังนั้นในกระบวนการย้ายโค้ดเดิมไปเป็นโค้ดสมัยใหม่ LLM ก็ทำได้เพียงจับแพตเทิร์นของโค้ดที่คล้ายกัน ไม่ได้เข้าใจความหมายจริงหรือรับประกันความถูกต้องได้—เพราะงั้นทักษะของมนุษย์จึงยังจำเป็นเสมอ
ผมเคยรู้สึกว่า AI จะช่วยลดกำแพงการเข้าสู่โลก kernel hacking
และทุกครั้งก็ยิ่งรู้สึกว่านี่เป็นความจริง
อีกไม่นานการรองรับฮาร์ดแวร์ embedded/ARM อาจกว้างขวางขึ้น และเราอาจได้เห็น OS ใหม่สำหรับอุปกรณ์อัจฉริยะขนาดเล็กที่เบามากด้วย
แต่คนส่วนใหญ่มักไปขอให้ AI ‘สร้างบ้านทั้งหลังให้’ ทั้งที่จริงแล้วใช้มันเป็น ‘ตัวช่วยตีตะปู’ จะได้ผลดีกว่า
ผมคิดว่านี่เป็นตัวอย่างที่ดีของนักพัฒนาที่เข้าใจทั้งบทบาทและข้อจำกัดของ AI และใช้งานมันได้เหมาะสม
โดยเฉพาะความ skepticism (มุมมองเชิงวิพากษ์) ที่ทำให้เขาแยกไดรเวอร์ออกมาเป็นโมดูลต่างหากนั้นน่าประทับใจมาก
ผมอยากชี้ “เบาะแสสำคัญ” อย่างหนึ่งที่คนอื่นยังไม่ได้พูดถึง
เจ้าของโพสต์บอกไว้อย่างชัดเจนว่า “ผมมีประสบการณ์กับ kernel module อยู่บ้าง และใช้ภาษา C ได้ดี ดังนั้นไม่ควรอวยผลลัพธ์ของ Claude เกินจริง”
นั่นหมายความว่ามันไม่ใช่การถามแค่สามครั้งแล้ว kernel module เสร็จเลยจริงๆ แต่มีการโต้ตอบหลายรอบและแก้โค้ดด้วยมือตัวเองหลายครั้ง
เขาบอกด้วยว่าถ้าไม่เข้าใจโครงสร้างภายในพื้นฐานของ kernel module ก็คงไม่มีทางทำให้มันทันสมัยได้เลย—นี่คือบริบทที่ต้องจำให้ขึ้นใจ ไม่ว่าจะใช้เครื่องมือสร้างโค้ดแบบไหนก็ตาม
อีกอย่างคือเขาเขียนว่าความรู้สึกในการร่วมงานกับ Claude Code “คล้ายกับการทำงานกับวิศวกรจูเนียร์” คือสั่งอะไรก็ทำให้หมด แล้วถ้าชี้ข้อผิดพลาดก็ขอโทษหรือชมกลับทันที ซึ่งฟังดูเหมือนสไตล์ประจบมากกว่าจะเป็นวิศวกรจริงๆ
สุดท้าย เจ้าของโพสต์ยังบอกว่า “ถ้าอยากทำจริงๆ ผมก็ทำงานนี้คนเดียวได้ แต่คงต้องกลับไปเรียนรู้วิธีพัฒนาเคอร์เนลเมื่อ 25 ปีก่อนใหม่”
ตรงนี้ย้ำอีกครั้งว่าแก่นของงาน modernization ก็คือ “เข้าใจ legacy solution ให้ถูกต้อง และรู้ว่าอะไรคือสิ่งที่จำเป็น”
ที่สำคัญ การที่ “ไม่ต้องเรียนรู้แล้วข้ามไปได้” ถูกมองว่าเป็นข้อดีก็น่าสนใจมากเช่นกัน
ผมรู้สึกว่ามันดีมากที่ agent สามารถอธิบายโปรเจ็กต์ที่ผมไม่รู้จักให้ผมเข้าใจได้
ไม่นานมานี้ผม clone ซอร์สของ Firefox แล้วใช้ qwen-code ถามเกี่ยวกับฟีเจอร์ AI ของ Firefox และวิธีที่มันถูก implement ซึ่งได้เรียนรู้อะไรเจ๋งๆ มากจริงๆ
วิธีการเรียนรู้ตอนนี้เจ๋งขึ้นเยอะมาก
ผมคิดว่านี่คือการเปลี่ยนแปลงที่ช่วยเพิ่มพลังให้ผู้คนมากขึ้น
เจ้าของโพสต์ทำ side project ด้วยความหลงใหลมาอย่างยาวนาน และการอัปเกรดเครื่องมือก็เป็นเรื่องที่ดีมาก
แต่ถ้าสาขานั้นเฉพาะทางเกินไป ชุมชนอาจช่วยสนับสนุนได้น้อย ซึ่งตรงนี้ LLM เข้ามาช่วยแก้ปัญหาเฉพาะทางที่ปรับแต่งเองได้
กำแพงการเข้าถึงกำลังลดลงเรื่อยๆ และในอนาคต แม้แต่คนที่มีพื้นฐานเทคนิคน้อยกว่าก็อาจแก้ปัญหาเฉพาะทางที่ง่ายกว่านี้ได้ด้วยตัวเอง
นี่เป็นการเปลี่ยนแปลงเชิงบวกที่ทำให้มีคนกล้าลองมากขึ้น
ผมสงสัยว่าหลังอัปเกรดแล้วความเร็วเปลี่ยนไปอย่างไรบ้าง