Các Thư Viện Lập Trình Phổ Biến Hiểu Sai Hướng Dẫn macOS, Buộc Công Cụ CLI Vào Thư Mục Sai

Nhóm Cộng đồng BigGo
Các Thư Viện Lập Trình Phổ Biến Hiểu Sai Hướng Dẫn macOS, Buộc Công Cụ CLI Vào Thư Mục Sai

Một cuộc tranh luận ngày càng gia tăng trong cộng đồng nhà phát triển đã nổi lên về việc các công cụ dòng lệnh nên lưu trữ file cấu hình ở đâu trên macOS. Nhiều thư viện lập trình phổ biến đang đặt sai file cấu hình CLI trong ~/Library/Application Support, gây ra sự bực bội trong các nhà phát triển vốn mong đợi những file này tuân theo XDG Base Directory Specification và nằm trong ~/.config.

Vấn đề xuất phát từ các thư viện được sử dụng rộng rãi để xác định thư mục cấu hình theo từng nền tảng. Package platformdirs của Python (242 triệu lượt tải xuống hàng tháng), env-paths của JavaScript (95 triệu lượt tải xuống hàng tháng), dirs crate của Rust (4.8 triệu lượt tải xuống hàng tháng), và package adrg/xdg của Go đều mặc định sử dụng ~/Library/Application Support trên macOS. Điều này ảnh hưởng đến hàng trăm công cụ dòng lệnh dựa vào các thư viện này để quản lý cấu hình.

Các thư viện phổ biến sử dụng sai thư mục:

  • platformdirs của Python : 242 triệu lượt tải xuống/tháng
  • env-paths của JavaScript : 95 triệu lượt tải xuống/tháng
  • dirs crate của Rust : 4,8 triệu lượt tải xuống/tháng
  • gói adrg/xdg của Go : được sử dụng trong 913 gói

Gốc Rễ Của Vấn Đề

Sự nhầm lẫn xuất phát từ việc hiểu sai hướng dẫn macOS Standard Directories của Apple. Những hướng dẫn này đặc biệt đề cập đến các app - trên macOS có nghĩa là Application Bundles với phần mở rộng .app, bundle identifier, và các yêu cầu cài đặt cụ thể. Các công cụ dòng lệnh về cơ bản khác với app và không có những đặc điểm này.

Tài liệu của Apple nêu rõ rằng Application Support nên chứa các file mà app tạo ra và quản lý thay mặt người dùng và nên được tổ chức bằng bundle identifier. Vì các công cụ CLI thiếu bundle identifier và file cấu hình của chúng thường được người dùng chỉnh sửa thủ công, chúng không phù hợp với danh mục này.

Kỳ Vọng Của Nhà Phát Triển So Với Thực Tế

Sự bực bội của cộng đồng rõ ràng trong các cuộc thảo luận đang diễn ra xung quanh các thư viện phổ biến. Các nhà phát triển Rust đã liên tục yêu cầu thay đổi dirs crate, nhưng những người duy trì đã từ chối chấp nhận tiêu chuẩn XDG trên macOS. Điều này đã khiến một số nhà phát triển hoàn toàn từ bỏ thư viện, tạo ra các giải pháp tùy chỉnh triển khai đúng đắn các đặc tả XDG trên các nền tảng.

Là một người dùng mới, tôi cực kỳ ngạc nhiên khi thấy một công cụ hiện đại như nu lại đặt file cấu hình trong Application Support trên macOS. Thậm chí còn ngạc nhiên hơn khi thấy một số người tích cực phản đối việc áp dụng tiêu chuẩn XDG.

Kỳ vọng về ~/.config không phải là tùy tiện - nó dựa trên tính nhất quán với các hệ thống Unix-like khác và thực tế rằng macOS là một hệ điều hành Unix được chứng nhận. Ngay cả các công cụ dòng lệnh của chính Apple như bash, zsh, git, và vim cũng tuân theo các quy ước Unix truyền thống để đặt file cấu hình.

Trình Quản Lý Dotfile Tiết Lộ Sở Thích Người Dùng

Các công cụ quản lý dotfile phổ biến cung cấp cái nhìn sâu sắc về hành vi thực tế của người dùng. Các công cụ như chezmoi (14.3k sao GitHub), dotbot (7.3k sao), và yadm (5.5k sao) không nỗ lực hỗ trợ ~/Library/Application Support theo mặc định, mặc dù bao gồm các cấu hình đặc biệt cho macOS. Điều này cho thấy người dùng chủ yếu mong đợi và quản lý cấu hình CLI của họ ở các vị trí Unix tiêu chuẩn.

Số sao GitHub của các công cụ quản lý Dotfile:

  • chezmoi: 14.3k sao
  • dotbot: 7.3k sao
  • yadm: 5.5k sao
  • rcm: 3.2k sao

Giải Pháp XDG

XDG Base Directory Specification cung cấp một giải pháp sạch sẽ hoạt động trên các hệ thống Unix-like, bao gồm macOS. Nó cung cấp các vị trí tiêu chuẩn hóa cho cấu hình ($XDG_CONFIG_HOME), cache ($XDG_CACHE_HOME), và file dữ liệu, với các mặc định hợp lý khi biến môi trường không được thiết lập.

Một số nhà phát triển đã tìm ra cách giải quyết bằng cách sử dụng các thư viện thay thế như etcetera crate trong Rust, sử dụng tiêu chuẩn XDG trên cả Linux và macOS theo mặc định. Những người khác đã tạo ra các triển khai tùy chỉnh tôn trọng biến môi trường XDG khi chúng được thiết lập, cung cấp cho người dùng quyền kiểm soát việc đặt cấu hình.

Cách Sử Dụng Thư Mục Cấu Hình Đúng Cách:

  • Công cụ CLI: Nên sử dụng ~/.config (đặc tả XDG)
  • Ứng dụng GUI trong /Applications: Có thể sử dụng ~/Library/Application Support
  • Tùy chọn macOS: Nên sử dụng ~/Library/Preferences với API NSDefaults

Hướng Tới Tương Lai

Giải pháp không phức tạp - các công cụ dòng lệnh nên tuân theo đặc tả XDG, mặc định sử dụng ~/.config cho file cấu hình trên các hệ thống Unix-like bao gồm macOS. Đối với các ứng dụng GUI được cài đặt trong /Applications tự động quản lý cấu hình, ~/Library/Application Support vẫn phù hợp.

Cuộc tranh luận làm nổi bật một vấn đề rộng lớn hơn trong phát triển đa nền tảng: tầm quan trọng của việc hiểu các hướng dẫn đặc biệt theo nền tảng trong bối cảnh phù hợp thay vì áp dụng mù quáng chúng cho tất cả các loại phần mềm. Khi cộng đồng nhà phát triển tiếp tục thúc đẩy tính nhất quán và các mặc định thân thiện với người dùng, những người duy trì thư viện có thể cần xem xét lại các triển khai hiện tại để phục vụ tốt hơn nhu cầu thực tế của người dùng.

Tham khảo: macOS dotfiles should not go in ~/Library/Application Support