Tại sao tôi yêu NixOS
Why I love NixOS
NixOS dùng Nix package manager để cung cấp một hệ điều hành với cấu hình mang tính xác định và có thể tái lập. Cách tiếp cận này cho phép developer định nghĩa toàn bộ hệ thống của họ, bao gồm các package và cài đặt, trong một file khai báo duy nhất, giải quyết vấn đề "lộn xộn trạng thái" thường gặp ở các thiết lập OS truyền thống. Developer sẽ được hưởng lợi từ việc build có thể dự đoán được, khả năng rollback dễ dàng và khả năng tái tạo môi trường giữa các máy một cách liền mạch. Mô hình khai báo này đơn giản hóa đáng kể việc quản lý hệ thống và thử nghiệm, giúp quy trình làm việc phát triển trở nên đáng tin cậy và hiệu quả hơn.
Điều tôi yêu thích ở NixOS không liên quan nhiều đến Linux mà liên quan nhiều hơn đến trình quản lý gói Nix1. Đối với tôi, NixOS là sản phẩm hệ điều hành của một ý tưởng quan trọng hơn nhiều: một hệ thống xác định và...
Điều tôi yêu thích ở NixOS không liên quan nhiều đến Linux mà còn nhiều việc phải làm với Trình quản lý gói Nix1.
Đối với tôi, NixOS là sản phẩm của hệ điều hành quan trọng hơn nhiều ý tưởng: một gói chức năng xác định và có thể tái tạo người quản lý. Đó là cốt lõi lý do tại sao tôi yêu thích NixOS. Nó không phải là bản phân phối thương hiệu mà tôi quan tâm. Thực tế là tôi có thể xây dựng một toàn bộ hệ điều hành là kết quả tất yếu của việc cung cấp DSL Nix cho Nix rồi xây dựng lại, thay đổi từng chút một và khôi phục lại nếu tôi không thích kết quả.
Tôi yêu NixOS vì hầu hết các hệ điều hành đều dần dần chuyển sang thành một đống trạng thái. Bạn cài đặt gói, chỉnh sửa cài đặt, thử ngẫu nhiên công cụ, loại bỏ một số công cụ, nâng cấp theo thời gian và sau một thời gian bạn có một chiếc máy hoạt động nhưng không theo cách mà bạn có thể tự tin giải thích từ những nguyên tắc đầu tiên. Đối với tôi, NixOS rất khác. tôi làm không cần phải tin tưởng vào một đống nhà nước. Tôi có thể xác định một hệ thống và xây dựng nó.
Tôi yêu NixOS vì tôi có thể chỉ định toàn bộ hệ điều hành bao gồm các gói tôi cần và cấu hình trong một thiết lập khai báo. Khía cạnh một nơi đó quan trọng đối với tôi nhiều hơn những gì nó có thể nghe lúc đầu. Tôi không phải đuổi theo gói các lựa chọn ở một nơi, cài đặt màn hình ở một nơi khác và bàn phím hành vi ở một nơi khác. Dưới đây là một số ví dụ nhỏ về Nix DSL.
- Tiện ích mở rộng Gnome:
environment.systemPackages = với pkgs; [ gnomeExtensions.dash-to-dock gnomeExtensions.unite gnomeExtensions.appindicator libappindicator ]; services.desktopManager.gnome.extraGSettingsOverrides = '' [org.gnome.shell] Enable-extensions=['dash-to-dock@gnome-shell-extensions.gcampax.github.com', 'unite@hardpixel.eu', 'appindicatorsupport@rgcjonas.gmail.com'] [org.gnome.shell.extensions.dash-to-dock] vị trí bến tàu='DƯỚI ĐÂY' tự động ẩn=true dock-fixed=false chiều cao mở rộng = sai chế độ minh bạch='CỐ ĐỊNH' '';
- Ánh xạ phím trên mỗi bàn phím:
Đó là những chi tiết thông thường của một cỗ máy đang làm việc, nhưng đó chính xác là những chi tiết điểm. Tôi có thể mô tả chúng một cách rõ ràng, xây dựng lại hệ thống và tiếp tục di chuyển. Nếu tôi mua một chiếc máy tính mới, tôi không phải nhớ lâu chuỗi các bước thiết lập thủ công hoặc các tập lệnh chưa hoàn thiện nằm rải rác khắp nơi. tôi có thể xây dựng lại hệ thống từ một nguồn sự thật duy nhất.
Tôi yêu NixOS vì nó đã có từ lâu thời gian. Theo kinh nghiệm của tôi, nó đã rất ổn định. Nó có một bản phát hành có thể dự đoán được nhịp mỗi sáu tháng. Tôi có thể thiết lập nó để cập nhật tự động và nâng cấp nó mà không phải lo lắng thường gặp khi vận hành nâng cấp hệ thống. Tôi không phải suy nghĩ nhiều về lời nhắc nâng cấp, thông báo trên màn hình hoặc hệ thống trôi dạt ngẫu nhiên trong nền. Nó chủ yếu là tránh đường cho tôi. Và nếu tôi muốn mạo hiểm hơn, nó cũng có một kênh không ổn định2 mà tôi có thể kích hoạt để thử nghiệm và nhận phần mềm mới hơn.
Tôi yêu NixOS vì nó cho phép máy tính xách tay của tôi nhàm chán theo nghĩa tốt nhất có thể. Gần đây tôi đã mua một chiếc máy tính xách tay HP3 và NixOS đã hoạt động rất tốt ngay từ đầu. Tôi đã không phải làm vậy đấu tranh với phần cứng để có được một mức giá hợp lý đường cơ sở. Điều đó mang lại cho tôi chính xác những gì tôi muốn từ một chiếc máy tính cá nhân: một hệ thống ổn định mà tôi có thể cấu hình một cách khai báo và sau đó chủ yếu là bỏ qua trong khi tôi tập trung vào công việc thực tế.
Tôi yêu thích NixOS vì nó giúp việc thử nghiệm trở nên rẻ và an toàn. tôi có thể thử các gói mà không làm thay đổi hệ thống cơ sở. Tôi có thể xây dựng một gói shell hoàn toàn biệt lập4 cho mọi thứ từ tập lệnh một lần đến một dự án hoàn chỉnh. Nếu tôi muốn làm cứng nó hơn nữa, tôi có thể sử dụng Nix DSL để chỉ định các phần phụ thuộc, các bước xây dựng và kết quả hiện vật được khai báo. Đó là cách làm việc tốt hơn nhiều so với đang dần làm ô nhiễm tài xế hàng ngày của tôi và hy vọng tôi có thể tái tạo lại những gì tôi đã làm sau này.
Tôi yêu NixOS vì tôi có thể sử dụng cùng một trình quản lý gói trên macOS và Linux. Ngoài ra còn có sự hỗ trợ do cộng đồng duy trì cho FreeBSD, mặc dù cá nhân tôi chưa sử dụng nó. Đó là lợi ích thiết thực to lớn bởi vì công cụ phát triển và quản lý phụ thuộc của tôi có thể duy trì hầu hết đều thống nhất trên các hệ thống đó. Nó có nghĩa là giá trị của Nix không chỉ gắn liền với NixOS. NixOS tình cờ là biểu thức hoàn chỉnh nhất về nó, nhưng mô hình cơ bản rất hữu ích với tôi trên nhiều nền tảng.
Tôi yêu thích NixOS vì nó đặc biệt phù hợp với cách tôi làm việc trong kỷ nguyên mã hóa LLM hiện tại.
Công cụ đang thay đổi rất nhanh chóng. Các tác nhân mã hóa thường cần rất
phiên bản cụ thể của tiện ích, trình biên dịch và thời gian chạy. Họ cần phải
cài đặt cái gì đó, sử dụng nó, vứt nó đi, thử phiên bản khác và giữ lại
đi mà không biến PC của tôi thành một bãi rác xung đột
trạng thái. Nix tự nhiên phù hợp với mô hình đó. Nếu tôi nói với nhân viên mã hóa rằng tôi
sử dụng Nix, nó thường đủ thông minh để tiếp cận nix shell hoặc
nix develop để đưa công cụ cần thiết vào một môi trường biệt lập
và thực hiện nó ở đó. Điều đó đặc biệt hữu ích vì Nix xử lý
dụng cụ làm đầu vào được khai báo thay vì tác dụng phụ ngẫu nhiên lên
hệ thống.
Một ví dụ cụ thể: Gần đây tôi đã xây dựng một tác nhân chuyển giọng nói thành văn bản trong
Rust5. Tôi chưa cài đặt chuỗi công cụ Rust trên hệ thống của mình. tôi
chỉ cần nói với nhân viên mã hóa rằng tôi sử dụng Nix và họ đã tìm ra cách
để kéo toàn bộ chuỗi công cụ Rust thông qua Nix, biên dịch dự án
bên trong một lớp vỏ biệt lập và tạo ra một hệ nhị phân hoạt động. Hệ thống cơ sở của tôi
chưa bao giờ được chạm vào. Không có ~/.cargo, không có ~/.rustup, không có PATH bị đột biến
những mục còn sót lại. Nếu không có Nix, đặc vụ sẽ đạt được
curl | sh để cài đặt Rustup, lặng lẽ biến đổi môi trường của tôi và
khiến hệ thống của tôi hơi khác một chút mãi mãi. Với Nix, không có điều đó
đã xảy ra.
Mô hình này khái quát hóa. Mỗi khi một đại lý cần Python 3.11 so với
3.12, một phiên bản cụ thể của ffmpeg, một công cụ CLI khó hiểu hoặc một
trình biên dịch cụ thể, Nix cung cấp cho nó một cách rõ ràng và có thể đảo ngược để có được
chính xác những gì nó cần. Tác nhân không cần phải đoán xem liệu một
công cụ đã được cài đặt hoặc phiên bản sai. Nó chỉ khai báo
những gì nó cần và Nix sẽ lo phần còn lại theo cách đóng gói trong hộp cát.
Một điều nữa tôi đánh giá cao là Nix trở thành đại lý
thử nghiệm thứ gì đó mà bạn thực sự có thể cam kết và tái tạo. Một lần
tác nhân có thiết lập hoạt động, bạn có thể nắm bắt chính xác các phần phụ thuộc
trong flake.nix và chạy nixflake check để xác minh rằng nó được xây dựng
sạch sẽ lại từ đầu. Điều đó biến một phiên tác nhân đặc biệt thành một
hiện vật có thể tái tạo, có thể kiểm chứng được. Đó là một nền tảng vững chắc hơn nhiều
để cung cấp thứ gì đó hoạt động đáng tin cậy trong sản xuất hơn là hy vọng
môi trường sẽ ở trong tình trạng phù hợp vào ngày tiếp theo
máy.
Tôi yêu NixOS vì tôi cũng thích những gì Nix mang lại cho tôi khi triển khai. tôi chưa bao giờ là một fan hâm mộ lớn của Docker vì câu trả lời cuối cùng cho câu hỏi "hoạt động trên máy của tôi". Nó giải quyết được những vấn đề quan trọng của ngành, không nghi ngờ gì về điều đó, nhưng tôi luôn thấy mô hình tổng thể ít thỏa mãn hơn là một điều thực sự xác định. Nix mang đến cho tôi điều tốt đẹp hơn nhiều câu chuyện. Tôi có thể sử dụng dockerTools.buildLayeredImage để xây dựng Docker nhỏ hơn hình ảnh theo cách tiếp cận xác định và phân lớp. Nếu tôi có thể xây dựng nó trên một máy tính có cấu hình phù hợp, tôi có thể xây dựng cùng một máy tính tạo tác trên một cái khác miễn là Nix hỗ trợ kiến trúc, mà theo kinh nghiệm của tôi thì rất đáng tin cậy.
Sự mạch lạc đó là một trong những điều tôi đánh giá cao nhất ở NixOS. giống nhau mô hình cơ bản giúp tôi với máy tính xách tay, vỏ của tôi, dự án của tôi các phần phụ thuộc, quy trình CI và thành phần triển khai của tôi. Nó là một cách suy nghĩ về phần mềm thay vì một bộ sưu tập lỏng lẻo các các công cụ và thói quen không liên quan.
Vì vậy, khi tôi nói tôi yêu NixOS, điều tôi thực sự muốn nói là tôi yêu những gì nó đại diện. Tôi yêu một hệ thống có tính khai báo, có thể tái tạo, có thể đảo ngược và ổn định. Tôi thích có thể thử nghiệm mà không sợ hãi và nâng cấp mà không cần kịch tính. Tôi thích nó giúp tôi tập trung vào việc xây dựng và thử nghiệm các công cụ chuyển động nhanh, bao gồm mã hóa LLM đại lý mà không phải lo lắng về việc làm rối tung hệ thống của tôi trong quá trình này.
Tôi yêu NixOS vì nó là sự thể hiện đầy đủ nhất hàng ngày của những gì tôi nghĩ hệ thống phần mềm nên có.
Chú thích cuối trang:
Máy tính xách tay HP EliteBook X G1a 14 inch với RAM 64 GiB và AMD Ryzen AI 9 HX PRO 375.
Ví dụ, nix develop đưa bạn vào một môi trường shell tương tác rất gần với những gì Nix sẽ sử dụng để xây dựng gói hoặc dự án hiện tại.
Một tác nhân chuyển giọng nói thành văn bản mà tôi đã xây dựng trong Rust đã thay thế Whisper và Willow Voice trong quy trình làm việc cá nhân của tôi. Tôi viết nó đầu tiên cho macOS và sau đó chuyển nó sang Linux. Tôi đã và đang sử dụng nó hàng ngày lái xe được vài tháng rồi. Tôi đang xem xét việc mở nguồn nó hoặc phát hành nó dưới dạng một ứng dụng độc lập.
Tác giả: birkey