ขบวนการ 0deps: การพึ่งพาภายใน (Local Dependencies) และสัญญาที่ไม่เปลี่ยนแปลง (Immutable Contracts)
นักพัฒนาซอฟต์แวร์มักจะติดตั้งไลบรารีภายนอกหลายร้อยรายการ เฟรมเวิร์กสมัยใหม่ต้องพึ่งพา transitive dependencies นับพันรายการ ซึ่งหมายความว่าแอปของคุณกำลังรันโค้ดจากคนแปลกหน้าที่คุณไม่รู้จัก
ความรวดเร็วนี้มีราคาที่ต้องจ่าย คุณกำลังเผชิญกับความเสี่ยงด้านซัพพลายเชนของซอฟต์แวร์ (software supply chain risks)
ทุกการพึ่งพาสร้างพื้นที่การโจมตี (attack surface) ให้เพิ่มขึ้น การพึ่งพาเหล่านี้สามารถ:
- นำช่องโหว่ด้านความปลอดภัยเข้ามา
- กลายเป็นเป้าหมายของการโจมตีซัพพลายเชน
- ถูกผู้พัฒนาทอดทิ้ง
- เปลี่ยนแปลง public API ของตนเอง
- ทำลายความสามารถในการทำงานร่วมกับเวอร์ชันเก่า (backward compatibility)
ขบวนการ 0deps กำลังเปลี่ยนสิ่งนี้ โดยตั้งคำถามว่า: จะเป็นอย่างไรหากแอปของคุณพึ่งพาเฉพาะโค้ดที่คุณควบคุมได้เท่านั้น?
ในโมเดลแบบ 0deps คุณจะนำโค้ดที่จำเป็นทั้งหมดเข้ามาไว้ใน repository ของโปรเจกต์โดยตรง คุณไม่ต้องดาวน์โหลดแพ็กเกจในระหว่างการติดตั้งหรือระหว่างการ build ทุกอย่างที่คุณต้องการจะอยู่ที่นั่นทันทีเมื่อคุณ clone repo มา
สิ่งนี้ให้ประโยชน์หลายประการ:
- การ build ที่ทำซ้ำได้ (Reproducible builds)
- ไม่ต้องพึ่งพา registry ของแพ็กเกจภายนอก
- การตรวจสอบความปลอดภัยแบบรวมศูนย์
- ความสามารถในการคาดการณ์ที่สูงขึ้น
- ความเสี่ยงด้านซัพพลายเชนที่ต่ำลง
เป้าหมายไม่ใช่การหยุดยั้งไม่ให้โค้ดเปลี่ยนแปลง อัลกอริทึมและการแก้ไขด้านความปลอดภัยต้องมีการพัฒนา สิ่งที่จะยังคงเดิมคือสัญญาที่เป็นสาธารณะ (public contract)
คุณออกแบบอินเทอร์เฟซที่เสถียรสำหรับแต่ละไลบรารี ตัวอย่างเช่น:
authenticate()createSession()verifyPasskey()
การทำงานเบื้องหลัง (implementation) ของฟังก์ชันเหล่านี้สามารถเปลี่ยนไปได้อย่างสิ้นเชิง คุณสามารถเขียนตรรกะใหม่หรือเปลี่ยนไลบรารีใหม่ได้ โดยที่ส่วนที่เหลือของแอปคุณจะไม่รับรู้ถึงความแตกต่างนั้นเลย
สิ่งนี้ช่วยแก้ปัญหาที่น่าปวดหัวที่สุดในระหว่างการอัปเดต โดยปกติแล้ว คุณมักจะกังวลว่าการแก้บั๊กหนึ่งอย่างอาจจะทำให้แอปพังไปพร้อมกัน แต่ด้วย 0deps ตัว public API จะยังคงเหมือนเดิมทุกประการ แอปพลิเคชันของคุณจะยังคงทำงานต่อไปได้โดยไม่ต้องแก้ไขโค้ด
คุณแยกเครื่องมือภายนอกไว้เบื้องหลัง internal adapters หากไลบรารีตัวหนึ่งเลิกใช้งานไปในวันพรุ่งนี้ คุณก็แค่ต้องอัปเดตตัว adapter เท่านั้น ส่วนที่เหลือของระบบของคุณก็จะยังคงปลอดภัย
0deps ไม่ได้ต่อต้าน open source แต่ต้องการใช้งาน open source อย่างปลอดภัยยิ่งขึ้น แทนที่จะเป็นการติดตั้งแบบไดนามิก (dynamic installs) คุณจะปฏิบัติกับไลบรารีเสมือนเป็นส่วนประกอบที่รวมเข้าเป็นเนื้อเดียวกัน (integrated components) คุณตรวจสอบพวกมัน คุณกำหนดเวอร์ชันให้พวกมัน และคุณห่อหุ้ม (encapsulate) พวกมันไว้
ซอฟต์แวร์มีอายุยืนยาวหลายทศวรรษ แต่ไลบรารีและเฟรมเวิร์กนั้นมีวันตาย 0deps ช่วยให้มั่นใจว่าแอปพลิเคชันของคุณจะยังคงทำงานต่อไปได้ท่ามกลางการเปลี่ยนแปลงเหล่านั้น
Optional learning community: https://t.me/GyaanSetuAi
