Sự cố left-pad

Ngày 22 tháng 3 năm 2016, lập trình viên Azer Koçulu gỡ bỏ gói phần mềm codice_1 mà mình đã đăng tải lên hệ thống npm vì có tranh chấp trước đó với về việc công ty này cưỡng chế tước đoạt quyền kiểm soát tên gói phần mềm codice_2 trên cùng hệ thống. Việc này khiến hàng nghìn dự án phần mềm sử dụng codice_1, bao gồm cả trình chuyển đổi mã nguồn Babel và thư viện React, không thể hoặc cài đặt. Nhiều công ty và tập đoàn công nghệ lớn nhỏ như Facebook, PayPal, Netflix, và Spotify chịu ảnh hưởng nặng nề do sản phẩm của họ có sử dụng codice_1.

Vài giờ sau khi codice_1 bị gỡ bỏ khỏi hệ thống npm, công ty vận hành là tái đăng tải gói này. Vài ngày sau sự cố, npm thay đổi quy định để không cho phép người dùng gỡ bỏ gói quá 24 giờ sau khi đăng tải và nếu có ít nhất một dự án khác sử dụng gói. Vụ việc đã thu hút chú ý từ giới truyền thông và phản ứng từ các nhân vật trong ngành công nghiệp phần mềm, đồng thời làm dấy lên tranh cãi về hành vi cố ý tự phá hoại phần mềm để cổ xuý công bằng xã hội cũng như lo ngại về khả năng xảy ra các vụ lợi dụng cơ chế .

== Bối cảnh ==
codice_1 là một gói phần mềm tự do mã nguồn mở viết bằng JavaScript do Azer Koçulu, một lập trình viên tự do sống tại Oakland, California, phát triển và xuất bản. Gói này chứa một hàm phụ trợ giúp thêm các ký tự vào một . Gói được coi là cực kỳ đơn giản: phiên bản cuối cùng chỉ bao gồm 11 (không tính dòng trắng).

Koçulu đăng tải codice_1 lên npm, một hệ thống các gói phần mềm dành cho Node.js. Tuy ít người biết đến, codice_1 lại được tải về hàng triệu lần (hơn 15 triệu tính đến thời điểm bị gỡ bỏ) do được hàng nghìn dự án khác . Trong số này có nhiều dự án lớn, quan trọng với hệ sinh thái JavaScript như trình chuyển đổi mã nguồn Babel, cùng hai thư viện React và React Native.

Ngoài codice_1, Koçulu cũng đăng tải codice_2, một công cụ giúp lập trình viên tạo bản mẫu dự án, lên npm. Ngày 11 tháng 3 năm 2016, công ty sở hữu nền tảng nhắn tin tức thời là Kik Interactive yêu cầu Koçulu từ bỏ tên gói codice_2 với lý do họ đã đăng ký và sở hữu tên thương hiệu này. Trong quá trình trao đổi qua thư điện tử, phía Kik nói họ "không muốn làm ra vẻ khốn nạn", đe doạ sử dụng biện pháp pháp lý và đề nghị bồi thường cho Koçulu. Tuy nhiên, Koçulu từ chối, yêu cầu phía Kik ngừng liên hệ với anh. Trong bức thư cuối, Koçulu ra giá 30.000 USD với lý do "bù đắp cho việc phải tốn công trao dự án của mình cho một lũ khốn nạn". Ngày 18 tháng 3, giám đốc điều hành của npm, Inc. là Isaac Z. Schlueter thông báo cho cả hai bên rằng quyền sở hữu tên gói codice_2 sẽ được chuyển giao cho Kik Interactive.

== Gỡ bỏ ==
Đáp trả quyết định của npm, Inc., Koçulu tỏ ra rất thất vọng và nói mình không còn muốn tiếp tục hoạt động trên nền tảng này. Ngày 22 tháng 3, anh gỡ bỏ toàn bộ 273 gói mình đã đăng tải lên npm, trong đó có codice_1. Tuy nhiên, bản thân dự án codice_1 và kho mã nguồn vẫn tồn tại trên GitHub.

Ngay sau khi các gói này bị gỡ bỏ, mọi quá trình dựng bản hoặc cài đặt các chương trình JavaScript có sử dụng codice_1, trực tiếp hoặc gián tiếp, đều bị lỗi với mã 404, gây ảnh hưởng đến cả các công ty và tập đoàn công nghệ lớn như Meta Platforms, PayPal, Netflix, và Spotify. Chính các nhân viên của Kik Interactive cũng gặp lỗi này.

== Hệ quả ==
=== Hệ quả tức thời ===
Một giờ sau khi gỡ bỏ, Koçulu đăng một bài viết lên , trong đó anh giải thích rằng mình muốn phản đối việc các công ty làm ảnh hưởng đến phong trào phần mềm tự do mã nguồn mở.

Cùng lúc đó, rất nhiều lập trình viên đến phàn nàn, bình luận về sự kiện và chia sẻ cách khắc phục ở của dự án.

Một số dự án mã nguồn mở, chẳng hạn như Babel, cho xuất bản không còn sử dụng các gói mà Koçulu đã gỡ bỏ. Nhiều tên gói nhanh chóng bị ghi đè. Một lập trình viên tạo lại gói codice_1 với mã phiên bản 1.0.0, nhưng vì Koçulu dùng mã phiên bản 0.0.3 nên một số người dùng vẫn gặp sự cố.

npm tái đăng tải phiên bản 0.0.3 ban đầu từ dữ liệu sao lưu khoảng hai giờ sau khi codice_1 bị gỡ bỏ. Laurie Voss, giám đốc kỹ thuật của npm, cho biết công ty "ưu tiên nhu cầu của số đông" tuy vẫn có nhiều tranh cãi nội bộ về việc liệu quyết định này có thực là "đúng".

=== Phản ứng ===
Vài ngày sau sự cố, npm thay đổi quy định, cấm người dùng gỡ bỏ gói quá 24 giờ sau khi đăng nếu gói được ít nhất một dự án khác sử dụng. Cả ba bên liên quan là npm, Kik Interactive và Koçulu đều lên tiếng xin lỗi. Quản lý cộng đồng Ashley Williams thay mặt cho npm xin lỗi vì đã để xảy ra sự cố, và vì nền tảng "đã không thể bảo vệ cộng đồng [của mình]" Về phía Kik Interactive, đại diện công ty là Mike Roberts công bố cuộc trao đổi với Koçulu lên Medium; ông thừa nhận ngôn từ trong thư không tốt, nhưng vẫn cho rằng yêu cầu phía mình đưa ra có ý "lịch sự". Koçulu nói anh cảm thấy có lỗi, nhưng anh tin rằng hành vi của mình là "vì lợi ích của cộng đồng về lâu dài".

Vụ việc thu hút nhiều phản ứng khác nhau trên Twitter, GitHub, Reddit, và Hacker News. Một số người nhận định sự cố đã "đánh sập internet". Số khác bàn luận về văn hoá "" của hệ sinh thái JavaScript, tính chất "thay đổi bất ngờ" của phần mềm mã nguồn mở, cũng như việc phụ thuộc vào mẫu hình . Quyết định cưỡng chế chuyển giao tên gói của npm cũng bị chỉ trích.

=== Ảnh hưởng ===
Sự cố cho thấy có thể xảy ra chỉ từ việc một gói npm bị gỡ bỏ. Ngoài codice_1, một số cá nhân đã ngay lập tức đăng tải phần mềm độc hại dưới các tên gói khác trong số 273 gói ban đầu của Koçulu. Vụ codice_1 được coi là ví dụ điển hình cho việc các sản phẩm phần mềm quá phụ thuộc vào nguồn mã từ bên ngoài, dẫn đến bị mở rộng. Ngoài ra, cũng có ý kiến cho rằng hành vi tự phá hoại codice_1 nhằm khiến cộng đồng chú ý hơn về một vấn đề xã hội của Koçulu đã trở thành tiền lệ cho các vụ đăng tải khác về sau này.

Năm 2024, Koçulu cho biết anh đã nghỉ việc vài tháng sau sự cố, rồi dành một năm đi du lịch ở Morocco, Jordan, Thổ Nhĩ Kỳ và Indonesia. Anh cũng tập trung hơn vào công việc kinh doanh.