การแสวงหาของนักพัฒนาผู้อยากรู้อยากเห็นที่ต้องการค้นหาแพ็กเกจ npm ที่มีเลขเวอร์ชันมากที่สุดได้เปิดเผยรูปแบบที่น่าสนใจในการกำหนดเวอร์ชันของแพ็กเกจ JavaScript สิ่งที่เริ่มต้นจากการสังเกตเรื่องง่ายๆ เกี่ยวกับ AWS SDK เวอร์ชัน 3.888.0 กลายเป็นการวิเคราะห์อย่างละเอียดของแพ็กเกจ npm กว่า 2.1 ล้านตัว
ขนาดของการวิเคราะห์:
- จำนวน npm packages ทั้งหมดที่วิเคราะห์: 2,129,832
- เวลาในการดึงข้อมูล: ประมาณ 12 ชั่วโมง
- จำนวน API requests ที่ทำ: หลายล้านครั้ง
- ขนาด Batch ที่ใช้: 50 concurrent requests
- การพิจารณา Rate limit: อนุญาตให้ทำ 5 ล้าน requests ต่อเดือน
ผู้ชนะ: เครื่องมือ WhatsApp ที่มีตัวเลขน่าประหลาด
การวิเคราะห์เผยให้เห็นว่าแพ็กเกจที่ชื่อ wa-version จาก wppconnect-team ถือสถิติด้วยเวอร์ชัน 1.0.19494 เครื่องมือนี้เป็นส่วนหนึ่งของชุดเครื่องมือที่ออกแบบมาเพื่อเชื่อมต่อกับ API ของ WhatsApp และเลขเวอร์ชันที่สูงนี้เกิดจากการต่อสู้ทางเทคนิคที่ไม่มีวันจบ แพ็กเกจนี้ได้รับการอัปเดตบ่อยครั้งเนื่องจาก Meta ปรับเปลี่ยน WhatsApp อย่างต่อเนื่องเพื่อป้องกันการเข้าถึง API โดยไม่ได้รับอนุญาต ทำให้เกิดวงจรการแก้ไขและปรับปรุงอย่างต่อเนื่อง
หมายเหตุ: wppconnect-team หมายถึงนักพัฒนาที่สร้างเครื่องมือเพื่อเชื่อมต่อกับ WhatsApp ผ่านโปรแกรม
5 อันดับแรกของหมายเลขเวอร์ชันที่สูงที่สุดที่พบ:
- wa-version: 1.0.19494
- all-the-package-names: 2.0.18806
- carrot-scan: 0.0.27708 (เครื่องมือสแกนช่องโหว่)
- latentflip-test: 1.0.12345 (แพ็กเกจทดสอบ)
- aws-sdk: 2.1692.0 (อันดับที่ 46 โดยรวม)
BigQuery เสนอเส้นทางที่ง่ายกว่า
ชุมชนได้ชี้ให้เห็นอย่างรวดเร็วว่ากระบวนการที่ยุ่งยากในการดึงข้อมูลจาก API ของ npm นี้สามารถหลีกเลี่ยงได้โดยสิ้นเชิง บริการ BigQuery ของ Google มีชุดข้อมูลสาธารณะสำหรับทั้ง npm และ PyPI (ที่เก็บแพ็กเกจของ Python) ทำให้การวิเคราะห์เช่นนี้ตรงไปตรงมามากขึ้น การสืบค้นที่คล้ายกันในข้อมูล PyPI เผยให้เห็นว่าแพ็กเกจ Python แสดงการกำหนดเวอร์ชันที่รุนแรงกว่า โดยแพ็กเกจบางตัวมีตัวเลขสูงมหาศาลผ่านกระบวนการปล่อยแพ็กเกจแบบอัตโนมัติ
การเปรียบเทียบกับ Package Manager อื่น ๆ:
- PyPI (Python): ผู้ชนะคือ "elvisgogo" ที่มีหมายเลขเวอร์ชันสูงมาก
- Julia General Registry: สูงสุดคือ DiffEqBase ที่ 6.189.1 (การกำหนดเวอร์ชันแบบระมัดระวังมากกว่า)
- CPAN (Perl): แพ็กเกจ Acme-Boom มีเวอร์ชันถึง 3,735,928,560
- เกณฑ์การกรอง npm: รวมเฉพาะแพ็กเกจที่ใช้ semantic versioning (รูปแบบ x.y.z) เท่านั้น
วิธีการเบื้องหลังความบ้าคลั่ง
นักวิจัยใช้เวลาประมาณ 12 ชั่วโมงในการดึงข้อมูลจากรีจิสทรีของ npm โดยประมวลผลแพ็กเกจเป็นชุดๆ เพื่อหลีกเลี่ยงการทำให้ API ทำงานหนักเกินไป การวิเคราะห์มุ่งเน้นเฉพาะแพ็กเกจที่ปฏิบัติตาม semantic versioning (รูปแบบมาตรฐาน x.y.z) และไม่รวมแพ็กเกจที่ดูเหมือนจะใช้วันที่หรือรูปแบบการกำหนดเวอร์ชันที่ไม่เป็นมาตรฐานอื่นๆ วิธีการกรองนี้ทำให้มั่นใจว่าผลลัพธ์สะท้อนการพัฒนาเวอร์ชันที่แท้จริงมากกว่าการกำหนดหมายเลขแบบสุ่ม
ระบบอัตโนมัติขับเคลื่อนการพองตัวของเวอร์ชัน
ผลลัพธ์เผยให้เห็นแนวโน้มที่น่าสนใจในการพัฒนาซอฟต์แวร์สมัยใหม่ แพ็กเกจที่มีเวอร์ชันสูงที่สุดหลายตัวไม่จำเป็นต้องเป็นแพ็กเกจที่มีการพัฒนาฟีเจอร์อย่างแข็งขัน แต่กลับมักจะเป็นตัวแทนของระบบอัตโนมัติที่ทำงานไม่หยุด - เครื่องมือสแกนความปลอดภัยที่อัปเดตฐานข้อมูลช่องโหว่ บอทจัดการ dependency ที่สร้างการปล่อยแพ็กเกจอัตโนมัติ หรือเครื่องมือที่ตอบสนองต่อการเปลี่ยนแปลง API ภายนอก แพ็กเกจผันคำกริยาภาษาสเปนที่กล่าวถึงในการสนทนาของชุมชนเป็นตัวอย่างที่ดี โดยมีการปล่อยแพ็กเกจประมาณ 240 ครั้งต่อเดือนเนื่องจากการเพิ่มเวอร์ชันแบบอัตโนมัติ
หมายเหตุ: Semantic versioning ใช้ตัวเลขสามตัว (major.minor.patch) เพื่อระบุประเภทการเปลี่ยนแปลงที่แตกต่างกัน
หน้าต่างสู่ความวุ่นวายของการจัดการแพ็กเกจ
การสืบสวนนี้เน้นย้ำทั้งขนาดและความแปลกประหลาดของระบบนิเวศ npm ด้วยแพ็กเกจกว่า 2.1 ล้านตัวและการดาวน์โหลดหลายพันล้านครั้งต่อเดือน npm กลายเป็นส่วนสำคัญของโครงสร้างพื้นฐานการพัฒนาเว็บ อย่างไรก็ตาม การวิเคราะห์ยังเผยให้เห็นแนวทางปฏิบัติที่น่ากังวล เช่น แพ็กเกจที่มีชื่อเหมือนกันแต่แตกต่างกันเพียงตัวพิมพ์ใหญ่เล็ก และเครื่องมือที่อาจละเมิดเงื่อนไขการให้บริการของแพลตฟอร์มอย่าง WhatsApp
การวิจัยนี้แสดงให้เห็นว่ากระบวนการอัตโนมัติและระบบ continuous integration สามารถนำไปสู่การพองตัวของหมายเลขเวอร์ชันที่ไม่จำเป็นต้องสะท้อนถึงวิวัฒนาการซอฟต์แวร์ที่มีความหมาย แม้ว่าเวอร์ชัน 19,494 อาจฟังดูน่าประทับใจ แต่มักจะเป็นตัวแทนของผลลัพธ์เชิงกลจากสคริปต์มากกว่าการปรับปรุงซอฟต์แวร์ที่แตกต่างกัน 19,494 ครั้ง