pexels-algorithm

left-pad: το μικροσκοπικό πακέτο κώδικα που άφησε χιλιάδες προγράμματα χωρίς δουλειά για δυόμισι ώρες [BINTEO]

User avatar placeholder

1 Νοεμβρίου 2026

Στις 22 Μαρτίου 2016, λίγο μετά τις 2:30 το μεσημέρι ώρα Ειρηνικού, το npm, το μεγάλο αποθετήριο πακέτων της JavaScript, άρχισε να καταγράφει εκατοντάδες αποτυχίες το λεπτό. Η αιτία ήταν ένα πακέτο που κάνει κάτι σχεδόν αστείο: προσθέτει χαρακτήρες στην αριστερή πλευρά ενός κειμένου, ώστε να φτάσει σε ορισμένο μήκος. Λεγόταν left-pad και είχε αποσυρθεί από τον δημιουργό του.

Η διαφωνία για ένα όνομα

Ο Azer Koçulu, προγραμματιστής που συντηρούσε δεκάδες μικρά πακέτα, είχε δημοσιεύσει ένα πακέτο με το όνομα kik. Η εταιρεία της γνωστής εφαρμογής μηνυμάτων Kik ζήτησε το όνομα, επικαλούμενη το σήμα της. Ο Koçulu αρνήθηκε να το αλλάξει και η εταιρεία απευθύνθηκε στο ίδιο το npm, το οποίο μετέφερε το όνομα σε άλλον. Σε ένδειξη διαμαρτυρίας, ο Koçulu απέσυρε τα πακέτα του. Σύμφωνα με την επίσημη αναφορά του npm, ήταν συνολικά 273: το kik και άλλα 272, μεταξύ των οποίων και το left-pad. Ο Register έγραψε εκείνη την ώρα «πάνω από 250».

Γιατί ένα τόσο μικρό πακέτο μετρούσε

Το left-pad ήταν έργο λίγων γραμμών: σύμφωνα με την περιγραφή της Wikipedia, η τελική έκδοση είχε έντεκα γραμμές κώδικα χωρίς τις κενές. Το είχαν όμως ενσωματώσει, άμεσα ή έμμεσα, χιλιάδες έργα. Ο Register έγραψε ότι είχε ληφθεί 2.486.696 φορές μέσα στον τελευταίο μήνα, και ότι ανάμεσα στα έργα που το χρειάζονταν ήταν το Babel. Ο λόγος ήταν η αλυσίδα εξαρτήσεων: ένα πρόγραμμα ζητά ένα πακέτο, εκείνο ζητά άλλο, και κάπου στο βάθος βρίσκεται το left-pad. Όταν χάθηκε, οι εγκαταστάσεις σταμάτησαν.

Η διόρθωση, βήμα βήμα

Μέσα σε δέκα λεπτά ένας άλλος προγραμματιστής, ο Cameron Westland, δημοσίευσε ένα λειτουργικά ίδιο πακέτο με το ίδιο όνομα, ως έκδοση 1.0.0. Το πρόβλημα δεν λύθηκε, επειδή ορισμένες αλυσίδες εξαρτήσεων, μεταξύ αυτών του Babel και του Atom, έφταναν στο left-pad μέσω ενός άλλου πακέτου, του line-numbers, που ζητούσε ρητά την έκδοση 0.0.3. Η ομάδα του npm προχώρησε τότε σε κάτι που η ίδια χαρακτήρισε πρωτοφανές: ξαναδημοσίευσε την αρχική έκδοση 0.0.3, χρησιμοποιώντας αντίγραφο ασφαλείας. Η απόφαση ανακοινώθηκε στις 4:05 το απόγευμα και η διαδικασία ολοκληρώθηκε στις 4:55. Το npm υπολόγισε τη διάρκεια της διακοπής σε δυόμισι ώρες.

Τι άλλαξε μετά

Το npm δεσμεύτηκε να κάνει δυσκολότερη την απόσυρση μιας έκδοσης όταν αυτό χαλά άλλα πακέτα, και, αν αποσυρθεί ολόκληρο πακέτο που έχει εξαρτώμενους, να το αντικαθιστά με πακέτο-υποκατάστατο. Η εταιρεία υποστήριξε ακόμη ότι δεν «έκλεψε» τον κώδικα του Koçulu. Τα υπόλοιπα 272 πακέτα, σύμφωνα με την ίδια, υιοθετήθηκαν από άλλους μέσα στην κοινότητα σε παρόμοιο χρόνο.

Τι μένει από την ιστορία

Το επεισόδιο δεν ήταν επίθεση ούτε σφάλμα στον κώδικα. Έδειξε πόσο εύθραυστο είναι ένα σύστημα όπου χιλιάδες προϊόντα στηρίζονται σε μικρά κομμάτια που συντηρούνται από ένα άτομο και που μπορούν να εξαφανιστούν με μία εντολή. Δείχνει επίσης ότι οι κανόνες μιας πλατφόρμας, εδώ το ποιος κατέχει ένα όνομα και τι σημαίνει απόσυρση, αποκτούν βάρος μόνο όταν κάτι πάει στραβά.