Gần đây, tôi đã tự đánh giá. Tôi thực sự là một người đóng góp Nix / NixOS và là nhà nghiên cứu trước đây quan tâm đến công nghệ triển khai.
Tôi đã cố gắng bám sát vào sự thật nhiều nhất có thể, nhưng có lẽ không thể vẫn hoàn toàn thiên vị. Để tóm tắt những phát hiện của tôi:
Cả hai cách tiếp cận các gói lưu trữ trong sự cô lập . Snappy lưu trữ các ứng dụng và khung trong các thư mục bằng cách sử dụng quy ước tên sau: /app/name/version.vendor
trong khi Nix sử dụng /nix/store/hash-name-version
.
Quy ước đặt tên của Nix mạnh hơn, bởi vì nó sử dụng tiền tố băm có nguồn gốc từ tất cả các phụ thuộc thời gian xây dựng . Với Nix, bạn có thể dễ dàng tạo ra sự khác biệt giữa bất kỳ biến thể nào của gói và lưu trữ chúng cạnh nhau. Bất kỳ thay đổi nào (ví dụ: quy trình xây dựng khác nhau, nâng cấp thư viện, nâng cấp trình biên dịch) đều mang lại một hàm băm mới giúp cho việc lưu trữ bất kỳ biến thể nào có thể nằm cạnh nhau.
Để cho phép một gói để tìm sự phụ thuộc của nó, Nix dây liên lạc tĩnh đến một thực thi (ví dụ bằng cách sửa đổi RPATH
của một nhị phân ELF) hoặc bằng cách gói chúng trong kịch bản mà thiết lập các biến môi trường thích hợp (ví dụ như CLASSPATH
, PYTHONPATH
, PERL5LIB
, vv).
Snappy soạn các thùng chứa trong đó các thực thi có thể tìm thấy các phụ thuộc của chúng trong các vị trí FHS chung của chúng, chẳng hạn như /lib
và/bin
Tuy nhiên, Nix cũng hỗ trợ phương pháp tiếp cận container của Snappy nhưng điều này chỉ được sử dụng trong những trường hợp rất hiếm. Gói Nix nổi bật nhất sử dụng cách tiếp cận được đóng gói là Steam trong NixOS, vì Steam là một công cụ triển khai với các thuộc tính xung đột.
Snappy Ubuntu Core sử dụng sơ đồ phân vùng "A / B" được gọi là để nâng cấp (và khôi phục) hệ thống cơ sở. Nó chỉ hỗ trợ một số phiên bản giới hạn (thường là hai) tại thời điểm đó.
Ngược lại, NixOS (Linux distro Nix-based) soạn hệ thống cơ sở ra khỏi gói Nix trong cửa hàng Nix cũng và là mạnh hơn rất nhiều. Bạn có thể quay lại bất kỳ cấu hình nào trước đây chưa được thu gom rác. Hơn nữa, các gói hệ thống tương tự giữa các thế hệ có thể được chia sẻ.
Cả hai công cụ đều hỗ trợ cài đặt người dùng không có đặc quyền . Tuy nhiên, Snappy lưu trữ tất cả các tệp trong thư mục chính của người dùng. Nếu hai người dùng tình cờ cài đặt cùng một gói thì họ được cài đặt hai lần trên hệ thống.
Ngược lại, các gói Nix cũng cho phép người dùng thông thường cài đặt các gói trong cửa hàng Nix trung tâm để các gói giống hệt nhau có thể được chia sẻ giữa những người dùng. Một phần vì quy ước đặt tên (sử dụng băm) điều này có thể được thực hiện một cách an toàn.
Snappy hạn chế hành vi thời gian chạy của các gói bên ngoài trong khi Nix thì không
Snappy dường như không giúp người dùng xây dựng các gói từ mã nguồn. Tuy nhiên, Nix có DSL cho phép mọi người thực hiện việc này khá dễ dàng và tự động cài đặt tất cả các phụ thuộc thời gian xây dựng (trình biên dịch, công cụ xây dựng, thư viện, v.v.) khi cần
Snappy hầu như không hỗ trợ mô đun hóa và tái sử dụng . Trong các gói ví dụ, tất cả các phụ thuộc thư viện được gói tĩnh tiêu tốn nhiều dung lượng đĩa và RAM hơn. Hơn nữa, tài liệu dường như không cung cấp bất kỳ cơ sở nào ngoại trừ các khung. Tuy nhiên, các khung không có nghĩa là để tái sử dụng theo tài liệu
Với các gói mô đun hóa Nix và quản lý phụ thuộc an toàn là một số tính năng chính của nó.
Hy vọng rằng bạn thấy thú vị khi đọc và có thể có một số điều trong đó mà bạn thấy đáng suy nghĩ.