npm يرفض حزمة اسمها estee لتشابهها مع testem، وحساب يُظهر أن 841 اسمًا تكفي لإغلاق الأسماء الرباعية
حاول مطوّر نشر حزمة اسمها estee على npm، فرُفضت برسالة تقول إن الاسم شبيه جدًا بحزمتين موجودتين هما espree وtestem. وروى التفاصيل في تدوينة نُشرت في 30 أكتوبر 2026 بعنوان «No, npm, estee is not a typo of testem».
والرفض ليس خطأ في التقدير، بل نتيجة طبيعية لقاعدة. فـ npm يحسب مسافة Levenshtein، وهي عدد التعديلات اللازمة للانتقال من كلمة إلى أخرى، والتعديل حرف يُضاف أو يُحذف أو يُستبدل. والحد الأقصى المسموح مسافة 2 مقابل أسماء الحزم المشهورة. ومن estee إلى testem تكفي إضافة t في البداية واستبدال e الأخيرة بـ m، فالمسافة 2 والاسم مرفوض.
والمشكلة أن سقفًا ثابتًا كهذا لا يصغر مع الأسماء القصيرة. فـ npm يسمح بـ 29 حرفًا ورمزًا، وعدد الأسماء الممكنة بطول 4 هو 707,281. ولأن الاستبدال مسموح، يمكن الوصول من أي اسم إلى أي اسم آخر يبدأ بالحرفين نفسيهما. لذلك تكفي 841 حزمة مشهورة لإغلاق مساحة الأسماء الرباعية كلها، وهي 0.12% فقط من تلك المساحة.
والأمثلة العملية أوضح من الحساب: كانت القاعدة سترفض preact لأن react موجود، وسترفض estree لأن espree موجود. وفي مثال آخر من التدوينة، رأت القاعدة أن الاسم hoid شبيه بأسماء منها hoek وhono وuuid وzod.
وحين تواصل المطوّر مع الدعم، جاء الرد بأن الحجب آلي ولا يُرفع. أما المقال الذي أرسله الدعم كمرجع، فيتحدث عن قاعدة مختلفة تمامًا: أسماء لا تختلف إلا في علامات الترقيم.
والحماية من انتحال الأسماء في سجلات الحزم ضرورية، فهي خط دفاع ضد هجمات سلسلة التوريد. لكن ثمنها في صيغتها الحالية لا يتوزع بالتساوي: الاسم الطويل يمر، ومن يبحث عن اسم قصير يجد المساحة شبه مغلقة.