- Bài viết bàn về các vấn đề liên quan đến tính mở và cách quản trị của Next.js: thiếu adapter, thiếu hỗ trợ serverless chính thức, các đường dẫn mã chỉ dành cho Vercel, cũng như cách Vercel ứng phó với sự cố bảo mật
- Việc lựa chọn stack công nghệ là một quyết định quan trọng, có ảnh hưởng dài hạn đến tốc độ phát triển, chất lượng dự án và cơ cấu đội ngũ
- Phần mềm mã nguồn mở mang lại cho người dùng quyền tự do mở rộng và chỉnh sửa mã, đồng thời có lợi thế là tránh bị phụ thuộc vào nhà cung cấp
- Next.js được cung cấp dưới dạng mã nguồn mở, nhưng lại gắn chặt với hạ tầng của Vercel, công ty tạo ra nó
- Việc một công ty kiếm doanh thu từ mã nguồn mở do mình tạo ra không phải là vấn đề, nhưng để trở thành một mô hình bền vững thì ranh giới giữa mã nguồn mở và doanh nghiệp phải rõ ràng
Bối cảnh và lợi ích liên quan của tác giả
- Tác giả đã làm việc tại Netlify hơn 4 năm, và Netlify là đối thủ cạnh tranh của Vercel
- Trong quá trình trực tiếp xây dựng hạ tầng và bộ công cụ tại Netlify để hỗ trợ đầy đủ các tính năng của Next.js, tác giả đã có được hiểu biết sâu sắc về cấu trúc nội bộ của Next.js
- Tác giả đã ngần ngại nêu vấn đề này công khai trong thời gian dài, nhưng gần đây cho rằng cách Vercel xử lý vấn đề bảo mật đã gây hại cho cộng đồng nên quyết định viết bài
# Vấn đề về tính mở và quản trị của Next.js
Fact #1: Thiếu adapter
- Hầu hết các framework hiện đại đều có thể được cấu hình linh hoạt thông qua adapter tùy theo môi trường triển khai
- Next.js không hỗ trợ adapter một cách chính thức, và định dạng đầu ra của nó là một cấu trúc độc quyền, không công khai, chỉ được dùng trên Vercel
- Vercel đã tạo ra Build Output API, nhưng Next.js vẫn chưa hỗ trợ nó
- Kết quả là các nhà cung cấp ngoài Vercel phải xây dựng dựa trên các API không được tài liệu hóa, khiến họ dễ tổn thương trước những thay đổi bất ngờ
- Cloudflare và Netlify đang hợp tác phát triển adapter cho Next.js thông qua OpenNext, và Vercel cũng đã bắt đầu tham gia, nhưng vẫn chưa có lịch trình cụ thể
Fact #2: Thiếu hỗ trợ serverless chính thức
- Cách self-hosting chính thức của Next.js dựa trên máy chủ chạy lâu dài, nên khó hiện thực hóa khả năng mở rộng linh hoạt và tối ưu chi phí trong môi trường vận hành thực tế
- Trước đây từng có chế độ serverless, nhưng đã bị gỡ bỏ vào tháng 10 năm 2022 mà không có giải thích rõ ràng
- Tài liệu chính thức của React có đề cập rằng có thể triển khai theo kiểu serverless, nhưng lại không có tài liệu chính thức để hiện thực điều đó trong thực tế
- Các nhà cung cấp hosting muốn có môi trường serverless phải reverse engineering Next.js để tự triển khai
Fact #3: Tồn tại các đường dẫn mã chỉ dành cho Vercel
- Next.js chứa các đường dẫn mã không công khai chỉ hoạt động khi triển khai trên Vercel (ví dụ: minimal mode)
- Thông qua chế độ này, Vercel có thể tối ưu hiệu năng như chạy middleware ở edge
- Middleware là tính năng cho phép thực thi logic nhanh trên đường đi trước cache, nhưng tính năng này chỉ Vercel mới dùng được
- Netlify đã phải lập hẳn một đội ngũ kỹ sư chuyên trách và tự hiện thực để hỗ trợ tính năng này, nhưng mức tài nguyên như vậy là điều bất khả thi với các nhà cung cấp nhỏ hơn
- Thực tế rằng chỉ Vercel là nền tảng duy nhất chính thức cung cấp đầy đủ tính năng của Next.js đi ngược lại triết lý mã nguồn mở của framework này
Sự cố bảo mật và cách Vercel ứng phó
- Ngày 21 tháng 3 năm 2025, một lỗ hổng bảo mật nghiêm trọng trong Next.js cho phép bỏ qua cơ chế xác thực đã được công bố (CVE 9.1 điểm)
- Lỗ hổng này là vấn đề mà chỉ cần đưa một header cụ thể vào request là có thể vô hiệu hóa middleware và truy cập vào các tài nguyên được bảo vệ
- Lỗ hổng được báo cáo vào ngày 27 tháng 2, nhưng mãi đến ngày 14 tháng 3 Vercel mới bắt đầu điều tra
- Sau khi nhận ra vấn đề, bản vá được phát hành nhanh chóng, nhưng phải mất tới 8 ngày mới thông báo cho các nhà cung cấp khác như Netlify
- Bài blog ban đầu mô tả theo hướng firewall của Vercel đã bảo vệ khách hàng, nhưng thực tế không phải vậy
- Điều này khiến nhiều nhà cung cấp và lập trình viên phản ứng hoặc xử lý dựa trên thông tin sai lệch, đồng thời có khả năng vẫn còn nhiều trang web ở trạng thái dễ bị tấn công
Quyền sở hữu Next.js của Vercel và trách nhiệm với mã nguồn mở
- Không thể phủ nhận việc Vercel sở hữu Next.js, và việc thương mại hóa nó cũng là chính đáng
- Tuy nhiên, vì nó được cung cấp dưới dạng mã nguồn mở, các nhà cung cấp khác cũng phải có thể sử dụng một cách bình đẳng, và ở điểm này Vercel chưa đáp ứng được kỳ vọng
- Redis, Grafana, WordPress cũng đồng thời vận hành dịch vụ thương mại và dự án mã nguồn mở mà vẫn duy trì được tính mở và khả năng tương tác
Kết luận
- Dù chọn framework nào thì đó vẫn là quyết định của người dùng, và nếu Next.js là lựa chọn tối ưu để giải quyết vấn đề thì tiếp tục dùng nó cũng hoàn toàn ổn
- Tuy nhiên, điều quan trọng là phải lựa chọn trong trạng thái đã hiểu rõ các vấn đề cấu trúc và những hạn chế hiện tại của Next.js
4 bình luận
Ý kiến Hacker News
Tác giả thuộc Netlify và tự nhận công ty mình là đối thủ cạnh tranh trực tiếp với Vercel. Điều này có vẻ hơi thiếu tính khách quan.
Nếu gần đây bạn từng so sánh giữa các framework cạnh tranh như tanstack hay remix, thì nội dung trong bài này về cơ bản đều là những điều ai cũng đã biết, ít nhiều gì cũng vậy. Chỉ là hiện tại thị phần của nextjs vẫn quá lớn và Vercel cũng chưa có những động thái quá lộ liễu, nên vấn đề này chưa bị phơi bày ra bề mặt.
Việc cho rằng thông tin mà bài viết muốn truyền tải thiếu tính khách quan chỉ vì tác giả làm việc tại công ty đối thủ là công kích cá nhân. Nếu bỏ qua bối cảnh và lợi ích liên quan của tác giả khi đọc, đây có phải là một bài viết kỳ lạ không? Tôi nghĩ đó là thông tin hữu ích.