Claude có làm tăng số lỗi của rsync không?
(alexispurslane.github.io)- Các bản phát hành có Claude hỗ trợ chỉ gồm hai bản rsync v3.4.2 và v3.4.3, và không có bằng chứng cho thấy chúng có nhiều lỗi bất thường hơn các bản phát hành trước đó khi tính theo lỗi có trọng số mức độ nghiêm trọng/10 commit
- sev/10c là chỉ số cốt lõi chuẩn hóa điểm mức độ nghiêm trọng của lỗi về thang 0~1, cộng theo từng bản phát hành, rồi chia cho số commit và quy đổi thành giá trị trên mỗi 10 commit
- v3.4.2 có 50 commit, 9 commit của Claude, 0 lỗi, 0.00 sev/10c; còn v3.4.3 có 34 commit, 28 commit của Claude, 17 lỗi, 3.29 sev/10c, nằm kẹp hai phía của IQR và không bên nào là ngoại lệ
- Giá trị p của kiểm định hoán vị chính xác là 46%, giá trị p của kiểm định chính xác Fisher là 74%, và odds ratio là 1.06, gần như không có tín hiệu cho thấy các bản phát hành có Claude tệ hơn hai bản phát hành ngẫu nhiên hoặc dễ vượt trung vị hơn
- v3.4.1 là bản phát hành trước khi đưa Claude vào, nhưng vẫn là giá trị tệ nhất toàn bộ dữ liệu với 59 lỗi, 9 commit, 39.39 sev/10c; trọng tâm của tranh cãi rsync nằm ở việc gắn một hồi quy đơn lẻ với Claude mà không xét phân bố lịch sử
Bối cảnh và câu hỏi
- Cuối tháng 5/2026, tranh cãi rsync bắt đầu từ một bài đăng trên Mastodon liên hệ giữa hồi quy ở v3.4.3 với các commit của Claude trong bản phát hành đó, rồi lan sang Hacker News và issue GitHub "Please Do Not Vibe Fuck Up This Software"; issue này đã tích lũy hơn 300 bình luận
- Luận điểm cốt lõi lặp đi lặp lại là phát triển có Claude hỗ trợ đã đưa lỗi vào một công cụ vốn ổn định, và câu hỏi dữ liệu là liệu các bản phát hành có Claude hỗ trợ có nhiều lỗi bất thường hơn các bản phát hành lịch sử hay không
- Trên Lobsters có đề nghị xem biểu đồ thời gian số hồi quy theo từng bản phát hành, và trọng tâm phân tích là một câu hỏi duy nhất: “Các bản phát hành có Claude hỗ trợ có nhiều lỗi bất thường không?”
Phạm vi dữ liệu và khả năng tái lập
- Dữ liệu gồm 36 bản phát hành từ v2.4.6 đến v3.4.3 của RsyncProject/rsync có dữ liệu lỗi; chỉ có hai bản phát hành có commit của Claude là v3.4.2 và v3.4.3
- Việc chọn chỉ số, phương pháp luận và nguồn dữ liệu do con người trực tiếp quyết định, có tham khảo ý kiến từ người phối ngẫu có bằng thạc sĩ thống kê
- Việc thu thập dữ liệu, nạp vào DuckDB, tạo view và viết script phân tích thống kê do GLM 5.1 thực hiện, nhưng mọi con số, thống kê, bảng và biểu đồ đều được script Python chạy phân tích thống kê chèn vào bằng template tự động
- Kho lưu trữ tái lập alexispurslane/rsync-analysis có thể chạy toàn bộ pipeline từ đầu đến cuối
Chỉ số và cách quy thuộc lỗi
- Chỉ số cốt lõi là số lỗi có trọng số mức độ nghiêm trọng trên mỗi 10 commit, sev/10c, với công thức
sev/10c = (Σ severity/100 ÷ total_commits) × 10 - Các commit được sắp theo committer date trên nhánh mặc định, và phạm vi mỗi bản phát hành được lấy từ tag trước đó đến tag hiện tại; các tag pre và rc bị loại khỏi ranh giới và được gộp vào bản phát hành cuối cùng
- Nguồn lỗi gồm issue GitHub, rsync Bugzilla và mailing list của rsync; lỗi từ issue GitHub và mailing list được quy về bản phát hành mới nhất đã phát hành ngay trước thời điểm báo cáo
- Các mục Bugzilla có trường “Version” chỉ rõ bản phát hành nơi lỗi được báo cáo, nên được quy về đúng bản phát hành đó
- Lý do chọn phân tích ở cấp bản phát hành là vì chính lời chỉ trích cũng có dạng “toàn bộ bản phát hành có commit của Claude trở nên nhiều lỗi hơn”, và phần lớn lỗi không nêu rõ chính xác bắt nguồn từ commit nào
Cách chấm mức độ nghiêm trọng
- Tất cả báo cáo lỗi đều được Qwen 3 35B chấm điểm mức độ nghiêm trọng từ 0 đến 100, với prompt giao vai trò kỹ sư độ tin cậy cấp cao nhìn từ góc độ tác động thực tế đến người dùng
- Mức 90~100 là hỏng dữ liệu âm thầm, mất dữ liệu, thực thi mã từ xa hoặc lỗ hổng bảo mật cho phép truy cập trái phép; 70~89 là crash, treo, sao lưu thất bại hoặc build thất bại; 50~69 là hồi quy chức năng có thể workaround
- Với Bugzilla và mailing list, chỉ có tiêu đề mà không có nội dung thân bài, nên mô hình chỉ đánh giá dựa trên tiêu đề; nếu thiếu thông tin thì được hướng nghiêng về khoảng trung bình 40~60
- Đầu ra dùng structured output với JSON schema chỉ cho phép số nguyên mức độ nghiêm trọng, và temperature được cố định ở 0 để cùng một đầu vào cho cùng một điểm số
- Các issue được chấm 0 điểm như yêu cầu tính năng, spam, phản đối phi kỹ thuật liên quan đến AI, hoặc bản gửi trống sẽ bị loại khỏi tổng số lỗi cơ bản
Kết quả thống kê của các bản phát hành Claude
- v3.4.2 có 9 commit của Claude trên tổng 50 commit, 0 lỗi thực tế, 0.00 sev/10c, ở phân vị 0
- v3.4.3 có 28 commit của Claude trên tổng 34 commit, 17 lỗi, 3.29 sev/10c, ở phân vị 77
- IQR lịch sử là 0.29~2.59 sev/10c; v3.4.2 nằm ngay dưới IQR còn v3.4.3 nằm ngay trên IQR, nên hai bản phát hành này kẹp phần phân bố trung tâm ở hai phía đối nhau
- Kiểm định hoán vị chính xác cho thấy trong 595 tổ hợp có thể có của 2 bản phát hành, có 272 tổ hợp có trung bình nhóm Claude từ 1.65 sev/10c trở lên, cho ra giá trị p là 46%
- Kiểm định chính xác Fisher xem liệu các bản phát hành Claude có nằm trên trung vị 0.74 sev/10c thường xuyên hơn không, và cho kết quả giá trị p 74% cùng odds ratio 1.06
Số lượng commit và quy mô thay đổi
- Các bản phát hành Claude có trung bình 42 commit, trong khi các bản không có Claude có trung bình 185 commit; xác suất để hai bản phát hành ngẫu nhiên có số commit bằng hoặc nhiều hơn như vậy là 88%
- Theo GitHub compare API, số dòng thay đổi trung bình của các bản phát hành Claude là 3.756 dòng, còn các bản không có Claude là 696 dòng; xác suất để hai bản phát hành ngẫu nhiên có số dòng thay đổi bằng hoặc nhiều hơn như vậy là 5%
- Số lỗi có trọng số mức độ nghiêm trọng trung bình của các bản phát hành Claude là 5.6, còn các bản không có Claude là 14.9; xác suất để hai bản phát hành ngẫu nhiên có số lỗi có trọng số bằng hoặc nhiều hơn như vậy là 77%
- Kết luận là các bản phát hành Claude có nhiều dòng thay đổi hơn hẳn, nhưng không có nhiều commit hơn cũng không có nhiều lỗi có trọng số mức độ nghiêm trọng hơn
Hệ phiên bản và các ngoại lệ có từ trước
- Trung bình các bản phát hành v2.x là 1.11 sev/10c, còn v3.x là 4.23 sev/10c, cho thấy phía v3.x có tỷ lệ lỗi cao hơn
- Ngay cả khi chỉ so trong v3.x, các bản phát hành Claude vẫn nằm ở nhóm giữa hoặc tốt hơn; để khiến Claude trông như một ngoại lệ thì phải so với một giai đoạn quá khứ yên ắng hơn và quy trách nhiệm cho Claude về sự thay đổi đã xảy ra trước khi Claude xuất hiện
- Wald–Wolfowitz runs test cho 35 bản phát hành không có Claude cho kết quả 13 run quan sát được, kỳ vọng ngẫu nhiên 18.5, z=-1.88, p=0.060; theo ngưỡng 0.05 thì chưa đủ mạnh để bác bỏ tính ngẫu nhiên
- v3.4.1 là bản phát hành trước khi có Claude nhưng lại ghi nhận tỷ lệ lỗi cao nhất toàn bộ dữ liệu với 59 lỗi, 9 commit, 39.39 sev/10c
- v3.4.1 là bản hotfix phát hành ngay ngày hôm sau v3.4.0, có tỷ lệ lỗi cao nhất vượt xa tất cả các bản phát hành khác ít nhất một bậc chữ số, nhưng khi đó chưa có AI nào để bị đổ lỗi
Diễn giải và giới hạn
- Cách diễn giải phù hợp với dữ liệu là “hai bản phát hành Claude hiện tại không khác biệt có ý nghĩa thống kê so với các bản phát hành lịch sử”
- v3.4.3 có 3.29 sev/10c và ở phân vị 77 nên là mức cao, nhưng không phải cực trị; có 8 bản phát hành lịch sử đạt điểm cao hơn thế
- Mệnh đề “Claude rõ ràng đã làm mọi thứ tệ hơn” không được hậu thuẫn bởi phân bố bản phát hành, kiểm định hoán vị hay kiểm định Fisher
- Ngược lại, cũng không thể rút ra từ dữ liệu này kết luận rằng “commit của Claude nói chung sẽ không làm mọi thứ tệ hơn về sau”; dữ liệu hiện tại chỉ cho thấy hai bản phát hành này nằm trong phạm vi bình thường
- Chỉ số này có giới hạn là một công cụ khá thô, không kiểm soát được độ phức tạp của commit hay cường độ công việc bảo mật
Các yếu tố gây nhiễu được thảo luận
- Một người dùng trên Hacker News cho rằng các bản sửa bảo mật để xử lý CVE dường như đã làm lộ ra những lỗi lập trình tồn tại trong mã từ năm 2007
- Một người dùng trên Lobsters đưa ra chuỗi nhân quả “LLM → tăng các issue bảo mật đã biết → cần nhiều thay đổi hơn bình thường → nhiều hồi quy hơn bình thường”
- Andrew Tridgell giải thích rằng làn sóng báo cáo CVE do AI tạo ra đã buộc rsync phải thực hiện các thay đổi nhanh và rộng trên bề mặt tấn công của mình
- Nếu tính cả yếu tố gây nhiễu này, thì vấn đề có vẻ gần với việc phải làm nhiều công việc bảo mật hơn và kéo theo khối lượng thay đổi tăng lên, hơn là do bản thân Claude
2 bình luận
Ý kiến trên Hacker News
Khi xem các commit, tôi thấy commit gốc và cả commit hoàn tác: https://github.com/RsyncProject/rsync/commit/d046525de39315d...
Ngay cả những đường lẽ ra phải dùng
malloccũng bị đổi sangcalloc, như thể ép mọi cấp phát phải coi calloc tương thích ngược nghiêm ngặt ở mức siêu tập. Với các cấp phát lớn hoặc cấp phát đệ quy, chi phí này khá đáng kể. Đây có vẻ là một ví dụ điển hình về kiểu vấn đề lọt qua khâu rà soát trong mã do Claude viết. Bản hoàn tác nằm ở https://github.com/RsyncProject/rsync/commit/7db73ad9a1b8721..., và chỉ cần đọc lướt phần mô tả hoàn tác cũng thấy đậm mùi LLM. Tôi hiểu cảm giác của người đăng bài gốcBáo cáo bảo mật nêu ra việc dùng phần tử vượt quá cuối mảng, và ông cho rằng nếu khởi tạo 0 cho vùng cấp phát thì kể cả sau này có lỗi tương tự phát sinh, nhiều khả năng nó sẽ kết thúc bằng dereference null pointer thay vì dereference một con trỏ hợp lệ. Claude chỉ được dùng để sắp xếp lại chùm commit, và cơ chế gắn thẻ co-authored sẽ xuất hiện chỉ với một chút chỉnh sửa, nên không có nghĩa là Claude đã viết thay đổi đó. Ông nói rõ là mã thực tế do chính mình viết
Hoàn toàn có thể là một con người lúc đầu nghĩ đây là cải tiến, rồi sau khi thấy RSS regression mới suy nghĩ lại. Và cũng không có định luật tự nhiên nào nói rằng thay đổi này nhất thiết phải làm RSS tăng.
calloccó thể được xử lý đặc biệt nhờ biết rằng ánh xạ bộ nhớ mới nhận từ hệ điều hành vốn đã được khởi tạo 0. Nếu muốn đổ lỗi cho AI ở đây thì có lẽ đúng hơn là theo nghĩa: AI làm bùng nổ số lượng báo cáo lỗ hổng, kéo theo bùng nổ các bản vá gấp, và các bản vá gấp thì đôi khi lại tạo ra vấn đề khácsprintfcó khi còn lớn hơn thế. Nếu chưa thì nên như vậy, còn không thì đã đến lúc bắt đầu dùngsnprintfTrước khi bình luận, tôi khuyên nên đọc bài mà tác giả rsync đã liên kết: https://medium.com/@tridge60/rsync-and-outrage-d9849599e5a0
Nói rõ thì tôi không liên lạc với Tridge đã vài năm, nhưng ông ấy từng là đồng nghiệp và người cố vấn của tôi trong thời gian dài. Trước khi gia nhập cuộc thập tự chinh này, đáng để cân nhắc góc nhìn của ông ấy
Nhưng ông ấy lại push cả thay đổi gây hỏng lên nhánh phát hành. Phá vỡ một workflow đã chạy ổn nhiều năm là cách chắc chắn nhất để làm người khác tức giận, và nếu trong commit còn thấy cả chữ “Claude” thì đúng là đổ thêm dầu vào lửa
Tôi không trực tiếp dính dáng đến cuộc tranh cãi này, nhưng có vài điểm trông khá đáng ngờ. Bản phát hành bị quy nhiều lỗi nhất lại là bản phát hành tháng 1, ngay trước bản phát hành đầu tiên có commit đồng tác giả với Claude, nên tôi tự hỏi liệu có khả năng commit do LLM viết nhưng không có nhãn quy thuộc đã được đưa vào bản phát hành này hay không
Phương pháp quy lỗi theo bản phát hành cũng không ổn lắm. Các lỗi được đưa vào ở một bản cập nhật minor có xu hướng bị quy về bản phát hành patch tồn tại lâu nhất trong minor đó. Khó mà nói 3.4.1 thực sự đã đưa vào nhiều lỗi như vậy; vì nó được phát hành ngay ngày hôm sau 3.4.0, rất có thể các lỗi phát sinh ở bản phát hành đó đã bị tính vào 3.4.1. Ngoài ra, các bản phát hành gần đây có ít thời gian hơn để lỗi được báo cáo, nên cũng có thể có thiên lệch khiến chúng bị đánh giá là ít lỗi hơn
“Rõ ràng đến chói mắt” à? Chỉ cần vẽ một cái biểu đồ là được. Và v3.4.1 là ngày 2025-01-16, về mặt kỹ thuật thì vẫn thuộc thời kỳ lập trình có AI hỗ trợ, chỉ là trước khi việc gắn nhãn quy thuộc trở thành thông lệ tiêu chuẩn
Tôi đã thấy nhiều đoạn mã do LLM tạo ra nhưng không có đồng tác giả trong commit message. Có vẻ thường chỉ khi toàn bộ giao diện với codebase được thực hiện hoàn toàn qua các công cụ như Claude/Codex thì mới có gắn các thẻ đó, và những commit như vậy thường rất dài dòng nhưng hầu như không nói vì sao thay đổi, chỉ tóm tắt thay đổi mã. Ngược lại, tôi cũng đã thấy các lập trình viên dùng Claude như một công cụ: qua lại giữa VSCode và terminal Claude, tự kiểm tra mã cho đúng và chỉ giao phần việc đường ống cho Claude. Có lẽ tác giả cũng bắt đầu nhỏ rồi dần tăng lên theo thời gian
Vấn đề lớn hơn là hoàn toàn không có bằng chứng nào ủng hộ giả thuyết rằng các commit LLM đã lén được đưa vào các bản phát hành trước đó và vì vậy làm tăng tỷ lệ lỗi. Nếu không mặc định rằng số lỗi cao tự động đồng nghĩa có AI can thiệp, thì không có cơ sở nào cả, và như vậy là lập luận vòng tròn. Điểm thứ ba thì hợp lý. Tôi đã phân tích mất bao lâu để thường phát hiện ra lỗi và mỗi phiên bản nằm ở đâu trong chu kỳ phát hành; nếu muốn tôi có thể đăng lên
Ở đây có một sự mỉa mai quan trọng ở tầng meta. Bài gốc bảo vệ việc dùng AI, nhưng có vẻ cũng đã rõ ràng dùng AI để phân tích dữ liệu và trình bày kết quả
Trong quá trình đó, tác giả đã sử dụng thống kê theo cách mà chính họ không hiểu rõ, và đi tới nhiều kết luận sai. Có thể xem thảo luận liên quan tại https://news.ycombinator.com/item?id=48417626. Tóm lại, nghiên cứu này không có đủ sức mạnh thống kê và đang đưa ra khẳng định “không có khác biệt” mà không được biện minh. Cuối cùng, trong lúc dùng LLM để diễn giải dữ liệu, nghiên cứu này lại mắc đúng kiểu sai lầm mà nó định khảo sát: tự tin khẳng định điều sai
Tôi nghĩ điều mà những người đang giận dữ về chuyện này đạt được khi gây sức ép lên người bảo trì rsync chỉ là khiến người khác bớt công khai có trách nhiệm về việc dùng AI. Để tránh tranh cãi, họ sẽ chỉ tắt nhãn quy thuộc Claude trong commit
Dù sao thì trách nhiệm với đoạn mã được commit và push vẫn thuộc về con người. Điều này chưa bao giờ thay đổi. Nó được viết bằng tay, do con mèo đi trên bàn phím tạo ra, hay do AI tạo ra thì tôi đều không quan tâm. Chất lượng mã của dự án có thể giảm vì vô số lý do, và ám ảnh riêng việc có phải AI tạo ra hay không thì không mang tính xây dựng. Ai đó muốn tìm cớ để chỉ trích AI, người khác muốn bảo vệ AI, thì cứ vậy thôi, nhưng đó không phải là cách phù hợp để đánh giá chất lượng mã của một dự án
Generated-bychỉ có ý nghĩa khi đóng góp cho dự án của bên thứ ba, và lúc đó thì công khai là phép lịch sựTắt nhãn quy thuộc của mã do LLM tạo ra là gian dối. Vì như vậy tức là nói rằng chính mình đã viết đoạn mã đó. Tất nhiên, điều đó cũng khá hợp với việc ngay từ đầu đã tạo mã bằng LLM. Rốt cuộc, nó chỉ là nhắc lại đầu vào mà không giữ lại giấy phép và thông báo bản quyền
Tạm gác tranh cãi AI có xấu hay không, nếu ví von thì trốn thuế là xấu và phi đạo đức, thấy thì phải chỉ ra. Nhưng việc điều đó tạo động cơ để che giấu không dẫn tới kết luận rằng ta không nên lên tiếng và cứ im lặng
Tôi biết ơn những gì Andrew đã làm để tạo ra và duy trì rsync, nhưng vì tôi phụ thuộc khá nhiều vào rsync để sao lưu tệp giữa các máy trong mạng gia đình, nên tôi đã bỏ thời gian tìm cách ghim phiên bản rsync của Homebrew ở 3.4.1
Hai phiên bản sau đó thực sự đáng sợ về mặt lỗi, và cả báo cáo gốc đã khơi mào toàn bộ chuyện này cũng vậy. Tôi đã ghi lại quy trình này ở đây, vốn phức tạp hơn nhiều so với tưởng tượng: https://gist.github.com/e40/caa67c1b8d439a528695f996d0519d8e
Bài này để lại nhiều câu hỏi hơn là câu trả lời nên khó mà đưa ra kết luận. Tôi không hiểu vì sao v3.4.1 ngay trước commit của Claude lại có nhiều lỗi nhất, và vì sao “không ai nhận ra”. Quá kỳ lạ để chỉ gạt đi như lỗi con người thuần túy
Cũng khó hiểu không kém là vì sao v3.4.2 lại có 0 lỗi hoặc điểm lỗi bằng 0. Thật lạ khi những ngoại lệ như vậy, dường như không xuất hiện ở các commit khác, lại được phép trộn vào thống kê tổng hợp để làm giảm điểm “Claude tạo lỗi?”. Thành thật mà nói, tôi không hiểu sao đây lại không phải dấu hiệu cảnh báo trong phân tích của tác giả. Có cảm giác như một phân tích nửa vời được trình bày như một thành phẩm rất phức tạp chỉ vì có chạy thống kê cao cấp
v3.4.2 trong thước đo ban đầu cũng có 4 lỗi trước khi lọc bỏ các yêu cầu tính năng và câu hỏi, và trước đó còn cao hơn, nhưng không tạo khác biệt lớn cho toàn bộ phân tích. Nó vẫn nằm gọn trong khoảng tứ phân vị, lại còn ở phía thấp. Trong bối cảnh chỉ có đúng hai bản phát hành Claude, tôi cho rằng việc loại bỏ một ngoại lệ chỉ vì trông buồn cười còn tệ hơn và tùy tiện hơn
Nếu lập luận là kiểu “Không kiểm soát độ phức tạp của commit, mức độ tập trung vào bảo mật, hay mức độ nghiêm trọng của lỗi. Đây là một công cụ thô, không phân biệt được sửa lỗi đánh máy một dòng với bản vá CVE. Nhưng lời chỉ trích của bên phản đối rằng ‘Claude làm mọi thứ tệ hơn’ cũng là công cụ thô, nên đáp trả công bằng nhất là dùng một công cụ thô”, thì tôi khó mà đồng ý
Từ góc nhìn người dùng, cần hiểu bản chất của lỗi có tệ hơn hay không. Dù tỷ lệ giữ nguyên, nếu chất lượng phần mềm mà người dùng cảm nhận được giảm đi thì, nhất là với người bảo trì dự án, họ sẽ xem đó là tệ hơn. Tôi không định bác bỏ hoàn toàn phân tích này, nhưng tôi nghĩ những câu hỏi như vậy khó mà được trả lời đầy đủ chỉ bằng phân tích định lượng
Phân tích này có thể tự kiểm chứng nếu muốn, và nó nói rằng “ngay cả khi có LLM thì số lỗi vẫn khá trung bình”. Như vậy là đã phản hồi trực tiếp vào tuyên bố đó rồi. Nếu muốn một phân tích tinh tế hơn thì cứ tự làm và chia sẻ kết quả
Tôi đã lập trình hơn 20 năm, đã yêu việc viết code và có lẽ vẫn sẽ tiếp tục như vậy. Mới vài tháng trước tôi còn là người hoài nghi AI, nhưng Claude và Codex đã thay đổi cách tôi phát triển phần mềm và tốc độ của tôi theo những cách tôi chưa từng tưởng tượng
Kết quả là tôi tạo ra nhiều mã hơn và cũng tìm ra nhiều lỗi hơn. Vì vậy tôi khá ngạc nhiên khi thấy sự thù ghét cực đoan trên HN đối với bất cứ thứ gì được AI tạo ra. Việc một dự án được AI hỗ trợ hoặc thậm chí được tạo hoàn toàn không khiến nó đột nhiên thành vibe coding, và cụm từ đó cũng không nên là một sự xúc phạm ném vào người dùng LLM. Nó làm tôi nhớ nhiều đến những cách nói miệt thị từng đổ lên đầu “lập trình viên Ấn Độ” khi outsourcing ra nước ngoài bùng lên từ giữa thập niên 90. Giờ đây vào giữa thập niên 2020, những lời tương tự lại hướng về AI. Tôi không hiểu. Điều chắc chắn là bất kể phe phản đối nghĩ gì, ngày càng sẽ có nhiều mã được AI tạo ra hơn
Năm ngoái là lần đầu tôi thấy một tác nhân AI debug và sửa được một lỗi không hề tầm thường theo cách đủ thỏa đáng. Ngay cả lúc đó cũng rõ là nếu đem dùng cho việc lớn thì nó chưa tới mức có thể nuốt trọn cả issue tracker. Hiện tại vài tháng qua tôi đang làm một dự án không hề tầm thường với Codex. Tôi làm nguyên mẫu bằng C++ vì lý do thư viện, viết phiên bản đầu bằng Haskell, rồi gần đây chuyển sang Rust để kiềm chế mức dùng bộ nhớ trên di động. Đây không phải công cụ không có vấn đề, nhưng tốc độ tiến bộ chỉ trong 1 năm qua thật đáng kinh ngạc. Hoài nghi là tốt, nhưng hoài nghi lành mạnh thì phải lùi bước trước bằng chứng cụ thể
Vì thế việc AI giúp phần nhàm chán khiến tôi thực sự vui, và cũng rất thú vị khi thấy các đồng nghiệp không phải lập trình viên hào hứng vì những ý tưởng vibe coded của họ trở thành hiện thực. Tôi thực lòng tò mò về góc nhìn phản AI của những người làm trong ngành phần mềm. Có phải vì cái chết cận kề của nghề nghiệp, hay vì sự dịch chuyển công nghệ?
Trong AI vibe coding cũng có cùng kiểu vấn đề “đi đường tắt” như vậy, và bản thân tôi, kể cả khi dùng model tuyến đầu nâng mức suy luận lên 11, vẫn phải viết lại gần như toàn bộ mã do AI sinh ra. Tuy vậy AI lại cực kỳ hữu ích cho những việc khác như review PR, phân tích lỗ hổng bảo mật, tìm lỗi đánh máy, hay dịch ngược. Có lẽ tôi còn phải nâng gói thuê bao lên bậc cao hơn, nhưng đồng thời mã do AI tạo ra vẫn chưa dùng được. Nếu trong cùng một con người mà “rất hữu ích nên phải trả thêm tiền” và “chất lượng mã đầu ra vô dụng” vẫn có thể cùng đúng, thì việc toàn bộ tập người dùng có nhiều ý kiến khác nhau là điều đương nhiên
Hiện giờ đúng là thời hoàng kim Napster của hành vi đạo văn đồng hình
Tôi thật sự không hiểu đây là cái gì. Thứ thực sự quan trọng chỉ là sau khi mã do AI viết được chấp nhận vào codebase thì lỗi có tăng lên hay không. Ai cũng biết câu trả lời. Dù vậy, lúc nào cũng thú vị khi thấy “dữ liệu” có thể bị dùng để tạo ra một kết luận cần đến nó
Ý kiến trên Lobste.rs
Tôi nghĩ mỗi người đều có thể tự quyết định có tiếp tục dùng các dự án FOSS được phát triển theo kiểu vibe coding trong tương lai hay không. Tuy vậy, sự phẫn nộ mà cộng đồng thể hiện sau khi maintainer chuyển sang công cụ vibe coding thực sự khá đáng ngạc nhiên, và dữ liệu thực chứng trong bài ít nhất cũng giúp đặt tác động của thay đổi thực hành đó vào bối cảnh rõ ràng hơn
Còn việc niềm tin sẽ được duy trì hay tiếp tục sụp đổ sau khi maintainer áp dụng cách lập trình này thì phải chờ thời gian trả lời
Phân tích này đúng chính xác điều tôi muốn thấy, và còn hơn thế nữa. Tôi đặc biệt thích đoạn “mọi chỉ số, phương pháp luận và nguồn dữ liệu đều do tôi tự chọn sau khi trao đổi với vợ tôi, người có bằng thạc sĩ thống kê của Penn State University”, và việc có một chuyên gia thống kê thực thụ tham gia cùng cách trình bày dễ đọc là rất xuất sắc
Họ dùng một chỉ số duy nhất là “số lỗi trên mỗi 10 commit”, nhưng có vẻ đã bỏ lỡ cơ hội dùng tiền tố SI để gọi đó là decibugs trên mỗi commit
Thành công của một dự án mã nguồn mở bị chi phối quá nhiều bởi nhận thức, đến mức người ta còn bỏ tiền mua GitHub stars. Đáng tiếc là vấn đề nhận thức lần này đã vượt khỏi tầm kiểm soát và trở thành một talking point, và rất khó để bất kỳ dữ liệu nào thay đổi được điều đó
Từ giờ, câu kiểu “maintainer của rsync dùng LLM rồi làm hỏng mọi thứ” sẽ được những người hoài nghi AI đem ra cùng với các talking point như “datacenter lãng phí 500.000 gallon nước sạch mỗi ngày” hay “nghiên cứu của METR nói LLM làm giảm năng suất”
Tôi không định nói mình có phải người hoài nghi AI hay không, chỉ là tranh cãi quanh chủ đề này thường diễn ra theo kiểu như vậy
Dù vậy, đúng là bài viết đã bỏ qua hoàn toàn các yếu tố phi định lượng khác, và có lẽ là cố ý vì tiếng ồn từ cả hai phía, phía truyền giáo lẫn phía hoài nghi, đã quá nhiều rồi
Chi tiết rằng bản phát hành tệ nhất trong lịch sử rsync là từ trước khi đưa Claude vào, với 39,39 lỗi trên mỗi 10 commit, là một kết luận rất quan trọng và hoàn toàn có thể đoán trước
Nếu các quy trình như kiểm thử, đảm bảo chất lượng giữa người dùng và nhà phát triển không thể bảo đảm độ chính xác của phần mềm, thì dù có LLM hay không, lỗi vẫn sẽ được phát hành. LLM có thể gây hại cho quá trình này hoặc cũng có thể giúp ích
Nhờ các thực hành kỹ nghệ phần mềm mạnh mẽ đã được thiết lập suốt nhiều năm, giá trị của việc dùng các công cụ AI tương tự để tìm lỗi nhìn chung đã giảm đi
Theo tiêu chuẩn của tôi thì đó là vô trách nhiệm. Đặc biệt khi mục đích chính của rsync là chuyển dữ liệu quý giá, và tính toàn vẹn của dữ liệu đó là điều tối quan trọng
Tôi mong họ tránh kiểu tu từ như “đúng kiểu người dùng chống AI thì cuối cùng lại leo thang thành fantasy bạo lực”. Cách nói đó không chỉ khái quát hóa một số người mà tác giả không đồng tình, mà còn dễ gây phản cảm với cả những độc giả vốn đã không đồng ý, khiến chính những người cần đọc nhất lại không đọc bài
Tách riêng chuyện đó ra, dù phiên bản này nhiều hay ít lỗi hơn phiên bản trước thì tôi cũng không quá quan tâm. Điều tôi thấy quan trọng là nó được phát triển theo một cách không phù hợp với quan niệm của tôi về cách phần mềm nên được làm ra. Nếu không có hiểu biết nền tảng rằng ngoài hiệu suất còn có những vấn đề khác, thì tôi cũng không kỳ vọng thuyết phục được ai rằng lập trường này là hợp lý
May là nếu không muốn thì tôi không cần dùng phiên bản rsync này, và tôi sẽ chọn một nhánh thay thế được tách ra từ trước khi dùng LLM
Việc lặp lại một meme đã bị bác bỏ từ lâu, rằng báo cáo lỗi đầu tiên là issue do mọi người ào vào tạo, cũng không giúp ích gì. Báo cáo lỗi đầu tiên thực sự là một báo cáo khác
Tôi thấy bài viết hiện tại thành thật mà nói là tốt hơn. Tuy vậy, đoạn “chỉ số này không kiểm soát được độ phức tạp của commit, mức độ nhạy cảm về bảo mật, hay mức độ nghiêm trọng của lỗi. Nó là một công cụ thô, không phân biệt được giữa một bản sửa lỗi chính tả một dòng và một bản vá CVE” lại bỏ lỡ điểm phê phán cốt lõi, ít nhất từ lập trường của tôi ở phía LLM là thứ tệ hại
Điều tôi và những người khác đang phê phán là AI khiến người ta tuôn ra những commit lớn hơn, khó hiểu hơn và làm tăng độ phức tạp. Những người ủng hộ LLM cũng hay nói điều tương tự, rồi sau đó lại dời khung tranh luận từ thực hành “đọc PR” đã được kiểm chứng hàng chục năm sang “LLM phải có khả năng kiểm thử mọi thứ”. Nhưng vấn đề độ phức tạp của mã là nợ kỹ thuật thì vẫn không biến mất
Trong trường hợp này mức độ nghiêm trọng của lỗi là rất cao, vì quy trình sao lưu thực sự đã bị phá vỡ. rsync được dùng rộng rãi cho sao lưu, và mọi người đã tin nó là một công cụ “đã được thử lửa trong thực chiến” đến mức gần như không thể tưởng tượng việc một bản cập nhật vá lỗi lại có thể làm hỏng script sao lưu
Có thể nói việc LLM tạo ra phần mềm có lỗi chỉ là ngẫu nhiên, hoặc quản trị viên cần thay đổi quy trình làm việc với LLM và tăng độ bao phủ kiểm thử. Thực tế quản trị viên cũng đã nói như vậy. Nhưng cốt lõi của cơn giận là công cụ này đã phá vỡ niềm tin đó
Thực sự là dạo này có một kiểu lập trình viên LLM mới nói rằng họ “không hề đọc mã nữa”. Lý do là đọc quá tốn thời gian, và mã đó còn phức tạp hơn để hiểu so với mã do lập trình viên bình thường viết. Việc đọc mã là học mô hình tư duy của người khác, còn công cụ LLM thì không cung cấp được một mô hình tư duy nhất quán
Ngoài ra cũng nên kiểm tra khả năng truy cập của trang. Tôi thị lực khá tốt và mới cuối tuổi 20 mà vẫn thấy chữ xám nhạt trên nền kem/vàng thật sự rất đau mắt
Tôi không nghĩ chính những người đó đã tự phát hiện ra lỗi. Tôi đoán hơn 90% người dùng rsync vẫn đang dùng phiên bản cũ hơn không có lỗi đó. Tôi cũng là một trong số đó Nếu có lý do gì khiến chuyện này thu hút chú ý, thì việc một phần đáng kể cộng đồng đang rơi vào hỗn loạn là điều không cần Steven Pinker cũng hiểu được. Việc LLM lập trình giỏi hơn con người là điều không dễ chấp nhận
Những người đặt bản sắc và lòng tự trọng của mình vào năng lực lập trình hay nghề nghiệp của họ đang phải đối mặt với hai cuộc khủng hoảng: bất định về sinh kế/giá trị thị trường trong tương lai, và khủng hoảng bản sắc
Sợ hãi, bất định và nghi ngờ đều rất khó xử lý, còn các công ty LLM thì đang cố hết sức khuếch đại những hiệu ứng đó để đẩy giá cổ phiếu. Nếu thị trường điều chỉnh mạnh sau tháng 10, tôi nghĩ các cơ chế khuếch đại này cũng có thể suy yếu
Một tỷ lệ rất nhỏ trong số lập trình viên toàn cầu, tức những người xem mã như một loại hình nghệ thuật, có lẽ sẽ dùng LLM để rèn luyện và nâng cao tay nghề
Bài này trích dẫn rất nhiều bình luận nhắc đến hồi quy, nhưng bản thân phân tích lại không đo hồi quy mà chỉ đo các báo cáo lỗi. Nó gắn lỗi với bản phát hành nơi lỗi được báo cáo, chứ không phải bản phát hành nơi lỗi được đưa vào, và đo mức độ nghiêm trọng của bản phát hành bằng số lượng commit trong khi bỏ qua các yếu tố rõ ràng như thời gian giữa các bản phát hành hay mức độ được các bản phân phối tiếp nhận
Tôi không hiểu như vậy thì có ý nghĩa gì
Cá nhân tôi tránh các dự án dùng LLM. Không hẳn vì có lý do thực chất nào, mà chỉ vì tôi thấy rất khó chịu, kiểu giống như khi ai đó dùng những từ như “kek” hay “fren” thì tôi xem đó là tín hiệu rằng mình không còn muốn tương tác nữa dù không có lý do gì đặc biệt
Những lời giải thích hiện được đưa ra cho việc ghét dùng LLM với tôi giống như các lý lẽ hợp thức hóa được gắn vào sau. Các lo ngại hiện tại như đạo đức, chất lượng là có thật, nhưng kể cả khi những vấn đề đó được giải quyết thì tôi cũng không nghĩ những người có xu hướng phản AI như tôi sẽ đột nhiên thấy ổn
Vì vậy tôi tránh các dự án có “AGENTS.md”, commit đồng tác giả với Claude, v.v., dù không có lý do cụ thể nào. Đơn giản là tôi thấy khó chịu, không hợp gu, và có lỗi hay không cũng không quan trọng. Tôi nghĩ có lẽ những người khác cũng cảm thấy tương tự
Nói với tác giả thì, thứ nhất, fantasy là lời nói. Trên thực tế bạn đang khẳng định rằng nó đã dừng lại ở lời nói, hoặc ít nhất là không khẳng định rằng đã có sự leo thang phi ngôn ngữ
Thứ hai, nếu muốn đưa ra kiểu khẳng định này thì nên hỏi một chuyên gia thống kê gần bạn xem phải hậu thuẫn nó như thế nào. Chỉ vì vài người đăng những bài như vậy không có nghĩa là có thể dùng nó để hậu thuẫn một cách có ý nghĩa cho tuyên bố rằng đó là điều “điển hình”
Theo quan sát mang tính giai thoại của tôi, vốn không được hậu thuẫn bằng thống kê, thì những người dùng “phản AI” nhìn chung giống như đang buồn vì LLM chen vào những chỗ nó không giúp ích gì hơn là cảm thấy bạo lực
Nó quá chi tiết nên rất khó phản bác từ góc độ cảm xúc, và cuối cùng dường như luôn kết lại ở chỗ “LLM không phải vấn đề, nếu dùng đúng thì nó là công cụ khuếch đại. Những người phản AI chỉ là không hiểu gì và đang sợ bị tụt lại phía sau”
Tôi cũng không muốn hạ thấp công việc của các quản trị viên rsync thành một cuộc tranh cãi, nên tôi không biết mình có thể xây dựng một phản biện thuyết phục như thế nào
Các thống kê ở đây có thể thú vị từ góc nhìn bảo trì mã nguồn mở, nhưng kết luận lại nghiêng về một phía một cách kỳ lạ, và để lại cảm giác rằng mã nguồn mở kiểu GitHub không phải là hình thức tôi muốn đóng góp vào
Dù vậy, tôi hoàn toàn không thấy việc mọi người kéo thành đám đông đến kho rsync để dồn ép quản trị viên là điều tốt
Còn về quan sát giai thoại thì tôi thấy tranh này nói đúng. Tôi thích nhìn thấy những khẳng định cụ thể và có thể đo lường, một phần vì tôi thích con số, và một phần vì điều đó giúp các cuộc tranh luận trực tuyến tiến gần hơn dù chỉ một chút tới thế giới lý tưởng ở khung cuối cùng
Cảm ơn vì phần phân tích, nhưng tôi không chắc về phương pháp luận. Tôi muốn biết các chỉ số như số lỗi trên mỗi đơn vị chênh lệch, tức lấy số dòng thay đổi trong phần mã cốt lõi của từng commit — nghĩa là mã không phải test hay tài liệu — nhân với số lỗi, và phân tích thời gian cần để đạt đến một số lượng lỗi nhất định sau khi phát hành
Tuy vậy, có vẻ lần phát hành này đã thu hút sự chú ý nhiều hơn hẳn các lần khác nên khả năng cao là có nhiều lỗi được báo cáo hơn, vì thế sẽ khó tạo ra một chỉ số thật sự thuyết phục. Những câu hỏi như “xét theo số tuần sau phát hành thì có điển hình không?” cũng có thể không hữu ích lắm.