GitHub dùng Copilot viết lại runtime thành 832.000 dòng Rust

Kỹ sư GitHub Stephen Toub đăng bài hôm 16/9, tổng kết lại một đợt viết lại quy mô lớn do agent Copilot chủ trì: chuyển toàn bộ runtime của Copilot agent từ TypeScript/Node.js sang Rust. Khoảng 430.000 dòng TypeScript production ban đầu đã trở thành 832.378 dòng Rust production, cộng thêm 468.000 dòng unit test Rust và 174.000 dòng test end-to-end.

Dự án kéo dài từ 12/5 đến 21/8, khoảng 14,5 tuần. Trong thời gian đó, 128 pull request được hợp nhất tăng dần vào nhánh main, phát hành liên tục, tổng cộng 135 phiên bản (100 bản pre-release, 35 bản ổn định), trung bình khoảng 1,3 bản mỗi ngày.

Phần lớn code do mô hình viết, con người quản lý gì

Nhận định của Toub về thực tiễn này rất thẳng thắn:

"A project that would have taken a whole team of developers a year or two before agents was now completed primarily by a single developer, in only a few months."

Một dự án mà trước thời đại agent cần cả một đội ngũ lập trình viên làm trong một đến hai năm, nay chủ yếu được hoàn thành bởi một lập trình viên duy nhất, chỉ trong vài tháng.

Các mô hình chủ lực được dùng là Claude Opus 4.8, GPT-5.6 Sol và dòng Claude Haiku; các sub-agent phụ trách tối ưu thông lượng nghiêng về Opus 4.8 và GPT-5.6 Sol. Điều này cho thấy một tín hiệu đáng chú ý: trong đợt viết lại cấp production của chính GitHub (thuộc Microsoft), mô hình chủ lực lại là của đối thủ Anthropic, chứ không phải toàn bộ là OpenAI.

Phần việc của con người được phân định rõ ràng. Trong các tương tác của kỹ sư chủ trì, 31% thời gian dành cho "rà soát, kiểm thử và CI", 17,4% cho "phản biện các quyết định kỹ thuật", 15% cho "thúc ép hoàn thiện công việc". Quyền quyết định về kiến trúc, các lựa chọn thiết kế và việc hợp nhất cuối cùng luôn nằm trong tay con người. Mô hình lo phần viết ra khối lượng code, con người lo phần định hướng và nghiệm thu.

Kiểm chứng dựa vào bộ test cũ, khoảng năm mươi lỗi phát sinh

Đợt viết lại này không lập ra một bộ tiêu chuẩn nghiệm thu mới, mà dựa vào việc cho bộ test end-to-end sẵn có liên tục chạy trên code Rust mới, triển khai tăng dần để lỗi hồi quy lộ ra trong phạm vi nhỏ và được phát hiện sớm. Một vài con số kỹ thuật trong quá trình này cũng đáng tham khảo: tỷ lệ trúng cache prompt đạt 96,22%, tính năng nén ngữ cảnh được kích hoạt 5.116 lần trên các phiên làm việc.

Những sự cố cũng được ghi nhận trung thực. Toàn bộ quá trình có hơn 50 vấn đề đã biết, chia thành năm nhóm: di trú chưa hoàn chỉnh, vấn đề trạng thái và vòng đời, hợp đồng hành vi không nhất quán, vấn đề ranh giới host, và bản thân kỳ vọng của bài test bị viết sai. Phần lớn được sửa trước khi lên bản ổn định. Nhóm cuối cùng đặc biệt đáng lưu ý cho những ai làm di trú: khi dùng test cũ để chặn implementation mới, đôi khi cái sai lại là bài test, không phải code mới.

Bài học rút ra cho các đội kỹ thuật

Những case thực tế kiểu "dùng AI viết lại toàn bộ thành phần cốt lõi" như thế này nói lên ranh giới thật của agent lập trình hiện nay rõ hơn nhiều so với các bảng xếp hạng benchmark. Có ba điều có thể áp dụng ngay: một, đừng kỳ vọng viết lại một lần là xong — 128 pull request hợp nhất tăng dần, phát hành nhiều lần mỗi ngày, tất cả dựa vào tích hợp liên tục để san đều rủi ro; hai, tiêu chí nghiệm thu phải chốt trước, lần này hoàn toàn dựa vào bộ test E2E sẵn có làm thước đo, không có thước đo đó thì không thể phán đoán "mô hình viết đúng hay sai"; ba, công sức con người chuyển từ viết code sang rà soát, ra quyết định và dò lỗi sót, nhờ vậy quy mô viết lại mà một người có thể quán xuyến được nhân lên một bậc.

Một điểm cần lưu ý là các lợi ích kiến trúc (nhúng trong tiến trình, chi phí bộ nhớ thấp hơn, khởi động nhanh hơn) trong bài viết gốc chỉ được mô tả định tính, không đưa ra con số so sánh trước/sau về bộ nhớ, độ trễ hay thông lượng. Việc viết lại thực sự mang lại bao nhiêu hiệu năng, hiện chưa thể kiểm chứng từ bài tổng kết này. Con đường từ TypeScript sang Rust cũng không phải lựa chọn mặc định cho phần lớn các đội — điều kiện để nó khả thi là có một bộ test đủ vững và sẵn sàng phát hành mỗi ngày.

Nguồn tham khảo: GitHub Blog (Stephen Toub), CocoLoop; các số liệu 832.000 dòng, 128 pull request, 14,5 tuần, tỷ lệ trúng cache 96,22% và khoảng 50 vấn đề đã biết được đối chiếu theo bài tổng kết chính thức.