ชุมชนนักพัฒนาซอฟต์แวร์กำลังมีส่วนร่วมในการอภิปรายอย่างร้อนแรงเกี่ยวกับว่าโมเดลภาษาขนาดใหญ่ ( LLMs ) กำลังทำให้นักพัฒนามีแนวโน้มที่จะใช้ไลบรารีที่มีอยู่แล้วน้อยลงหรือไม่ ในขณะที่บางคนโต้แย้งว่าโค้ดที่สร้างโดย AI กำลังสร้างนิสัยที่ไม่ดี คนอื่นๆ มอง LLMs เป็นเครื่องมือที่มีประสิทธิภาพซึ่งช่วยปรับปรุงการใช้ไลบรารี
ช่องโหว่ด้านความปลอดภัยเป็นเชื้อเพลิงให้เกิดความสงสัยในไลบรารี
นักพัฒนาส่วนใหญ่แสดงความกังวลอย่างจริงจังเกี่ยวกับการพึ่งพาไลบรารีและผลกระทบด้านความปลอดภัย ชุมชนชี้ไปที่เหตุการณ์สำคัญเช่นช่องโหว่ของ Log4j และวิกฤต npm left-pad เป็นตัวอย่างของการที่การพึ่งพาไลบรารีภายนอกสามารถสร้างความเสี่ยงร้ายแรงได้ เหตุการณ์เหล่านี้ทำให้หลายทีมระมัดระวังมากขึ้นเกี่ยวกับการเพิ่มการพึ่งพาในโปรเจกต์ของพวกเขา
นักพัฒนา Python โดยเฉพาะต่อสู้กับปัญหาการพองตัวของการพึ่งพา ซึ่งการติดตั้งแพ็กเกจเดียวมักจะนำไลบรารีเพิ่มเติมหลายสิบตัวมาด้วย การพึ่งพาใหม่แต่ละตัวแสดงถึงความเสี่ยงด้านความปลอดภัยที่อาจเกิดขึ้นซึ่งทีมต้องตรวจสอบและดูแลรักษา สำหรับแอปพลิเคชันที่สำคัญ ไลบรารีทุกตัวต้องผ่านการตรวจสอบอย่างละเอียดและการตรวจสอบความปลอดภัยอย่างต่อเนื่อง
Log4j: ช่องโหว่ด้านความปลอดภัยที่สำคัญซึ่งค้นพบในปี 2021 ในไลบรารี logging ของ Java ที่ใช้กันอย่างแพร่หลาย ซึ่งส่งผลกระทบต่อแอปพลิเคชันหลายล้านตัวทั่วโลก
เหตุการณ์ด้านความปลอดภัยของไลบรารีหลักที่อ้างอิง:
- Log4j (2021): ช่องโหว่วิกฤตในไลบรารี Java logging ที่ส่งผลกระทบต่อแอปพลิเคชันหลายล้านตัว
- npm left-pad (2016): การลบแพ็กเกจทำให้โปรเจ็กต์ JavaScript หลายพันโปรเจ็กต์ที่พึ่งพาฟังก์ชันยูทิลิตี้ 11 บรรทัดเสียหาย
LLMs เป็นเครื่องมือค้นหาไลบรารี
ตรงกันข้ามกับความกังวลเกี่ยวกับ LLMs ที่จะมาแทนที่ไลบรารี นักพัฒนาบางคนรายงานว่าเครื่องมือ AI จริงๆ แล้วช่วยให้พวกเขาค้นพบและใช้ไลบรารีที่เหมาะสมได้อย่างมีประสิทธิภาพมากขึ้น เครื่องมือเหล่านี้สามารถให้ตัวอย่างการใช้งานได้ทันทีและลดความยุ่งยากในการรวมการพึ่งพาใหม่เข้าในโปรเจกต์ แทนที่จะเขียนโซลูชันที่กำหนดเองที่ด้อยกว่า นักพัฒนาสามารถประเมินอย่างรวดเร็วว่าไลบรารีที่มีอยู่ตรงกับความต้องการของพวกเขาหรือไม่
ในที่สุดเราก็มีเครื่องมือที่สามารถเรียนรู้จากไลบรารีและการแยกส่วนทั้งหมดที่ต้องเหมาะกับความต้องการของทุกคน และดึงเฉพาะส่วนที่เกี่ยวข้องกับปัญหาและโดเมนของเราจริงๆ
วิธีการนี้ช่วยให้มีโซลูชันที่เฉพาะเจาะจงมากขึ้นพร้อมพื้นผิวการโจมตีที่เล็กกว่า เนื่องจากนักพัฒนาสามารถสร้างโค้ดเฉพาะโดเมนที่รวมรูปแบบที่พิสูจน์แล้วโดยไม่ต้องแบกรับภาระไลบรารีที่ไม่จำเป็น
ข้อโต้แย้งหลักที่สนับสนุนการพัฒนาด้วยความช่วยเหลือของ LLM :
- ลดความยุ่งยากในการค้นหาและรวมไลบรารี
- การสร้างโค้ดเฉพาะโดเมนที่มีพื้นผิวการโจมตีที่เล็กกว่า
- เข้าถึงตัวอย่างการใช้งานและเอกสารประกอบได้ทันที
- ความสามารถในการดึงรูปแบบที่เกี่ยวข้องโดยไม่ต้องใช้ไลบรารีทั้งหมด
- เพิ่มขีดความสามารถในการเรียนรู้และสำรวจ
ความสมดุลระหว่างนวัตกรรมและความน่าเชื่อถือ
การถกเถียงเผยให้เห็นความตึงเครียดพื้นฐานในการพัฒนาซอฟต์แวร์สมัยใหม่ ทีมที่ทำงานกับระบบที่สำคัญมักจะชอบความสามารถในการคาดเดาได้ของโค้ดที่กำหนดเองมากกว่าความไม่แน่นอนของการพึ่งพาภายนอก พวกเขาโต้แย้งว่าการจัดการกับบั๊กในโค้ดของตนเองดีกว่าการจัดการไลบรารีที่เลิกใช้แล้วหรือการอัปเดตเวอร์ชันที่ทำลาย
อย่างไรก็ตาม วิธีการนี้มาพร้อมกับการแลกเปลี่ยน การเขียนการใช้งานที่กำหนดเองใช้เวลามากกว่าและอาจพลาดกรณีขอบที่ไลบรารีที่มีอยู่แล้วได้แก้ไขแล้ว ทางเลือกมักจะขึ้นอยู่กับกรณีการใช้งานเฉพาะ ความเชี่ยวชาญของทีม และความอดทนต่อความเสี่ยงขององค์กร
ข้อโต้แย้งหลักต่อการใช้ไลบรารี:
- ช่องโหว่ด้านความปลอดภัยและการขยายพื้นผิวการโจมตี
- การบวมของการพึ่งพาอาศัย (แพ็กเกจเดียวติดตั้งไลบรารีหลายสิบตัว)
- ภาระการบำรุงรักษาในการอัปเดตการพึ่งพาอาศัยให้ทันสมัย
- การเปลี่ยนแปลงที่ทำลายความเข้ากันได้ในการอัปเดตเวอร์ชัน
- ความจำเป็นในการตรวจสอบอย่างละเอียดและการทบทวนโค้ด
บทสรุป
การอภิปรายเน้นย้ำว่าทั้ง LLMs และไลบรารีมีที่ของพวกเขาในเวิร์กโฟลว์การพัฒนาสมัยใหม่ แทนที่จะมองพวกเขาเป็นวิธีการที่แข่งขันกัน ทีมที่ประสบความสำเร็จกำลังเรียนรู้ที่จะใช้เครื่องมือแต่ละตัวอย่างเหมาะสม LLMs เป็นเลิศในการสร้างโซลูชันที่เป็นเป้าหมายและช่วยนักพัฒนาเข้าใจ APIs ของไลบรารี ในขณะที่ไลบรารีที่มีอยู่แล้วให้โซลูชันที่ผ่านการทดสอบในสนามรบสำหรับปัญหาที่ซับซ้อน กุญแจสำคัญคือการรู้ว่าเมื่อใดจะใช้วิธีการแต่ละแบบตามความต้องการด้านความปลอดภัย ข้อจำกัดของโปรเจกต์ และการพิจารณาการบำรุงรักษาระยะยาว
อ้างอิง: Libraries are under-used. LLMs make this problem worse.