Trong tuần này, một lập trình viên trong cơn nóng giận đã gián tiếp làm gián đoạn một loạt phần mềm có vai trò sống còn cho nhiều đại gia Internet bằng cách xóa một chương trình đơn giản chỉ gồm 11 dòng code.
Mọi chuyện bắt đầu với một lập trình viên tên là Azer Koçulu, người đã viết một đoạn code không có gì đặc biệt gọi là Kik dựa trên ngôn ngữ lập trình phổ biến Node.js. Koçulu đã đưa module Kik lên NPM, một nền tảng giống như chợ ứng dụng đối với các lập trình viên bằng ngôn ngữ Node.js, để họ có thể tải xuống miễn phí và sử dụng tùy ý.
Một Kik khác
Kik, một mạng xã hội nổi tiếng cùng tên đã chú ý đến sự việc trên và gửi email cho Koçulu, yêu cầu anh phải đổi tên module của mình. Theo thú nhận của Koçulu trên một đoạn blog, yêu cầu ban đầu của Kik là hợp lý. Tuy nhiên, Koçulu lại chẳng thèm đếm xỉa đến yêu cầu này.
“Khi tôi bắt đầu viết code cho Kik, tôi chẳng hay biết có một công ty cùng tên. Và không ai có thể bắt tôi phải đổi tên đứa con của mình”, Koçulu ngạo nghễ viết.
Mặc dù Koçulu giữ bản quyền của Kik, CEO của NPM, Isaac Schlueter, đã tước quyền sở hữu của anh đối với module trên mà không hỏi ý kiến. Tức giận, Koçulu tuyên bố trên blog rằng anh sẽ xóa bỏ Kik khỏi NPM vĩnh viễn, cùng với các đoạn code khác của anh.
Vấn đề là tuy Koçulu đã tạo ra một module NPM bình thường và cơ bản nhưng lại rất phổ biến gọi là "npm left-pad”. Đó là 11 dòng code dài và thực sự không có gì phức tạp nhưng đã được tải xuống 575.000 lần. Và khi nó biến mất, các lập trình viên của Reddit, Twitter và nhiều nơi khác đã thấm đòn ngay tức khắc.
Hiệu ứng domino
Mọi chuyện đã trở nên lộn xộn như thế nào?
Một module kiểu như npm left-pad về cơ bản có tính năng giống như một phím tắt để lập trình viên không phải viết một đống code lằng nhằng và dựa trên đó để phát triển phần mềm nhanh hơn. Nếu một lập trình viên dùng NPM module, điều này đồng nghĩa với việc “viết đoạn code này sau” và người viết phần mềm chỉ cần tải đoạn code này xuống khi thích hợp.
Mặc dù việc phát triển phần mềm theo quy trình này tương đối thuận tiện, nó đã tạo ra một hệ thống domino nguy hiểm. Một module Node.js được phát triển dựa trên một module khác, module này lại được phát triển dựa trên một module khác nữa. Cứ thế, mọi chuyện vẫn hoạt động bình thường cho đến khi npm left-pad bị xóa sổ.
Bùm, cả chuỗi domino đã sụp đổ. Các dự án phần mềm phổ biến như Babel, giúp Facebook, Netflix, và Spotify chạy code nhanh hơn, và React, giúp các nhà phát triển phần mềm xây dựng giao diện tốt hơn, đột nhiên bị gián đoạn và không thể hoạt động được nữa. Tổng cộng, hơn 1000 dự án phần mềm đã bị ảnh hưởng.
Khắc phục vấn đề này đòi hỏi các lập trình viên phải loại bỏ sự phụ thuộc dây chuyền trên và đảm bảo rằng không còn thứ gì bị ràng buộc với 11 dòng code ngớ ngẩn kia nữa.
Và vì thế, trước sự hoảng loạn của các nhà phát triển phần mềm trên toàn thế giới, NPM đã buộc phải có giải pháp gỡ bỏ sự ràng buộc giữa các module lập trình và đưa ra hệ thống sở hữu bản quyền tách biệt hơn.
Sau tất cả, cơn bão đã chấm dứt, và npm left-pad đã hoạt động trở lại. Nhưng những vết thương do nó gây ra thì vẫn còn nhức nhối. Có người đã tự hỏi “Phải chăng chúng ta đã quên cách lập trình rồi ư?” và hối thúc các lập trình viên xem xét lại quy trình phát triển ứng dụng của mình.
Koçulu thì nói rằng “Mặc dù tôi cảm thấy có lỗi vì đã làm ảnh hưởng đến công việc của nhiều người, điều tôi làm thực ra lại có lợi cho cộng đồng trong dài hạn. NPM sẽ không còn duy trì được sự độc quyền trong cộng đồng phần mềm nữa”.
Tham khảo: BI