Windows 11 ยังรันไบนารีที่คอมไพล์เมื่อ 30 ปีก่อนได้
(twitter.com/mikko)- Windows 11 รุ่นล่าสุดสามารถรันไบนารีที่คอมไพล์เมื่อวันที่ 18 สิงหาคม 1993 ได้ ซึ่งตอกย้ำความโดดเด่นของความเข้ากันได้ย้อนหลังระยะยาวของ Microsoft
- โปรแกรมดังกล่าวเป็นไบนารีที่สร้างขึ้นเมื่อ 30 ปีก่อน ณ เวลาที่มีการเผยแพร่ และแสดงให้เห็นว่าซอฟต์แวร์ Windows รุ่นเก่ายังสามารถทำงานได้ในสภาพแวดล้อมสมัยใหม่
- ประเด็นสำคัญของกรณีนี้อยู่ที่ ความเข้ากันได้ย้อนหลัง ที่ทำให้ระบบปฏิบัติการเวอร์ชันใหม่ยังยอมรับไฟล์รันได้จากอดีตโดยตรง
- จากข้อมูลที่เปิดเผย ยังไม่สามารถยืนยันได้ว่าจำเป็นต้องมีการแปลง คอมไพล์ใหม่ หรือตั้งค่าเพิ่มเติมหรือไม่
- ความสามารถในการรันไบนารีเก่าเป็นสัญญาณด้านเสถียรภาพที่สำคัญสำหรับทั้งองค์กรและผู้ใช้ทั่วไปเมื่อต้องจัดการซอฟต์แวร์ที่เก็บรักษาระยะยาว
กรณีตัวอย่างการรันไบนารีอายุ 30 ปีบน Windows 11
- Windows 11 สามารถรันไบนารีที่คอมไพล์เมื่อวันที่ 18 สิงหาคม 1993 ได้
- กรณีนี้ถูกแชร์พร้อมกับการประเมินว่า ความเข้ากันได้ย้อนหลัง ของ Microsoft แข็งแกร่งอย่างมาก
- ข้อมูลที่ยืนยันได้จำกัดอยู่ที่การรันได้จริงและวันที่คอมไพล์
- ไม่มีการระบุชื่อไบนารี ภาษาในการพัฒนา วิธีการรัน หรือว่าต้องมีการตั้งค่าเพิ่มเติมหรือไม่
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
อ้างอิง: มีบทความของ Joel Spolsky ด้วย: https://www.joelonsoftware.com/2004/06/13/how-microsoft-lost...
หนึ่งในนักพัฒนา SimCity เล่าว่า มีบั๊กร้ายแรงที่บังเอิญทำงานได้ดีบน DOS แต่พังบน Windows เป็นบั๊กที่นำหน่วยความจำที่ปล่อยไปแล้วกลับมาใช้อีก และทีมทดสอบของ Windows พบว่า SimCity ล่มตลอดระหว่างลองรันแอปยอดนิยมต่าง ๆ นักพัฒนา Windows จึง disassemble SimCity แล้วไล่ตามด้วย debugger จนเจอบั๊ก จากนั้นใส่โค้ดที่ตรวจว่า กำลังรัน SimCity อยู่หรือไม่ และเฉพาะกรณีนั้นเท่านั้นจะให้ memory allocator ทำงานในโหมดพิเศษที่ยังคงอนุญาตให้ใช้หน่วยความจำได้ต่อแม้หลังปล่อยไปแล้ว
การทำ backward compatibility แบบนี้ไม่ค่อยดี เพราะทึบและเป็นการแก้เฉพาะหน้า เครื่องมือทำนองเดียวกันก็เคยถูกใช้เพื่อทำให้แอปของคู่แข่งพังด้วย ปกติสุดท้ายก็กลายเป็นการลองทีละตัวว่าจะให้รันเหมือน Windows เวอร์ชันเก่าเวอร์ชันไหน Linux ก็ไม่ได้ดีกว่าเพราะไม่มี ABI ที่เสถียร ส่วน Mac ก็เป็นส่วนผสมระหว่าง Rosetta ที่ยอดเยี่ยมกับการที่แอปพังแบบไม่มีเหตุผล ชวนสงสัยว่า FreeBSD ทำได้ดีกว่านี้ไหม หรือระบบปฏิบัติการ “สุกงอม” ที่หายไปแล้วอย่าง VMS เคยดีกว่านี้หรือเปล่า
Xหรือไม่ และถ้าใช่ก็ปฏิเสธไปเลยประมาณว่า ทำไมยังรัน Xorg อยู่ล่ะ? ควรย้ายไป Wayland ได้แล้วสิ
https://social.treehouse.systems/@marcan/110904454552941656
Raymond Chen ให้มุมมองจากภายในเกี่ยวกับหัวข้อนี้มาหลายสิบปีแล้ว: https://devblogs.microsoft.com/oldnewthing/
น่าสนใจที่ความเสถียรโดยรวมของ Windows API ทำให้ Win32/DX กลายเป็น API “อเนกประสงค์” ที่เสถียรและเชื่อถือได้มากบน Linux และระบบปฏิบัติการอื่น ๆ ผ่านงานมหาศาลของ Wine/Proton ผมเห็นเรื่อย ๆ ว่าเกมเลิกออกเวอร์ชัน Linux native แล้วปล่อยมาให้ใช้กับ Proton แทน
https://sporks.space/2022/02/27/win32-is-the-stable-linux-us...
เรื่องนี้ไม่ใช่เรื่องบ้า แต่เป็นระดับที่เราควรคาดหวังจากเครื่องมืออยู่แล้ว ค้อนของผมยังใช้กับตะปูที่ซื้อมาเมื่อ 30 ปีก่อนได้อย่างสมบูรณ์แบบ
เราสร้างอะไรบนรากฐานที่สั่นคลอนซึ่งคอยทำลาย backward compatibility ไม่ได้ สุดท้ายเวลาจะหมดไปกับการบำรุงรักษามากกว่าสร้างของ แล้วก็ต้องกลับไปประดิษฐ์ล้อขึ้นใหม่ ทั้งที่ในมุมผู้ใช้ ล้อใหม่มันวาวก็ไม่ได้จำเป็นต้องดีกว่าเสมอ ซอฟต์แวร์ส่วนใหญ่ที่ผมใช้มีอายุเกิน 10 ปีแล้ว บางตัวยังอัปเดตอยู่ แต่บางตัวไม่อัปเดตแล้วหรือย้ายไปคลาวด์ ทำให้ผมถูกทิ้งไว้ข้างหลังอย่างมีความสุข
เมื่อก่อนผมเคยเชื่อแบบนั้น แต่ตอนนี้ไม่แล้ว
เกม Steam ที่ใช้บริการ Games for Windows – Live และไม่ได้อัปเดตหลังบริการปิดตัวในปี 2014 จะรันไม่ได้ตั้งแต่ Windows 10 เป็นต้นไป เพราะ DLL ของบริการนั้นถูกเอาออกแล้ว ช่วงหนึ่งผู้คนแก้ด้วยการดาวน์โหลด DLL จากเว็บ third-party แต่ตอนนี้วิธีนั้นก็ใช้ไม่ได้แล้ว
มีตัวอย่างที่ “บ้า” กว่านี้ด้วย
z/OS (หรือที่เรียกว่า OS360, MVS) รองรับไปถึงโปรแกรมจากยุค 1960 และ DE คนหนึ่งของ IBM เคยบอกว่ายังใช้โปรแกรมที่คอมไพล์ไว้ราวช่วงภารกิจ Apollo 11 อยู่
ยังมีระบบอื่น ๆ ที่รันหรือแปลงไบนารีอายุเกิน 30 ปีให้อัตโนมัติได้ด้วย IBM i on POWER (i5/AS400) น่าจะรันโปรแกรมสมัย System/38 (1980) ได้ และ HPE NonStop (หรือที่เรียกว่า Tandem Guardian) on X86-64 ก็รันหรือแปลงไบนารีจากระบบ TNS ดั้งเดิมเฉพาะทางช่วงปลายยุค 1970 และระบบ MIPS ปี 1991 ได้
เป็นที่รู้กันว่า Windows ยึดมั่นกับความเข้ากันได้ย้อนหลังอย่างจริงจัง แต่สำหรับ แอป DOS CLI นั้น ระบบย่อย DOS แทบจะหยุดนิ่งไปแล้ว เลยรู้สึกว่าไม่ใช่ความท้าทายใหญ่อะไรนัก อยากรู้ว่าถ้ารันโปรแกรมแบบ DOS ที่มีข้อกำหนดมากกว่านี้ หรือแอป Win16 ยุคแรก ๆ จะเป็นอย่างไร เช่น Zortech C++ ปี 1986 กับ Phar Lap DOS extender หรือ Minesweeper ของ Windows 3.1 จะทำงานได้ไหม?
เรื่องนี้ไม่ควรถูกมองว่ายอดเยี่ยมเลยสักนิด ควรถูกมองว่าเป็นเรื่องปกติในชีวิตประจำวันและเป็นเรื่องที่ควรเป็น ถ้าทำไม่ได้ควรถูกมองว่าเป็นความล้มเหลวที่น่าอับอายมากและยอมรับไม่ได้
ไม่ได้หมายความว่าไม่ยอดเยี่ยมเมื่อเทียบกับความเละเทะในปี 2023 แต่หมายถึง บรรทัดฐาน ที่เราควรมุ่งไปควรเป็นแบบนั้น
บางคนอาจบอกว่า Linux ก็เป็นแบบนั้นเหมือนกัน และในเชิงเทคนิคก็ถูก แต่ในทางปฏิบัติค่อนข้างยาก
เคอร์เนล ABI นั้นเสถียร แต่ส่วนที่เหลือแทบจะเป็นความโกลาหลล้วน ๆ ซึ่งเป็นผลมาจากวิธีที่แอปพลิเคชันบน Linux มักถูกแพ็กเกจ ตัวแอปเองอาจโหลดได้ (ถ้าไม่ใช่รูปแบบ a.out) แต่มีโอกาสสูงที่จะล้มเหลวตอนโหลดไลบรารีส่วนใหญ่ สุดท้ายก็ต้องใช้ chroot ของดิสทริบิวชัน Linux ทั้งชุดที่เป็นฐานอ้างอิงหรือรันไทม์อื่น และยังไม่แน่ใจด้วยซ้ำว่าจะหาไฟล์อาร์ไคฟ์ของดิสทริบิวชันอายุ 30 ปีได้ไหม ยิ่งไปกว่านั้นยังต้องสมมติว่าเคอร์เนล ABI ไม่ได้เปลี่ยนแม้แต่บิตเดียวจริง ๆ และอินเทอร์เฟซอื่น ๆ อย่าง
/procหรือ/sysก็ไม่เปลี่ยนด้วย ดูเหมือนว่า/sysเมื่อ 30 ปีก่อนยังไม่มีด้วยซ้ำ ถ้าเป็นแอป Xorg ผมคงไม่กล้าเดิมพันเงินค่าอาหารกลางวันกับความเข้ากันได้ในระดับโปรโตคอลผมเข้าใจยากว่าทำไมเรื่องนี้ถึงเป็นข้อเสียของ Linux แต่ไม่ใช่ของ Windows
ผมรู้สึกเสียดายเสมอที่ซอฟต์แวร์ Mac เก่า ๆ รันไม่ได้ง่าย ๆ การที่ Apple ย้ายไปสถาปัตยกรรมใหม่อาจเป็นเรื่องหลีกเลี่ยงไม่ได้ แต่ปัญหาคืออีกไม่กี่ปีต่อมา อีมูเลเตอร์ ก็พัง
ความทุ่มเทที่ Microsoft แสดงต่อลูกค้าไม่ควรเป็นเรื่องน่าทึ่งขนาดนี้ ทุกบริษัทควรทำแบบนั้น