yamlfmt của Google , một công cụ dòng lệnh để định dạng các tệp YAML , đã khơi mào cuộc thảo luận trong cộng đồng về khả năng tồn tại lâu dài của nó và bối cảnh rộng lớn hơn của các giải pháp định dạng YAML . Công cụ này, hiện đang được duy trì bởi một nhà phát triển duy nhất trong thời gian rảnh rỗi mà không có sự hỗ trợ chính thức từ Google , đại diện cho cả tính hữu ích và sự mong manh của các dự án mã nguồn mở từ các công ty công nghệ lớn.
Yêu cầu cài đặt
- Yêu cầu phiên bản Go 1.21 trở lên
- Có sẵn dưới dạng tệp nhị phân đơn lẻ không cần phụ thuộc
- Có thể cài đặt thông qua:
go install github.com/google/yamlfmt/cmd/yamlfmt@latest
- Cũng có sẵn thông qua Homebrew:
brew install yamlfmt
Mối quan ngại về bảo trì và thành tích của Google
Cộng đồng đã bày tỏ sự hoài nghi về tương lai của yamlfmt , rút ra những điểm tương đồng với các dự án khác của Google đã bị bỏ rơi. Tuyên bố miễn trừ trách nhiệm của công cụ rằng nó chưa được Google hỗ trợ chính thức và chủ yếu được duy trì trong thời gian rảnh rỗi đã làm dấy lên cảnh báo đỏ cho các nhà phát triển đã trải qua những tình huống tương tự với các công cụ khác của Google như Kaniko . Sự bất định này đã khiến một số người dùng tìm kiếm các giải pháp thay thế ổn định hơn trước khi đầu tư thời gian vào việc áp dụng.
Vị trí gây tranh cãi của YAML trong phát triển hiện đại
Cuộc thảo luận cũng đã làm bùng phát lại các cuộc tranh luận về chính YAML như một định dạng cấu hình. Trong khi YAML đã trở nên phổ biến trong phát triển hiện đại thông qua các công cụ như Kubernetes và Ansible , một số nhà phát triển vẫn chỉ trích sự phức tạp và những tác động bảo mật của nó. Sự phát triển của định dạng này từ các phiên bản đầu đơn giản hơn đến các đặc tả giàu tính năng hơn đã đưa ra những lỗ hổng bảo mật tiềm ẩn, đặc biệt xung quanh các tuyên bố YAML có thể thực thi và việc thực thi mã tùy ý trong quá trình giải tuần tự hóa.
Các mối quan ngại về an toàn đều liên quan đến các đặc tả YAML sau này, thẻ và mã. Đó là lý do tại sao hầu hết vẫn ở phiên bản đầu, với một số API danh sách trắng.
Những Cân Nhắc Bảo Mật Của YAML
- Các phiên bản YAML sớm (như syck) có ít vấn đề bảo mật hơn
- Các đặc tả sau này đã giới thiệu khả năng thực thi mã lệnh
- Các triển khai hiện đại nên sử dụng API danh sách trắng cho đầu vào không đáng tin cậy
- Việc giải tuần tự hóa tùy ý có thể tạo ra các lỗ hổng bảo mật
Các giải pháp định dạng thay thế
Cộng đồng đã nêu bật một số giải pháp thay thế hiện có có thể cung cấp sự ổn định hơn và hỗ trợ ngôn ngữ rộng hơn. Prettier , đã thêm hỗ trợ YAML vào năm 2020, cung cấp khả năng định dạng đa ngôn ngữ nhưng gặp phải các vấn đề về hiệu suất trên các dự án lớn. Bộ định dạng của Deno đã nổi lên như một giải pháp thay thế nhanh một cách đáng ngạc nhiên, có khả năng xử lý hàng nghìn tệp mỗi giây. Các công cụ truyền thống như yq cũng cung cấp khả năng định dạng YAML và có thành tích đã được thiết lập trong hệ sinh thái.
Các công cụ định dạng YAML thay thế
- Prettier: Hỗ trợ đa ngôn ngữ, hỗ trợ YAML từ năm 2020, gặp vấn đề về hiệu suất trên các dự án lớn
- Deno fmt: Cực kỳ nhanh (hàng nghìn tệp/giây), hỗ trợ YAML đang trong giai đoạn thử nghiệm
- yq: Công cụ đã được thiết lập với khả năng định dạng
- yamlfmt: Tệp thực thi đơn, có thể mở rộng, tương lai bảo trì không chắc chắn
Thách thức của hệ sinh thái rộng lớn hơn
Tình huống này phản ánh một thách thức phổ biến trong hệ sinh thái mã nguồn mở nơi các công cụ hữu ích từ các tập đoàn lớn tồn tại trong trạng thái bất định. Trong khi yamlfmt cung cấp những lợi thế cụ thể như phân phối nhị phân đơn và khả năng mở rộng, trạng thái bảo trì không chắc chắn của nó buộc các nhà phát triển phải cân nhắc lợi ích so với rủi ro bị bỏ rơi trong tương lai. Sự có sẵn của nhiều giải pháp thay thế cho thấy cộng đồng đã nhận ra mô hình này và phát triển các giải pháp dự phòng.
Cuộc thảo luận về yamlfmt cuối cùng làm nổi bật sự căng thẳng giữa đổi mới và ổn định trong công cụ phát triển, nơi ngay cả những công cụ được thiết kế tốt cũng có thể đối mặt với tương lai bất định do ưu tiên của công ty và phân bổ tài nguyên.
Tham khảo: yamlfmt