7 điểm bởi GN⁺ 2026-01-29 | 4 bình luận | Chia sẻ qua WhatsApp
  • Một trình duyệt có thể render HTML và CSS đã được một người cùng một LLM agent tự triển khai trực tiếp bằng Rust chỉ trong 3 ngày
  • Dự án được hoàn thành với khoảng 20.150 dòng code, bao gồm các tính năng cơ bản như cuộn, quay lại và chế độ headless
  • Được thiết kế để chạy trên Windows, macOS và Linux mà không dùng thư viện Rust bên ngoài
  • Quá trình phát triển được thực hiện dưới hình thức cộng tác với agent Codex: con người phụ trách điều phối và kiểm chứng, còn agent đảm nhiệm việc viết code
  • Kết quả cho thấy tổ hợp “một người + một agent” hiệu quả hơn nhiều agent

Tổng quan dự án

  • Mục tiêu là xây dựng mới hoàn toàn một trình duyệt cơ bản có thể render HTML và CSS
    • Không hỗ trợ JavaScript
    • Nhà phát triển bắt đầu “cho vui” và thực hiện cùng LLM agent (Codex)
  • Đặt ra các ràng buộc như hoàn thành trong 3 ngày, không được dùng dependency Rust bên ngoàihỗ trợ 3 hệ điều hành lớn
  • Trình duyệt có engine render riêng, đồng thời gồm tính năng chụp màn hình, nhấp liên kết và kiểm thử hồi quy

Ngày 1 – triển khai ban đầu

  • Bắt đầu từ việc render “Hello World”, sau đó thêm xử lý thẻ lồng nhautính năng chụp màn hình
  • Xác định đặc tả HTML/CSS và đưa vào tính năng so sánh hình ảnh cho kiểm thử E2E
  • Chỉ sau một ngày đã đạt đến mức dùng X11 và cURL để tải website về rồi render
    • Codebase vào khoảng 7.500 dòng, mọi file đều được giữ dưới 1.000 dòng

Ngày 2 – mở rộng tính năng

  • Thêm chế độ --headless để giải quyết vấn đề cửa sổ bật lên khi chạy test
  • Cải thiện thay đổi kích thước cửa sổ, độ tương thích, hiệu năng và render font
  • Workflow là chia sẻ ảnh chụp màn hình website rồi để Codex tái hiện lại
    • Phần lớn code do agent viết, con người phụ trách rà soát và phê duyệt

Ngày 3~4 – hoàn thiện và hỗ trợ đa nền tảng

  • Bổ sung các tính năng thiết yếu của trình duyệt như cuộn, log debug, nút quay lại
  • Triển khai hỗ trợ macOS và Windows và vượt qua kiểm thử
  • Hoàn tất tích hợp CI và bản build phát hành, tổng thời gian phát triển khoảng 72 giờ

Kết quả và thống kê code

  • Codebase cuối cùng gồm khoảng 20.150 dòng, cấu thành từ 72 file
  • Các file chính bao gồm những module như layout, style, platform, browser
  • Cargo.lock trống, tức có thể chạy hoàn toàn độc lập mà không cần gói Rust bên ngoài
  • Có thể tải trực tiếp binary được build bằng CI và mã nguồn từ GitHub

Bài học chính

  • Tổ hợp một người + một agent hiệu quả hơn việc dùng hàng nghìn agent
  • Một agent đơn lẻ có thể xử lý một codebase trong thời gian dài và tạo ra tiến triển thực chất
  • Có khả năng mở rộng theo mô hình nhiều người, mỗi người sở hữu agent riêng
  • Giảm tốc độ lại đôi khi cho kết quả nhanh hơn và tốt hơn
  • Vai trò của con người điều khiển agent có thể quan trọng hơn cả thiết kế hệ thống
  • Kết luận là, trước câu hỏi “liệu đưa nhiều agent vào có làm tăng tốc phát triển không?”,
    đây là một ví dụ cho thấy hợp tác giữa một người và một agent có thể thực tế và hiệu quả hơn

4 bình luận

 
pkj3186 2026-01-29

Có thể tôi không rõ lắm, nhưng blog của simon mà mọi người trong các ý kiến trên Hacker News nhắc tới là blog gì vậy, sao cứ được nhắc đến hoài thế...?

 
laeyoung 2026-01-29

Có lẽ lý do bài blog của Simon Willison được nhắc đến nhiều trên Hacker News là vì,

  1. Có lẽ là vì ông ấy viết rất nhiều bài về AI, lại còn hay và nhanh nữa. Ngay cả bài kiểm tra hiệu năng AI kiểu thường thấy là vẽ "con bồ nông đi xe đạp" hình như cũng là ông này làm trước đó (https://simonwillison.net/search/?q=pelican)
  2. Ông ấy cũng có độ nhận diện vì là người tạo ra Django.
 
qyurila 2026-01-29

Đây là blog đứng số 1 trong những blog được yêu thích nhất trên Hacker News năm 2025. Vừa có danh tiếng, vừa có số lượng bài đăng rất đáng kể, nên từ góc nhìn của một người dùng Hacker News thông thường, đây có lẽ là blog được ghé thăm thường xuyên nhất và vì thế tự nhiên được xem như một chỉ dấu.

 
GN⁺ 2026-01-29
Ý kiến trên Hacker News
  • Tôi nghĩ đây là bản demo trình duyệt sinh mã tốt hơn rất nhiều so với FastRender của Cursor
    Nhỏ hơn nhiều, chỉ khoảng 20 nghìn dòng Rust, chỉ dùng thư viện hệ thống để render hình ảnh và văn bản, mã nguồn cũng dễ đọc
    Ví dụ, nhìn vào mã triển khai flexbox thì thấy rất rõ ràng
    Tôi cũng đã đăng ảnh chụp màn hình render blog của mình; nó xử lý tốt CSS gradient và biểu tượng SVG nhưng thất bại với PNG
    Tôi từng nghĩ trình duyệt render HTML+CSS là bài toán hoàn hảo để trình diễn agent song song, nhưng thật đáng ngạc nhiên là chỉ một coding agent cũng làm được

    • Xét từ góc độ kỹ thuật, tôi nghĩ đây là thiết kế hoàn thiện hơn nhiều so với trình duyệt của Cursor
      Điều quan trọng không chỉ là dùng thật nhiều token, mà là cách tận dụng agent hiệu quả
      Tôi cũng đã nhiều lần tạo ra hàng loạt dự án rồi bỏ đó sau vài ngày. Agent chỉ làm đúng những gì được bảo mà không có phản hồi, nên nếu đi sai hướng thì chỉ càng đào hố sâu hơn
    • Tôi cho rằng sự cộng tác giữa con người và agent tạo ra khác biệt mang tính quyết định
      Dù Claude có đi chệch hướng, nếu có cấu trúc agent đúng thì vẫn có thể kéo lại được
      Hiện tôi đang thử nghiệm tách riêng agent đánh giá, nghiên cứu và triển khai
      Tôi để họ mở rộng test dựa trên điểm số hoặc điều tra nguyên nhân thất bại, và nếu không có cải thiện thì hủy commit
      Cấu trúc như vậy có lợi hơn nhiều cho quản lý chất lượng mã nguồn
      Trong thời đại mà code rẻ và có thể vứt bỏ, chính workflow cũng phải thay đổi
    • Việc embedding-shapes trực tiếp tự tay làm ra điều này rất ấn tượng
      Câu chuyện này giống như “David vs Goliath”: 1 người + 1 agent đánh bại một trình duyệt trị giá 5 triệu USD, 1,6 triệu LOC
      AI vẫn là một hộp đen, nên mọi người đều đang vừa thử nghiệm vừa tìm hướng đi
      Mới chỉ qua một tháng của năm 2026, mà đã thấy háo hức về những thử nghiệm sắp tới
      Sẽ rất thú vị nếu Simon định kỳ xem lại thread dự đoán năm 2026 trên HN
  • Họ đặt giới hạn 3 ngày và quy định phải hỗ trợ X11/Windows/macOS chỉ bằng thư viện mặc định của hệ điều hành, không dùng crate bên thứ ba của Rust
    Hoàn thành trong khoảng 20 nghìn LOC, trong đó 14 nghìn dòng là engine và 6 nghìn dòng là mã hỗ trợ nền tảng
    Đã công khai mã nguồn và binary

    • Khi tôi đóng góp cho KHTML/konqueror 20 năm trước, chỉ để triển khai render cơ bản thôi cũng đã mất vài tháng
      Giờ thì nhờ bộ test có thể đọc được bằng máy mà hiệu quả cao hơn hẳn
      Ngày xưa hành vi của IE gần như là chuẩn thực tế, còn bây giờ thì Google, Apple và nhiều bên khác cùng đóng góp vào chuẩn hóa nên mọi thứ tốt hơn nhiều
    • Tôi tò mò họ đã dùng model nào, và chi phí token là bao nhiêu
    • Các ràng buộc đặt ra thật tuyệt vời
  • Ngoài tính năng ra, tôi rất tò mò về kiểm toán bảo mật của kiểu codebase này
    Rust chắc có giúp ích, nhưng tôi nghi ngờ chỉ riêng những đảm bảo của ngôn ngữ có đủ hay không

    • Bảo mật hoàn toàn không được tính đến. Mở website bất kỳ mà không có sandbox thì rất nguy hiểm
      Rust chỉ ngăn các lỗi bộ nhớ cơ bản chứ không ngăn được những thứ như truy cập file cục bộ
      Không có JS engine nên khó rò rỉ dữ liệu hơn, nhưng nếu kiểm toán thì chắc sẽ lộ ra nhiều lỗ hổng nghiêm trọng
  • Cộng đồng đã chờ browserBench từ lâu, nên thật vui khi cuối cùng nó cũng bắt đầu
    Trình duyệt là một trong những phần mềm phức tạp nhất, nên những thử nghiệm như thế này sẽ trở thành mốc tham chiếu để đánh giá giới hạn

  • Tôi rất khó hình dung việc làm một trình duyệt chỉ với 20 nghìn dòng
    Chỉ riêng zlib đã là 12 nghìn dòng rồi, nên cảm giác như phải có gì đó bị lược bỏ
    Tôi tò mò liệu nó chỉ đang gọi các hàm render của hệ điều hành hay không

    • Trên Linux, nó liên kết 78 thư viện động cho X11, glib, định dạng đồ họa, mã hóa và nhiều thứ khác
    • Không có dependency Rust, mà dùng framework mặc định của hệ điều hành
      README có ghi rõ đang dùng những thư viện nào
  • Khi tôi chạy thử thì việc render khá rối rắm
    Màu liên kết và gạch chân không nhất quán, và trên Windows thì nút quay lại không hoạt động
    Dù vậy, nó vẫn render khá tốt trang chủ HN và blog của Simon

    • Trình duyệt này không hẳn là một sản phẩm độc lập mà là dự án đáp lại bài viết scaling-agents của Cursor
      Mục tiêu là triển khai tính năng tương tự với số LOC ít hơn
      Không có stylesheet mặc định nên màu liên kết không đồng nhất
      Trên Windows 11 thì nút quay lại hoạt động. Nếu bạn dùng Windows 10 thì đó có thể là nguyên nhân
  • Có vẻ như render blog của Simon sẽ trở thành mục tiêu tiêu biểu cho trình duyệt AI
    Nhưng hiện tại thì nó vẫn giống một renderer hơn là một trình duyệt thật sự
    Sẽ ấn tượng hơn nếu AI được dùng để bổ sung triển khai API trong các dự án như Servo

    • Đồng ý. Gọi đây là trình duyệt thì vẫn còn thiếu nhiều, nó còn không render nổi HTML cơ bản cho tử tế và hay bị crash
      Dù vậy, nó vẫn tốt hơn nỗ lực của Cursor, và việc “biên dịch được” ít nhất cũng là một bước tiến tối thiểu
  • Tôi tò mò nếu làm một mình thì sẽ mất bao lâu
    Để hiểu mức độ trợ giúp của agent, tôi muốn biết độ sâu chuyên môn đã được đưa vào phần hướng dẫn cho nó là như thế nào

    • Nếu làm một mình thì có lẽ tôi không thể làm nổi
      Tôi biết Rust nhưng không biết X11, macOS hay Windows API, nên có lẽ còn khó mà bắt đầu
      Tuy vậy, tôi có nhiều kinh nghiệm về test, hạ tầng và thiết kế nên điều đó giúp ích trong việc cộng tác với agent
    • Tính bằng công cụ sloccount thì
      dự án này theo mặt bằng năm 2000 được ước tính là 4,58 nhân-năm, 610 nghìn USD,
      còn theo mặt bằng năm 2025 là khoảng 5,6 năm, 1,38 triệu USD
  • Điều thú vị ở bài viết này không phải là thành phẩm mà là quá trình tạo ra và các ràng buộc
    Phần lớn bài viết tập trung vào kết quả hoặc tác giả, còn bài này đem lại góc nhìn lấy quy trình làm trung tâm

    • Là người cũng từng viết về Cursor, tôi ngày càng không hiểu cách họ định nghĩa “thành công”
      Vì thế tôi cảm thấy việc khám phá đâu mới là phần thực sự khó, và quy trình nào đã đi sai, có ý nghĩa hơn nhiều
  • Công việc rất ấn tượng
    Tôi tò mò nếu triển khai khả năng truy cập (Accessibility) mà không có dependency Rust thì phải làm thế nào
    Trên Windows/macOS thì có thể dùng UI Automation và NSAccessibility, nhưng trên X11 thì có thể

    1. tự triển khai AT-SPI mới bằng D-Bus hoặc
    2. dùng thư viện C D-Bus có sẵn hoặc
    3. dùng GTK hoặc Qt