Dave Cutler อธิบาย Windows [วิดีโอ]
(youtube.com)- Dave Cutler ย้อนมอง ภูมิหลังการออกแบบของ Windows NT และวัฒนธรรมการพัฒนาของ Microsoft จากประสบการณ์ที่ต่อเนื่องตั้งแต่ RSX-11, VMS, Windows NT ไปจนถึง Azure และ Xbox
- Windows NT ตั้งเป้าเป็น ระบบปฏิบัติการที่พกพาได้ และรองรับหลาย execution environment มาตั้งแต่ต้น และเมื่อ Windows 3.1 ขายได้ 16 ล้านชุดใน 6 เดือน Windows ก็กลายเป็นสภาพแวดล้อมหลักแทน OS/2
- NT ยุคแรกจัดการกับหลายสถาปัตยกรรม เช่น i860, MIPS, x86, Alpha, PowerPC รวมถึง HAL, object manager และโครงสร้าง kernel/driver โดยโครงสร้างหลักจำนวนมากยังคงอยู่ใน Windows 11
- ตอนเปิดตัว VMS ตั้งเป้า บั๊กที่ทราบอยู่เป็นศูนย์ ส่วนทีมพัฒนา NT ใช้ Friday WHIM เพื่อรักษาความเป็นอันหนึ่งอันเดียวกันขององค์กร แต่ในช่วง NT·Cairo·Longhorn·การรับมือด้านความปลอดภัยของ XP ตารางเวลา คุณภาพ และการแยก codebase กลายเป็นภาระใหญ่
- Cutler มองว่าการแก้บั๊ก การทดสอบ การรักษาคุณภาพ และความยับยั้งชั่งใจที่จะไม่ใส่ฟีเจอร์ที่ไม่จำเป็น คือทัศนคติหลักของทีมซอฟต์แวร์ที่ดี
เส้นทางงานระบบปฏิบัติการก่อน Windows NT
- Dave Cutler ได้สัมผัสกับระบบเรียลไทม์และการจำลองคอมพิวเตอร์ที่ DuPont ก่อนจะสนใจ ตัวคอมพิวเตอร์เอง มากกว่าเครื่องมือสำหรับแก้ปัญหา
- เขาเคยทำโปรเจ็กต์จำลองกระบวนการผลิตแบบฟอร์มของ Scott Paper ด้วย GPSS 3 และเจอทั้งข้อผิดพลาดของบัตรและงานดีบัก
- เพื่อลดข้อผิดพลาด เขาเขียนโปรแกรม Fortran และต่อมาก็เรียนรู้ถึงระดับแอสเซมบลีของ IBM 7044 ทำให้สนใจการทำงานภายในของคอมพิวเตอร์มากขึ้น
- ในกลุ่มระบบเรียลไทม์ของ DuPont เขาเขียนโปรแกรมวิเคราะห์ข้อมูลการทดสอบแรงดึงของ Instron แบบอัตโนมัติ
- โปรแกรมเก็บข้อมูลทำงานแบบเรียลไทม์ โดยอ่านข้อมูลทุก 1 มิลลิวินาทีหรือ 100 มิลลิวินาที
- หลังจากนั้นเขารับงานกับระบบปฏิบัติการ Exec II ของ Univac 1107 และเข้าสู่การพัฒนาระบบปฏิบัติการอย่างจริงจัง
- ทุกวันตอน 5 โมงเย็น เขาจะให้โอเปอเรเตอร์ออกไป แล้วใช้เวลา 2 ชั่วโมงรันโค้ดทดลองและทดสอบ
- ในสภาพแวดล้อมที่แทบไม่มีดีบักเกอร์ เขาดีบักด้วยสวิตช์และ halt instruction
ช่วงอยู่ DEC: RSX, VMS, คอมไพเลอร์, PRISM
- ที่ Digital Equipment Corporation เดิมเขาถูกจ้างมาทำ OS/45 แต่ไม่นานก็ได้รับมอบหมายให้ทำ RSX-11C
- พื้นที่แอดเดรส 16 บิตของ PDP-11 ในเวลานั้นเป็นข้อจำกัดใหญ่ในสายตาของ Cutler
- เขามองว่า RSX-11C เป็นระบบขนาดเล็ก และแม้เทียบกับมาตรฐานยุคนั้นก็ยังมีความสามารถจำกัด
- การพัฒนา VMS บูตสแตรปขึ้นมาด้วยฮาร์ดแวร์ VAX และชั้นการรันแบบเข้ากันได้กับ PDP-11
- VAX มีโหมด PDP-11 และมีชั้นที่ชื่อว่า Application Migration Executive สำหรับรันยูทิลิตีของ RSX-11M
- ระบบไฟล์ Files-11 ก็ถูกทำใหม่บน VMS เพื่อคงความเข้ากันได้
- ในช่วงต้นของการพัฒนา งานหลักอย่าง scheduler และ memory management ถูกทำบน hardware emulator
- VMS ใช้ self-hosting เป็นวิธีรักษาคุณภาพ
- เมื่อ Proto 3 เสถียรพอ ทีมพัฒนาก็ทำงานบนระบบนั้นโดยตรง
- ถ้าระบบเกิด bug check คนหลายคนจะเดินไปที่เครื่อง หาเหตุด้วยดีบักเกอร์ แก้ไข แล้วบูตใหม่
- เขาย้อนความว่า VMS ตอนเปิดตัวมี “บั๊กที่ทราบอยู่ 0 ตัว”
- ไม่ได้หมายความว่า “ไม่มีบั๊ก” แต่หมายถึงพยายามแก้ทุกบั๊กที่รู้ก่อนถึงวันออก
- แม้แต่ช่วงสุดท้ายก็ยังแก้ race condition ใน disk driver
- หลัง VMS เขายังมีส่วนกับ PL/I compiler, C compiler backend, code generator, optimization และ register allocation
- PL/I frontend ซื้อมาจากบริษัทใน Boston ส่วน backend พัฒนาบน VAX
- งาน frontend บางส่วนทำบน Multics ที่ MIT แล้วค่อยย้ายข้อมูลด้วยเทป
- ที่ DEC West เขาเข้าร่วมโปรเจ็กต์ Velon ซึ่งเป็นระบบเรียลไทม์ และโปรเจ็กต์ MicroVAX
- Velon เป็นระบบที่ทดลองแนวคิดอย่าง user-mode driver, โครงสร้างแบบ message-oriented, multithreading และ multiprocessor
- ใน MicroVAX 1 นั้น Cutler เขียน microcode ทั้งหมดเอง
- โปรเจ็กต์ PRISM เป็นความพยายามของ DEC ในสถาปัตยกรรม RISC และวันถัดจากที่โปรเจ็กต์ถูกยกเลิก เขาตัดสินใจจะลาออกจากบริษัท
- PRISM มีทั้งสถาปัตยกรรมเวอร์ชัน 32 บิตและ 64 บิต และยังมีระบบซอฟต์แวร์ทะเยอทะยานชื่อ Micah
- หลัง PRISM ถูกยกเลิก เขาเคยคิดจะตั้งบริษัทเซิร์ฟเวอร์ แต่ทิศทางเปลี่ยนไปหลังได้ติดต่อกับ Microsoft
เข้าร่วม Microsoft และการออกแบบ Windows NT
- การเข้าร่วม Microsoft ยังไม่แน่นอนแม้หลังคุยกับ Bill Gates แต่หลังจากกินอาหารเช้ากับ Steve Ballmer ที่ Denny’s ก็มีการตัดสินใจอย่างรวดเร็ว
- Cutler มองว่า Ballmer คือคนสำคัญที่โน้มน้าวให้เขาเข้าร่วม Microsoft
- เป้าหมายแรกเริ่มของ NT คือ ระบบปฏิบัติการที่พอร์ตได้ และรองรับหลาย execution environment
- ตอนนั้นสภาพแวดล้อมเป้าหมายคือ OS/2 และ POSIX ก็เป็นตัวเลือกสำคัญ
- แนวคิดตั้งต้นคือทำแกนระบบที่ให้บริการพื้นฐาน แล้ววางหลาย environment ไว้ด้านบน
- จุดที่ทำให้ Windows กลายเป็น environment หลักของ NT คือความสำเร็จของ Windows 3.1
- Windows 3.1 ขายได้ 16 ล้านชุดใน 6 เดือน และ Bill Gates ตัดสินว่า Windows จะเป็น environment หลักของระบบใหม่
- การพัฒนา NT เคยดำเนินบน OS/2 ด้วย แต่ทีมก็อยาก self-host บน NT เองให้เร็วที่สุด
- ชื่อ NT ย่อมาจาก “New Technology”
- อาจมีความเชื่อมโยงเลือน ๆ ระหว่าง codename ของ i860 ที่ชื่อ N10 กับ NT แต่ Cutler มองว่า NT คือ New Technology
- ฝ่ายการตลาดคัดค้านเพราะมองว่าชื่อ “เทคโนโลยีใหม่” อาจทำให้คนไม่กล้าซื้อ แต่ Cutler ก็ผลักดันชื่อ NT ต่อ
- NT เวอร์ชันแรกรองรับหลายสถาปัตยกรรม CPU
- มีการกล่าวถึง x86, MIPS R3000/R4000 และ Alpha
- PowerPC เข้ามาในช่วง NT 3.5 หรือ Daytona และ Cutler ประเมินว่าทั้ง build ของ PowerPC และความสามารถในการแข่งขันของฮาร์ดแวร์นั้นไม่ดีนัก
- HAL ของ NT เดิมทีเกือบจะเป็น ชั้น abstraction ของผู้ขาย มากกว่าชั้น abstraction ของฮาร์ดแวร์
- ช่วงแรกทำเป็น DLL แยก เพื่อให้ผู้ขายจัดหา HAL ของตัวเองได้
- Cutler มองว่าภายหลังน่าจะดีกว่าถ้าบิวด์ HAL ให้เป็นส่วนหนึ่งของระบบปฏิบัติการไปเลย
- ใน kernel และ HAL ของ NT มีแอสเซมบลีไม่มากนัก
- งานบางอย่างที่เรียกบ่อยและสำคัญต่อประสิทธิภาพยังต้องใช้งานแอสเซมบลีหรือ intrinsic
- บน x64 ได้เลือกแนวทางใช้ intrinsic แทน inline assembly
วัฒนธรรมการพัฒนา NT, Cairo, Longhorn, ความปลอดภัยของ XP
- ทีม NT จัด WHIM ทุกวันศุกร์เพื่อยึดองค์กรที่ขยายอย่างรวดเร็วให้เป็นหนึ่งเดียว
- WHIM ย่อมาจาก Weekly Integration Meeting
- ช่วงแรกผู้จัดการจะไปซื้อเบียร์กับมันฝรั่งทอดจาก Safeway แล้วจัดกันในห้องแล็บฮาร์ดแวร์ ก่อนจะขยายไปสู่สถานที่ใหญ่ขึ้นและมี catering
- Cutler มองว่าคำบรรยายว่า NT พัฒนาด้วยการโหมใช้งานคนอย่างต่อเนื่องนั้นไม่จริง และทีมพยายามสร้างช่วงเวลาผ่อนคลายในทุกสัปดาห์
- หลัง NT 3.5 มีการพา UI ของ Windows 95 มาสู่ NT ควบคู่ไปกับโปรเจ็กต์ Cairo
- Tuckwila ถูกคงไว้เหมือนเป็น NT 4.0 สำรองชนิดหนึ่ง โดยใน daily build นั้น Tuckwila ออกมาเสถียร แต่ Cairo พังบ่อย
- ฟีเจอร์ของ Cairo ค่อย ๆ ถูกตัดออก และสิ่งที่ Cutler จำได้ว่าเป็นผลจากการย้ายหลัก ๆ คือซอฟต์แวร์ file server และ Kerberos
- NT 4.0 ยังคงเป็นเวอร์ชันที่ได้รับความนิยมมาก และ Cutler บอกว่าเขาเคยเจอคนที่ยังใช้งาน NT 4.0 อยู่
- กำหนดการของ NT 3.1 ใช้เวลานานกว่า VMS
- เขาบอกว่า VMS ถูกสร้างใน 2 ปีโดยทีมที่เก่งมากราว 20 คน
- ส่วน NT ต้องทำมากกว่าเดิม และขอบเขตก็ใหญ่ขึ้นเมื่อเลิก i860 แล้วเพิ่ม MIPS, x86, Alpha และสถาปัตยกรรมอื่น ๆ
- ในกระบวนการที่นำไปสู่ Longhorn และ Vista ปัญหาใหญ่คือ การแยก codebase
- หลัง Windows 2000 codebase ของเซิร์ฟเวอร์และเวิร์กสเตชันแยกจากกัน ฝั่งเซิร์ฟเวอร์ต้องแก้ปัญหาด้านความปลอดภัยจำนวนมาก ขณะที่ฝั่งผู้ใช้ทั่วไปมีทั้ง build และการรันที่ไม่เสถียร
- XP ประสบความสำเร็จมาก แต่ก็มีบั๊กจำนวนมาก และเมื่อปัญหาด้านความปลอดภัยรุนแรงขึ้น ก็ต้องทุ่มแรงอย่างมากกับการแก้บั๊กของ XP
- กลุ่มของ Cutler แก้ security bug ที่เกี่ยวกับ XP ไปราว 5,000 รายการ
- ส่วนขยาย x64 ของ AMD กลายเป็นจุดเปลี่ยนสำคัญภายใน Microsoft
- AMD เสนอแนวคิดการขยายสู่ 64 บิตที่รุกล้ำน้อยกว่า และยังรันแอปพลิเคชัน 32 บิตได้เร็ว
- Cutler ตัดสินใจทำเวิร์กสเตชันและเซิร์ฟเวอร์ 64 บิตบนฐาน codebase ฝั่งเซิร์ฟเวอร์ และนี่ไม่ใช่โปรเจ็กต์ที่บริษัทอนุมัติอย่างเป็นทางการตั้งแต่แรก
- เมื่อเครื่อง AMD มาถึง เขาบูตครั้งแรกจาก CD และระบบ 64 บิตก็สามารถบูตและทำงานได้ทันที
microsoft.comทดสอบเซิร์ฟเวอร์ 64 บิตราว 1 สัปดาห์ก่อนสลับใช้งานจริง และประเมินว่ามันเสถียรกว่าระบบ 32 บิตมาก
- ท้ายที่สุด Longhorn ก็เปลี่ยนมาใช้ codebase x64 และ codebase นั้นก็สืบต่อมาจนถึงปัจจุบัน
โครงสร้างภายในของ Windows และโค้ดที่ยังคงอยู่ถึงปัจจุบัน
- ใน Windows 11 ยังมีฟังก์ชันและโครงสร้างหลักจากยุค NT 3.5 หลงเหลืออยู่มาก
- แกนอย่าง kernel code, โครงสร้าง memory management, โครงสร้าง process และ object manager ยังคงสืบต่อมา
- สัดส่วนของโค้ดดั้งเดิมเมื่อเทียบกับโค้ดทั้งหมดลดลงเรื่อย ๆ แต่โครงสร้างหลักที่ทำหน้าที่เดิมยังคงอยู่จำนวนมาก
- Cutler ยก object manager ของ NT ว่าเป็นเหตุผลสำคัญที่ทำให้ codebase นี้ดี
- ต่างจากแนวคิด “everything is a file” ของ Unix ใน NT สามารถสร้าง descriptor ของ object type ใหม่ แล้วผนวกรวมเข้ากับ object manager เพื่อเพิ่ม object ของระบบปฏิบัติการชนิดใหม่ได้
- object สามารถให้ความสามารถอย่าง synchronization และ access control ได้
- handle table เป็นส่วนสำคัญด้านประสิทธิภาพ จึงถูกเขียนใหม่หลายครั้ง
- handle translation เป็นประเด็นด้านประสิทธิภาพจริง
- เขายกตัวอย่างว่าระบบงานของเขามีประมาณ 60 process, หลายร้อย thread และ handle เปิดอยู่ 150,000 รายการ
- การที่ Task Manager ใหญ่ขึ้นถูกยกเป็นตัวอย่างของ code bloat
- เดิม Task Manager คอมไพล์ออกมาได้ 85KB แต่ตอนนี้เป็น 4MB
- ปัจจุบันมันแสดงข้อมูลเพิ่มขึ้นมาก เช่น CPU, เครือข่าย, ดิสก์ แต่ Cutler ไม่คิดว่าฟังก์ชันเพิ่มขึ้นมากพอจะสมกับขนาดที่โตขึ้น
- การตัดสินใจย้าย graphics driver จาก user mode ไป kernel mode จำเป็นต่อประสิทธิภาพ แต่ก็มีช่วงเจ็บปวดมาก
- ตอนแรก Cutler คัดค้านการย้ายไป kernel mode
- user mode กับ kernel mode มีโมเดลการ synchronization ต่างกัน จึงไม่ใช่แค่ย้ายโค้ดแบบตรง ๆ และยังมีภาระจาก data structure กับ primitive แบบ 16 บิต
- หลังจากนั้นความน่าเชื่อถือดีขึ้นมาก แต่ช่วงหนึ่งก็มีปัญหาจาก graphics driver ของผู้ขายจำนวนมาก
Azure, Xbox, xCloud
- หลังส่งมอบระบบ x64 แล้ว Cutler ถึงกับบอกว่าจะลาออกจาก Microsoft เพราะปัญหา
fcibแต่หลัง Steve Ballmer แนะนำให้พักร้อน เขาก็กลับมาในเดือนพฤศจิกายน 2005fcibหมายถึง checked-in binary และการที่หลายกลุ่มเช็กอินไบนารีแทนซอร์สทำให้การพอร์ตทำได้ยาก
- หลังจากนั้นเขาเข้าร่วมโปรเจ็กต์ Azure ระยะแรก
- Ray Ozzie เห็นปัญหาว่าไม่มีโครงสร้างพื้นฐานร่วมสำหรับบริการบนคลาวด์หลายแบบ จึงเริ่มโปรเจ็กต์นี้
- Azure ยุคแรกตั้งเป้าทำโครงสร้างพื้นฐานระดับแพลตฟอร์ม เช่น การ deploy แอปพลิเคชัน, การควบคุมการตั้งค่า, version management, restart, billing และ cloud file system
- เขาอธิบายว่า AWS ให้สิ่งที่เน้น infrastructure เป็นหลัก ขณะที่ Microsoft ตอนแรกตั้งใจขายบริการระดับแพลตฟอร์ม
- hypervisor รุ่นแรกของ Azure ถูกสร้างบนเทคโนโลยีที่ได้มาจากการซื้อกิจการ Connectix
- Connectix มีผลิตภัณฑ์ Virtual PC และ Virtual Server และการพัฒนา hypervisor ก็เริ่มต้นมาแล้วในระดับต้น
- ต่อมา hypervisor ของ Xbox ก็มาจาก Red Dog hypervisor ของ Azure
- Xbox ทำงานด้วยโครงสร้าง 3 VM
- host system เป็นเจ้าของอุปกรณ์ทั้งหมด และทำหน้าที่เป็น traffic cop ของการสื่อสารระหว่าง VM
- presentation VM รับผิดชอบ window manager และระบบแสดงผล และทำงานต่อเนื่องตลอดเวลา
- game VM จะเริ่มและหยุดตามแต่ละเกม และตัวเกมจะถูกแพ็กเกจมาพร้อม OS
- โครงสร้างที่แพ็กเกจเกมมากับ OS นี้เอื้อต่อ backward compatibility
- นักพัฒนาเกมจะแพ็กเกมพร้อม OS ของ GDK และเมื่อรัน VM ที่ตรงกันก็จะถูกเปิดขึ้นมาด้วย
- วิธีนี้ช่วยหลีกเลี่ยงปัญหาที่การเปลี่ยนระบบปฏิบัติการทำให้เกมเดิมพัง
- อย่างไรก็ตาม หากต้องใส่ฟีเจอร์ให้เกมเก่า ก็จำเป็นต้องอ้อมด้วยสิ่งอย่าง universal game OS
- ฟังก์ชัน pause/resume ของ Xbox ทำงานด้วยวิธีบันทึกและกู้คืน VM
- การโหลดเกมเกี่ยวข้องกับข้อมูลระดับกิกะไบต์ จึงใช้เวลานาน
- pause/resume คือการบันทึกสถานะของ VM แล้วนำกลับคืนมาในภายหลัง
- งานปัจจุบันที่ถูกพูดถึงคือ Linux VM และ graphics stack ที่ใช้เวลาว่างของคอนโซล xCloud
- xCloud มีโครงสร้างแบบนำคอนโซล Xbox ไปจัดวางใหม่บนแร็กในดาต้าเซ็นเตอร์แล้วเปิดให้เข้าถึงจากระยะไกล
- คอนโซลเป็นแบบ single tenant จึงมีผู้ใช้ได้ทีละคนและมีเวลาว่างเกิดขึ้น
- เพื่อวางแผนรัน workload ด้าน machine learning ของ Microsoft ในช่วงที่ไม่ได้ใช้งาน จึงกำลังทำ Linux VM, Xbox hypervisor และ graphics stack อยู่
คุณภาพ การจัดการทีม และปรัชญาการพัฒนา
- Cutler นำแนวคิดที่ว่า “คนที่ประสบความสำเร็จคือคนที่ทำสิ่งที่คนล้มเหลวปฏิเสธจะทำ” มาใช้กับทีมซอฟต์แวร์ด้วย
- เขามองว่าแนวคิดแบบเขียนโค้ดแล้วไม่ทดสอบ, ยังมีตารางเวลาแต่เลิกงานตอน 5 โมงเป๊ะ, หรือไม่อยากแก้บั๊กของตัวเอง เป็นปัญหา
- เขาให้ความสำคัญกับทัศนคติที่ลงมือทำสิ่งที่จำเป็นเพื่อให้โปรเจ็กต์สำเร็จ
- เขาให้คุณค่ากับ “Thinker-doer” มาก
- โดยอ้างคำพูดของ Brooks ว่าคนที่คิดอย่างเดียวมีมาก แต่คนที่ลงมือทำจริงมีน้อย และคนที่ทำได้ทั้งสองอย่างยิ่งหายาก
- แม้แต่สถาปนิกก็ควรสร้างผลลัพธ์จริงที่ตอบโจทย์เป้าหมายและข้อจำกัด
- เขาเคยอยากเขียนประโยค “ถ้าไม่ใส่เข้าไป ก็ไม่ต้องดึงออกมา” ไว้บนผนังห้องแล็บที่ University of Washington
- ใช้เพื่อเน้นความยับยั้งชั่งใจที่จะไม่ใส่ฟีเจอร์ที่ไม่จำเป็น
- ในสภาพแวดล้อมการพัฒนายุคแรก เครื่องมือดีบักยังย่ำแย่ จึงต้องมีทัศนคติที่พยายามลดความผิดพลาดตั้งแต่ต้น
- ในอดีตบางครั้งถึงขั้นต้องใช้ logic analyzer หรือ oscilloscope
- เขามองว่าเครื่องมือทุกวันนี้ช่วยลดความผิดพลาดเล็ก ๆ ได้มาก แต่แรงกดดันเรื่องคุณภาพไม่เหมือนในอดีต
- เขามองว่าการทำหลายงานพร้อมกันทำได้ แต่ประสิทธิภาพสูงสุดมาจากการโฟกัสงานเดียว
- เพราะ context switch มีต้นทุนด้านเวลา
- อย่างไรก็ตาม เขาก็บอกว่าตัวเองยังสลับไปช่วยคนอื่นแก้ปัญหาที่ติดขัดหรือแก้บั๊กได้บ้าง
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ผู้สัมภาษณ์อย่าง Dave Plummer เองก็เป็นคนที่น่าสนใจมากทีเดียว โดยเฉพาะวิดีโอเขียนโค้ดแนวเรโทรอย่าง https://www.youtube.com/watch?v=JlZe2JwrJqM และ https://www.youtube.com/watch?v=b0zxIfJJLAY นั้นดีมาก
วิดีโอก็สนุก แถมเพลงประกอบกับไฟ RGB ยังให้บรรยากาศคริสต์มาสด้วย และยังทำให้ผมมอง Microsoft ต่างไปจากภาพที่เคยคุ้นอย่างสิ้นเชิง เขายอมรับความแปลก ๆ ของ Redmond แต่ก็พูดถึงงาน เพื่อนร่วมงาน และ Microsoft ด้วยความอบอุ่น
แต่พอดูช่องนี้แล้ว อัลกอริทึม YouTube เหมือนจะเริ่มทำงานบางอย่าง ทำให้ฟีดแนะนำเต็มไปด้วยวิดีโอเกี่ยวกับ ADHD น่าจะเป็นเพราะวิดีโอเกี่ยวกับออทิซึมและ ADHD แต่ YouTube ก็น่าจะฉลาดพอจะรู้ได้ว่าที่ผมดูมีแค่วิดีโอเกี่ยวกับการเขียนโค้ดกับประวัติ Microsoft เท่านั้นไม่ใช่หรือ
แต่ถึงจะไม่อยากพูดแบบนี้ สิ่งที่เขาพูดในหัวข้อที่อยู่นอก Microsoft/Windows ควรฟังแบบกรองเยอะ ๆ โดยเฉพาะหลังจากคอมเมนต์ด้านล่าง [1]
เหตุการณ์ล่าสุดที่บังคับให้ปิดตัวบล็อกโฆษณาก็ทำให้ตาสว่างเหมือนกัน โฆษณา YouTube นี่แย่มากจริง ๆ ถึงขั้นน่าอายเมื่อคิดว่ามีคนจริง ๆ ตอบสนองกับมัน YouTube ดูเหมือนจะเลิกแม้แต่จะแสร้งทำว่าอยากมอบประสบการณ์ผู้ใช้ที่ดีแล้ว
ถึงอย่างนั้น ถ้าจะได้ดูของยอดเยี่ยมอย่างบทสัมภาษณ์ Dave Cutler นี้ ก็คุ้มที่จะคุ้ยโคลนสักหน่อย
ไม่ได้ล้อเล่น และคำว่า “ครึ่งหนึ่ง” ก็แม่นพอสมควร เหมือนมีอะไรพัง หรือไม่ YouTube ก็เอาโมเดลภาษาขนาดใหญ่มาต่อเข้ากับเอนจินแนะนำแล้ว
ผมชอบดูเขาพูดแบบฉับพลันมากกว่าวิดีโอที่ตัดต่อมาอย่างดี
หลังจากวิดีโอเดียวอันนั้น คำแนะนำก็เต็มไปด้วยเรื่องมะเร็ง ผู้ป่วยใกล้เสียชีวิต และเรื่องโรคภัยสารพัด วิดีโอนั้นไม่ได้เกี่ยวข้องกับคอนเทนต์ปกติของคนคนนั้นเลย และผมก็ไม่ได้ดูวิดีโอแนะนำแบบนั้นเลยสักอัน แต่มันก็ยังถูกดันเข้ามาไม่หยุด
ยังไม่ได้ดูวิดีโอนี้ แต่เมื่อหลายปีก่อนเคยอ่าน Showstopper[1] เลยตั้งตารออยู่
สิ่งที่ยังจำได้เป็นพิเศษจากช่วงอายุยี่สิบต้น ๆ ตอนที่คิดว่าตัวเองต้องทำงานอยู่ตลอด คือส่วนที่เล่าว่า Dave ลาพักร้อนตรงเวลาทุกครั้ง โดยไม่ต้องถกเถียง และต้องลาจริง ๆ
ต่อให้ไม่ชอบ Microsoft ก็เป็นไปได้ว่านั่นเป็นครั้งแรกที่ผมได้เห็นตัวอย่างจริงจังของคนที่มีความสามารถสูงและมีคุณสมบัติครบถ้วน แต่ไม่ได้ถูกบดใช้งานตลอด 24 ชั่วโมง
แค่เขียนแบบนี้ก็ยังรู้สึกแปลกอยู่ แต่มันเป็นวิธีคิดที่สืบมาจากวัฒนธรรมชนบทและค้าปลีกทำนองว่า “ยิ่งลำบาก ยิ่งมีคุณธรรม”
แม้ตอนนี้การพักผ่อนให้เป็นเรื่องเป็นราวก็ยังยาก และมักผัดออกไปได้ง่ายด้วยเหตุผลว่า X หรือ Y สำคัญกว่า ถึงอย่างนั้น พอนึกถึงมุมมองของ Dave ก็เป็น reminder ที่ดีว่า การพักผ่อนกับการทำ X ให้ดีไม่ใช่สิ่งที่ต้องเลือกอย่างใดอย่างหนึ่ง
[1]: https://www.amazon.com/Show-Stopper-Breakneck-Generation-Mic...
“จงระลึกถึงวันสะบาโต ถือเป็นวันบริสุทธิ์… จงทำงานหนักหกวันและทำงานทั้งหมดของเจ้า แต่วันที่เจ็ดเป็นวันสะบาโตของพระยาห์เวห์พระเจ้าของเจ้า…”
https://en.wikipedia.org/wiki/Protestant_work_ethic
https://www.biblegateway.com/passage/?search=Exodus%2020&ver...
ยิ่งพนักงาน “เอาจมูกจ่อหินลับ” และทำงาน “จนหลังคด” กำไรบริษัทก็ยิ่งเพิ่ม แต่ไม่จำเป็นต้องจ่ายเงินเดือนเพิ่ม พอสุขภาพพังพอจนทำงานไม่ได้ ก็แค่เปลี่ยนคนใหม่
ขอโทษที่ตอบดึก ๆ เลยเขียนหยาบไปหน่อย แต่คิดว่าคนที่นี่คงเข้าใจได้โดยสัญชาตญาณอยู่แล้ว
แล้วผมก็เจอ burnout และตอนนี้มองว่าการพักผ่อน รวมถึงการยึดวันทำงาน 8 ชั่วโมง ยกเว้นเหตุฉุกเฉินจริง ๆ ไม่ใช่แค่ความรับผิดชอบส่วนตัว แต่เป็นความรับผิดชอบในฐานะมืออาชีพด้วย เพราะมันลดความเสี่ยง burnout และ burnout ก็แย่ต่อทุกคนอย่างแท้จริง
เคยอ่านเจอว่าช่วงท้ายของการพัฒนา WinNT 3.1 มีใครบางคนทำ สกรีนเซฟเวอร์ ที่แสดงจอฟ้า อาจจะเป็นบน Usenet ก็ได้
ก่อนหน้านั้นผมไม่เคยทำสกรีนเซฟเวอร์เลย แต่เพราะบั๊กในไดรเวอร์เครือข่ายภายในของ Microsoft ผมสามารถทำให้เครื่องพัฒนา WinNT ของผมขึ้นจอฟ้าได้อย่างสม่ำเสมอ
ก็เลยอ่านเอกสารการเขียนสกรีนเซฟเวอร์ของ Windows จดค่าต่าง ๆ ที่แสดงบนจอฟ้าของผม แล้วทำสกรีนเซฟเวอร์ Windows ตัวแรกและตัวสุดท้ายของตัวเองแบบลวก ๆ
เพื่อความสนุก ผมส่งเมลไปบอกกลุ่ม Windows NT ว่าผมทำอะไรไว้ แล้วไม่กี่สัปดาห์ต่อมากลุ่มบิลด์ NT ก็ตัดสินใจแกล้ง Dave Cutler
พวกเขาติดตั้งสกรีนเซฟเวอร์จอฟ้าของผมบนบิลด์เซิร์ฟเวอร์เครื่องหนึ่ง ถอดเมาส์กับคีย์บอร์ดออก แล้วรอ
Dave Cutler เดินมาดูสถานะบิลด์ NT ล่าสุด เปิดจอ แล้วเห็นจอฟ้า เขาขยับเมาส์แต่ไม่มีอะไรตอบสนอง กดคีย์บอร์ดก็ไม่มีอะไรตอบสนอง
แล้วสิ่งที่ไม่คาดคิดก็เกิดขึ้น เขาเอื้อมมือไปกดปุ่ม power ของบิลด์เซิร์ฟเวอร์เพื่อรีบูตเครื่องเลย NOOOOOOOOOOOOOOOOOOOOO
ผมไม่เคยได้ยินผลสะเทือนหรือผลลัพธ์ของการแกล้งครั้งนั้นเลย พลังอันยิ่งใหญ่มาพร้อมความรับผิดชอบอันใหญ่ยิ่ง
ผมเองก็ติดตั้งมัน และเพื่อนร่วมงานหลายคนที่นั่งอยู่ใกล้ ๆ ก็ลงเหมือนกัน
CTO แวะมาเพราะมีประชุมตอนเช้ามืด เห็นมันโผล่บนทุกจอ แล้วตื่นตระหนกนิดหน่อย คิดว่าเป็นไวรัสแพร่กระจายหรือบั๊กซอฟต์แวร์
ขอแนะนำหนังสือที่มีคนแนะนำไว้เมื่อไม่กี่สัปดาห์ก่อนที่นี่ด้วย คือ “Showstopper!: The Breakneck Race to Create Windows NT and the Next Generation at Microsoft”
ยังอ่านอยู่ แต่สนุกมากจริง ๆ และทำให้คิดว่าอยากได้มีส่วนร่วมในประวัติศาสตร์ช่วงนั้น โดยเฉพาะส่วนที่ dogfooding ระบบปฏิบัติการใหม่หมดจด เพียงแต่มันเกิดเร็วเกินช่วงเวลาของผมไปหลายปี
หนังสือเล่มนั้นทำให้ผมฟังดูเหมือนรู้เรื่องมากกว่าความจริงเยอะ และทำให้ตื่นเต้นกับสาขานั้นทั้งหมดมากกว่าก่อนหน้านั้นไม่กี่วันมาก
ได้ข้อเสนอมา แต่สุดท้ายก็ไม่ได้รับงานนั้น
ที่เกี่ยวข้องกันก็มีอันนี้ด้วย: https://blog.codinghorror.com/showstopper/
ส่วนที่น่าสนใจคือ Xbox hypervisor ไม่ได้ถูกสร้างโดยฝั่งเดสก์ท็อป แต่มีพื้นฐานจาก Azure และเกม Xbox ก็ไม่ได้พึ่งพาระบบปฏิบัติการเดี่ยวบนอุปกรณ์ แต่ถูกแพ็กเกจมาพร้อมกับระบบปฏิบัติการ ทำให้ใกล้เคียงกับคอนเทนเนอร์มากกว่าเล็กน้อย
Dave บอกด้วยว่าเขากำลังทำให้เครื่อง Xbox Cloud Gaming ที่ว่างงานสามารถรันงานแมชชีนเลิร์นนิงได้ ไม่เคยคิดมาก่อนเลยว่า Azure กับ Xbox จะมีความเชื่อมโยงเชิงสถาปัตยกรรมแบบนี้
เช่น ไฟล์ปฏิบัติการของเกมถูกเข้ารหัสไว้บนแผ่นเกมจริง ๆ และแม้แต่การดัมป์ไบนารีจริงที่กำลังรันอยู่ก็แทบเป็นไปไม่ได้ RAM ก็ถูกเข้ารหัสด้วย
อีกอย่างหนึ่ง เหตุผลหนึ่งที่ TPM สมัยใหม่ถูกย้ายเข้าไปอยู่ใน CPU ก็เพื่อไม่ให้ผู้คนดักฟังบัส TPM ได้เหมือนที่เคยทำกับ Xbox
เคยทำงานในทีมเคอร์เนล Windows และเรื่องที่ผมชอบที่สุดเกี่ยวกับ DC คือเขาเกลียด สถาปัตยกรรม Itanium มากจนแทบจะเป็นคนทำให้ x64 เกิดขึ้นจริง
เขาทำงานร่วมกับ AMD และผลักดันเรื่องนี้อย่างจริงจัง โดยนั่งเขียนโค้ดต่อเนื่องในออฟฟิศมุมของตัวเอง
แนวคิดคือ “เอาคำสั่งหลายคำสั่ง ซึ่งบางครั้งมีความยาวบิตแปรผัน มามัดรวมไว้ในเวิร์ดเดียว แล้วปล่อยให้คนเขียนคอมไพเลอร์หาชุดคำสั่งที่เหมาะที่สุด” ซึ่งจะทำให้การนำไปใช้งานเรียบง่ายขึ้นและอาจเร็วขึ้นได้ แต่ถ้าคอมไพเลอร์หาชุดคำสั่งที่เหมาะที่สุดนั้นไม่ได้ ก็จะช้ากว่าการออกแบบแบบดั้งเดิมอย่าง x86 เสียอีก
ต้องมีใครสักคนในระดับสูงมากภายใน Intel ที่รักไอเดียนี้จริง ๆ เพราะตลอดประวัติศาสตร์ของ Intel ในฐานะผู้ผลิตไมโครโปรเซสเซอร์รายใหญ่ พวกเขาลองสามครั้งและล้มเหลวสามครั้ง
ตอนนั้น AMD64 ถูกมองว่าเป็น “ของเดิมเพิ่มอีกหน่อย” จึงไม่ได้ถูกมองว่าเป็นไอเดียที่ดี แต่ก็ถือว่า Dave ทำได้ดีที่ช่วยกวาดกองของจิปาถะซึ่งแทบจะฆ่าการปฏิวัติ RISC ออกไป
หวังว่าสักวันหนึ่งผมจะสร้างอะไรที่น่าประทับใจระดับนั้นได้ในเวลาว่างบ้าง
น่าเสียดายสำหรับ Microsoft ที่ของรางวัลนั้นตกเป็นของ Linux บน x86-64 แทน
หนึ่งในช่วงเวลาที่ชี้ขาดที่สุดในอาชีพวิศวกรรมซอฟต์แวร์ของผม คือเมื่อ 6–7 ปีก่อน ตอนที่อ่าน ซอร์สโค้ด NT ที่รั่วไหล ควบคู่ไปกับ Showstopper[1]
สิ่งที่ทำให้ชุดซอร์ส NT ที่รั่วไหลนั้นน่าหลงใหลเป็นพิเศษคือมีประวัติผู้เขียนครบถ้วน ทำให้เห็นได้ว่า Dave Cutler ทำงานกับไฟล์ไหนบ้าง หนังสือยังลงรายละเอียดเรื่องต่าง ๆ เช่น ที่มาของการมีเซ็กชันที่แบ่งหน้าได้ในโมดูลเคอร์เนล ซึ่งแค่นั้นก็น่าสนใจแล้ว
ในหนังสือมีฉากที่ Cutler เข้ามาแก้รูทีนแอสเซมบลีบางตัว และในซอร์สโค้ดจริงก็สามารถเห็นได้ชัดเจนว่ารูทีนนั้นคืออะไร
โค้ดของ Cutler เป็น C code ที่งดงามจริง ๆ และตอนนี้ก็คงยังเป็นแบบนั้น มันมีอิทธิพลอย่างมากต่อวิธีที่ผมเขียน C code สไตล์ NT
[1]: https://www.amazon.com/Show-Stopper-Breakneck-Generation-Mic...
บทสัมภาษณ์ประวัติแบบปากเปล่าของ David Cutler จาก Computer History Museum ก็ดีมากเช่นกัน
Part 1: https://youtu.be/29RkHH-psrY
Part 2: https://youtu.be/SVgSLud50ss
ได้ดูบางส่วนของบทสัมภาษณ์ใหม่แล้ว แต่จนถึงตอนนี้ยังไม่แน่ใจว่ามีอะไรที่เพิ่งได้ยินเป็นครั้งแรกหรือเปล่า
เมื่อย้อนดูสิ่งที่ Dave ทั้งสองพูด จะเห็นว่าพวกเขาใส่ใจอย่างมหาศาลกับ การทำให้เสร็จแล้วปล่อยออกสู่ตลาด แต่แทบไม่มีการพูดถึงแผนระยะยาวหรือกลยุทธ์ด้านความปลอดภัยที่แท้จริงเลย
ทั้งหมดเป็นเรื่องของการอยู่ภายใต้แรงกดดันทางธุรกิจ แล้วป้อนเนื้อเข้าเครื่องบดเพื่อทำไส้กรอกออกมา และลดความล้มเหลวให้อยู่ในระดับที่ยอมรับได้
จึงไม่น่าแปลกใจที่สถานการณ์ของทั้งอุตสาหกรรมไม่ได้ดีขึ้น และไม่ได้หันไปในทิศทางที่ถูกต้อง เคยคิดว่าสักวันเราคงไปถึงความปลอดภัยแบบ capability-based แต่ตอนนี้ดูเหมือนว่าเราจะติดอยู่ตลอดกาลกับญาติห่าง ๆ ที่แทบไร้ค่าอย่างแฟล็กสิทธิ์ของแอปพลิเคชัน
น่าเป็นห่วงอนาคตจริง ๆ
ขอแค่มีไตรมาสหรือไม่กี่ปีก็พอที่ดีพอจะใช้เป็นเหตุผลเลื่อนจาก VP เป็น SVP หรือจาก SVP เป็น CEO ไม่มีใครไปโทษและลงโทษคนที่ย้ายไปบทบาทใหม่แล้วในอีก 3 ปีต่อมา เพราะการตัดสินใจสายตาสั้นที่เขาทำไว้ในบทบาทก่อนหน้า
แต่นั่นไม่ได้หมายความว่า Cutler เป็นผู้บริหารแบบนั้น เพียงแต่เขาได้รับแรงกดดันจากเบื้องบนอย่างชัดเจน ทั้งแรงกดดันให้ปล่อยผลิตภัณฑ์และแรงกดดันให้รักษากระแสรายได้เอาไว้ อย่างที่เขาพูดช่วงต้นของการสัมภาษณ์ เขาเกลียดมากที่ต้องส่งมอบซอฟต์แวร์พร้อมบั๊ก ผิดหวังอย่างมากกับคุณภาพของวิศวกรซอฟต์แวร์ในอุตสาหกรรม และเกลียดมากที่ผู้จัดการโปรแกรม/โครงการปฏิบัติต่อบั๊กทุกตัวเหมือนเป็นเคสขอบที่เกิดได้ยาก เห็นด้วยกับทั้งสามข้อ
บั๊กส่วนใหญ่ที่ผมส่งขึ้นไปก็ถูกมองว่าเป็น “เคสขอบ” เช่นกัน แต่ผมเจอปัญหานั้นทุกวัน และในฐานข้อมูลก็มีประเด็นซ้ำอยู่หลายรายการ หรือไม่บั๊กของผมก็ถูกทำเครื่องหมายว่าซ้ำกับรายงานที่มีมาก่อนอีกที
ผมอยู่ในอุตสาหกรรมนี้มาหลายสิบปี และทั้งหมดอยู่ใน Big Tech จากที่เห็นมา แม้ว่าวิศวกรและผู้จัดการชั้นต้นจะผลักดันให้แก้บั๊กก่อนปล่อย และเรียกร้องให้ออกอัปเดตแก้บั๊กให้ถี่ขึ้น สุดท้ายก็ยังไม่เคยเห็นบริษัทไหนที่ไม่ยอมอ่อนให้กับแรงกดดันประเภทเดียวกันนี้
มันเป็นจุดขายใหญ่ แต่สำหรับผู้ใช้ส่วนใหญ่แล้วไม่ได้รู้สึกว่าเกี่ยวข้องเท่าไร จริง ๆ แล้วหลายคนรู้สึกว่า “ทำไมฉันต้องใช้สิ่งนี้ด้วย?” และมันทำให้ดูเหมือนไม่ใช่ระบบปฏิบัติการสำหรับ “ผู้ใช้ทั่วไป”
แนวคิดเรื่องความปลอดภัยในช่วงต้นทศวรรษ 1990 กล่าวคืออะไรที่ทำให้ปลอดภัย และเกี่ยวข้องกับใครมากน้อยแค่ไหน ไม่สอดคล้องกับความคาดหวังหรือมาตรฐานสมัยใหม่ในวันนี้
การทำให้ถูกต้องอาจต้องใช้เวลาสักหน่อย ระหว่างนั้นก็หวังว่าทางเลือกแบบครึ่ง ๆ กลาง ๆ ที่ถอยหลังและยึดติดกับการคงสภาพเดิมโดยอิงรันไทม์เดียว จะไม่เป็นฝ่ายชนะ
[0]: https://github.com/bytecodealliance/wasmtime/blob/main/docs/...
นี่อาจเป็นผลผลิตทางเศรษฐกิจที่ใหญ่ที่สุดที่ซอฟต์แวร์ “มอบให้” เรา ก็สัญญาผูกพันแบบ “เราจะรับเงิน แต่ไม่สัญญาอะไรทั้งนั้นนะ ไอ้หมูรอเชือด!” นั่นแหละ
กลับกัน ถ้าออกสู่ตลาดเป็นรายที่สอง คุณจะถูกลงโทษ
ตั้งตารอฟังทั้งหมดนี้เลย
ไม่ว่าจะรู้สึกอย่างไรต่อคนคนนั้นหรือบริษัทที่เขาทำงานให้ Cutler ก็เป็นวิศวกรซอฟต์แวร์ที่มีอิทธิพลอย่างมากจากผลงานบน OpenVMS และ Windows NT ผมคิดว่าเขาไม่ได้ถูกพูดถึงบ่อยเท่าบุคคลอย่างคนจาก Bell Labs, Stallman, Linus หรือ Stroustrup