ลีนุกซ์รุ่นต่างๆประสบปัญหาในการเพิ่มการอ้างอิง ของโครงการแม้ว่า จำนวนการอ้างอิงสำหรับรหัส Python, Perl และ Ruby จะถูกเก็บไว้ ภายในขอบเขตที่เหมาะสมโปรเจ็กต์ JavaScript จะแบ่งออกเป็นไลบรารีขนาดเล็กมากซึ่งมักจะทำหน้าที่ง่ายๆ
ที่เก็บ NPM มีแพ็กเกจมากกว่าล้านแพ็กเกจ และการใช้งานทั่วไป เชื่อมโยงไปยังการอ้างอิงหลายร้อยรายการซึ่งจะมีการอ้างอิงเป็นของตัวเองทำให้ยากต่อการบำรุงรักษาและแจกจ่ายแพ็กเกจดั้งเดิมด้วยแอปพลิเคชัน JavaScript บนลีนุกซ์
เนื่องจากการเชื่อมโยงกันอย่างแน่นหนาของการพึ่งพาไลบรารี JavaScript การอัปเดตแพ็คเกจใด ๆ กับไลบรารีดังกล่าวในการแจกจ่าย มันสามารถทำลายแพ็คเกจอื่น ๆ
การเชื่อมโยงเวอร์ชันทำให้ปัญหารุนแรงขึ้น: ไลบรารีหนึ่งไลบรารีอาจต้องใช้การอ้างอิงเวอร์ชันหนึ่งเพื่อให้ทำงานได้อย่างเสถียรและอีกเวอร์ชันหนึ่งอาจต้องใช้เวอร์ชันอื่น
หลายโครงการต้องใช้ไลบรารีเวอร์ชันล่าสุดในการทำงาน ที่ไม่เป็นไปตามข้อกำหนดด้านความเสถียรของการแจกจ่ายเสมอไป (การพัฒนาอย่างต่อเนื่องได้รับการฝึกฝนในระบบนิเวศ Node.js โดยใช้เฟรมเวิร์กเวอร์ชันล่าสุดและการแจกจ่ายต้องการการสนับสนุนเป็นเวลาหลายปี)
พยายามแก้ไขเวอร์ชันแพ็กเกจในการแจกจ่ายเพียงอย่างเดียว นำไปสู่การเพิ่มขึ้นของเวอร์ชันที่ล้าสมัย ในที่เก็บที่ไม่ได้รับการอัปเดตเป็นเวลาหลายปี การหยุดชะงักของการบำรุงรักษาสำหรับแพ็กเกจหนึ่งส่งผลเสียต่อแพ็กเกจอื่น ๆ และสร้างปัญหามากยิ่งขึ้น
นอกจากนี้ลการพึ่งพาข้าม นำไปสู่ความจริงที่ว่าห้องสมุดหลายแห่ง Node.js ไม่สามารถถอนการติดตั้งออกจากระบบได้ซึ่งจะป้องกันไม่ให้คุณถอนการติดตั้งโปรแกรม Node.js อื่น ๆ
เพื่อแก้ไขปัญหานี้โครงการ Fedora เพิ่งอนุมัติแผนการหยุดการก่อตัวเริ่มต้นของแพ็คเกจแยกกับไลบรารีที่ใช้ในโครงการที่ใช้ Node.js
เขาตัดสินใจเริ่มต้นด้วย Fedora 34 เพื่อจัดหาเฉพาะแพ็คเกจพื้นฐานสำหรับ Node.js ด้วยล่ามส่วนหัวไลบรารีหลักไบนารีและเครื่องมือจัดการแพ็คเกจพื้นฐาน (NPM เส้นด้าย)
ในแอปพลิเคชันที่เก็บ Fedora ที่ใช้ Node.js อนุญาตให้ฝังการอ้างอิงที่มีอยู่ทั้งหมดในแพ็กเกจโดยไม่ต้องแบ่งและแยกไลบรารีที่ใช้ในแพ็กเกจแยกต่างหาก
การฝังไลบรารีจะกำจัดความยุ่งเหยิงของแพ็กเกจขนาดเล็กทำให้การบำรุงรักษาแพ็กเกจง่ายขึ้น (ก่อนหน้านี้ผู้ดูแลใช้เวลาตรวจสอบและทดสอบแพ็กเกจหลายร้อยกับไลบรารีมากกว่าแพ็กเกจหลักที่มีโปรแกรม) บันทึกโครงสร้างพื้นฐานจากความขัดแย้ง ของไลบรารีและแก้ไขปัญหาเกี่ยวกับการเชื่อมโยงไปยังเวอร์ชันไลบรารี (ผู้ดูแลจะรวมเวอร์ชันทดสอบและเวอร์ชันทดสอบการใช้งานจริงไว้ในแพ็คเกจ)
ข้อเสียของการบูรณาการจะเป็นความซับซ้อนของกระบวนการนำการแก้ไข ถึงช่องโหว่ในไลบรารีซึ่งจะต้องมีการทำงานร่วมกันของผู้ดูแลของแพ็คเกจทั้งหมดที่มีไลบรารีที่มีช่องโหว่ มีอันตรายที่แพ็กเกจจะลืมอัปเดตไลบรารีในตัวที่มีช่องโหว่และแพ็กเกจจะไม่มีใครสังเกตเห็น
นักพัฒนาของ Debian กำลังหารือเกี่ยวกับการเปลี่ยนไปใช้รูปแบบการรวมการพึ่งพาแพ็คเกจที่คล้ายกัน นอกเหนือจาก Node.js แล้วการสนทนายังพูดถึงการสร้างแพ็กเกจสำหรับแพลตฟอร์ม Kubernetes และโปรเจ็กต์ในภาษา PHP และ Go ซึ่งมีแนวโน้มที่จะแบ่งออกเป็นการอ้างอิงเพียงเล็กน้อย ยังไม่มีการตัดสินใจใด ๆ แต่หวังว่าเมื่อเวลาผ่านไปปัญหาจะเลวร้ายลงและไม่ช้าก็เร็วโครงการจะถูกบังคับให้ทำบางอย่าง
อินเทอร์เฟซเว็บ gsa (Greenbone Security Assistant) สำหรับเครื่องสแกนความปลอดภัย gvm (Greenbone Vulnerability Management) เป็นตัวอย่างของปัญหาที่ผู้ดูแลแพ็กเกจมี
gsa เวอร์ชันที่จัดส่งโดย Debian นั้นเข้ากันไม่ได้กับ gvm เวอร์ชันใหม่กว่า แต่ไม่สามารถอัปเดต gsa เป็นเวอร์ชันปัจจุบันได้เนื่องจากมีการเปลี่ยนแปลงที่สำคัญและใช้ npm เพื่อดาวน์โหลดไลบรารี Node.js ที่จำเป็น
ไลบรารีที่ร้องขอมีจำนวนมากเกินไปและต้องการการสร้างแพ็คเกจใหม่ใน Debian เพื่อให้ผู้อื่นดูแลเนื่องจากกฎของ Debian ห้ามไม่ให้โหลดส่วนประกอบภายนอกในระหว่างกระบวนการสร้าง
Fuente: https://lwn.net/
การแยกส่วนของเฟรมเวิร์กและไลบรารีใน ECMAscript นี้ไม่สามารถใช้งานได้
บทความที่ดี