- NixOS, dựa trên trình quản lý gói Nix, có cấu trúc cho phép định nghĩa toàn bộ hệ thống bằng mã và khôi phục về trạng thái xác định, có thể tái lập bất cứ lúc nào
- Quản lý mọi cấu hình và gói bằng một tệp cấu hình khai báo duy nhất, nhờ đó có thể dựng lại cùng một môi trường từ một nguồn duy nhất ngay cả trên thiết bị mới
- Hỗ trợ các bản phát hành ổn định theo chu kỳ 6 tháng và cập nhật tự động, đồng thời cho phép thử nghiệm phần mềm mới nhất qua kênh unstable khi cần
- Cung cấp môi trường phát triển cô lập để thử nghiệm nhiều ngôn ngữ và công cụ mà không làm bẩn hệ thống, đồng thời duy trì trải nghiệm phát triển nhất quán giữa macOS và Linux
- Phù hợp với thời đại lập trình cùng LLM, nơi công cụ thay đổi nhanh chóng, và đảm bảo tính nhất quán đến cả khâu triển khai nhờ mô hình build xác định và phân lớp hơn Docker
Triết lý và sức hấp dẫn của NixOS
- Cốt lõi của NixOS không phải là một bản phân phối Linux mà là trình quản lý gói Nix
- NixOS là kết quả của một trình quản lý gói hàm có tính xác định và tái lập, có thể cấu hình toàn bộ hệ điều hành theo Nix DSL đầu vào
- Nó cung cấp cấu trúc cho phép dựng lại hệ thống hoặc chỉ sửa một phần, và nếu không ưng ý thì có thể rollback
- Trong khi phần lớn hệ điều hành trở nên thiếu ổn định theo thời gian, NixOS cho phép định nghĩa trạng thái và build hệ thống
- Ngăn việc tích tụ những trạng thái mơ hồ do cài gói, đổi cấu hình, thêm hoặc xóa công cụ
- Vì hệ thống được định nghĩa bằng mã, có thể tái tạo cùng một kết quả bất cứ lúc nào
Cấu hình khai báo và quản lý từ một nguồn duy nhất
- Trong NixOS, có thể định nghĩa toàn bộ hệ thống — gói, cấu hình, ánh xạ bàn phím, v.v. — bằng một cấu hình khai báo duy nhất
- Có thể mô tả cả những hành vi chi tiết bằng Nix DSL, như ví dụ về cấu hình GNOME extension và ánh xạ bàn phím
- Ngay cả trên máy tính mới cũng có thể dựng lại toàn bộ hệ thống từ một nguồn duy nhất
- Có thể duy trì trạng thái hệ thống nhất quán mà không cần cấu hình thủ công hay quản lý các script rời rạc
Tính ổn định và quản lý cập nhật
- NixOS duy trì các bản phát hành có thể dự đoán theo chu kỳ 6 tháng và hỗ trợ cập nhật tự động
- Giảm thiểu sự thiếu ổn định, thông báo phiền nhiễu và hiện tượng hệ thống bị drift thường gặp khi nâng cấp OS thông thường
- Khi cần, có thể bật kênh unstable để dùng thử phần mềm mới nhất theo hướng thử nghiệm
- Ngay cả trên laptop HP, tính tương thích phần cứng và độ ổn định cũng cao, có thể dùng ngay mà không cần cấu hình bổ sung
Thử nghiệm và cô lập môi trường phát triển
- NixOS cung cấp môi trường thử nghiệm an toàn với chi phí thấp
- Có thể chạy gói trong môi trường shell cô lập thay vì cài trực tiếp vào hệ thống
- Dùng Nix DSL để khai báo dependency, các bước build và đầu ra, từ đó duy trì môi trường phát triển không bị ô nhiễm
- Có thể dùng cùng một trình quản lý gói Nix trên cả macOS và Linux, nhờ đó đảm bảo tính nhất quán trong quản lý công cụ phát triển và dependency
- Cũng có hỗ trợ từ cộng đồng cho FreeBSD
Sự phù hợp với thời đại lập trình bằng LLM
- Các công cụ lập trình dựa trên LLM thường phải thay đổi phiên bản cụ thể của utility, compiler và runtime rất thường xuyên
- Nix đáp ứng nhu cầu này bằng cách coi công cụ là đầu vào khai báo và chạy chúng trong môi trường cô lập
- Ví dụ, khi build một tác tử chuyển giọng nói thành văn bản bằng Rust, Nix sẽ tự động nạp toolchain Rust và dựng môi trường build cô lập
- Không làm thay đổi môi trường hệ thống (
~/.cargo, ~/.rustup, PATH, v.v.)
- Thông qua
flake.nix và nix flake check, có thể cố định môi trường thử nghiệm của tác tử thành một artifact có thể tái lập
- Biến các phiên tạm thời thành đơn vị build có thể kiểm chứng
Triển khai và mô hình phát triển nhất quán
- Nix cung cấp cách build image mang tính xác định và phân lớp hơn Docker
- Có thể dùng
dockerTools.buildLayeredImage để tạo image Docker nhỏ gọn và có thể tái lập
- Có thể build cùng một kết quả trên các kiến trúc khác nhau với cùng một cấu hình
- Cùng một mô hình được áp dụng nhất quán cho laptop, shell, dependency của dự án, pipeline CI và artifact triển khai
- Thay vì ghép nhiều công cụ với nhau, có thể quản lý toàn bộ hệ thống phần mềm bằng một cách tư duy duy nhất
Kết luận
- NixOS là hiện thân của một hệ thống khai báo, có thể tái lập, có thể hoàn tác và ổn định
- Có thể thử nghiệm và nâng cấp mà không sợ hãi, đồng thời không làm bẩn hệ thống ngay cả trong môi trường công cụ thay đổi nhanh
- Ngay cả trong những luồng phát triển hiện đại như tác tử lập trình LLM, nó vẫn mang lại đồng thời sự ổn định và linh hoạt
- NixOS là hình thức hiện thực hóa triết lý này một cách trọn vẹn nhất trong đời sống hằng ngày
5 bình luận
Trước đây tôi cũng từng dùng NixOS khoảng nửa năm rồi, nhưng có một việc rất đơn giản mà trên các OS khác thậm chí chẳng cần phải đi tìm riêng, vậy mà tôi có Google thế nào cũng không giải quyết được. Rồi tôi thấy trên kiểu như diễn đàn NixOS có một giải pháp mà một chuyên gia NixOS nào đó? đã ghi lại, và khi nhìn thấy cái giải pháp hacky dài mấy chục dòng đó lại là thứ nhận được nhiều like nhất, tôi cảm thấy cuộc sống với NixOS về sau thật mịt mù nên đã quay lại Arch...
Và tôi không nhớ rõ lắm, hình như là
flakehay tính năng gì đó mà có chỗ thì gọi là best practice, có chỗ thì gọi là experimental, có chỗ thì lại nói là cả hai, và nhìn cảnh đó kéo dài suốt nhiều năm thì thấy ngay là con đường phía trước sẽ rất vất vả..Tất nhiên, trải nghiệm có thể dễ dàng mã hóa toàn bộ môi trường desktop vẫn rất thú vị
Firebase Studio cũng sử dụng Nix.
Đường cong học tập cực kỳ dốc. Đổi lại việc đảm bảo tính tái lập thì nó đòi hỏi trình độ cao.
Dùng
flakerồi mà vẫn khá kén người dùng.Ngoài ra có vẻ bên trong nó dùng sqlite, mà cái này thì hiệu năng lại lên xuống thất thường, nên thời gian cần để tái tạo lại môi trường một lần cũng dao động khá nhiều.
Ý kiến trên Hacker News
Tôi nghĩ NixOS gần như vô đối về độ hợp với các công cụ AI
Trên các OS khác, rất khó giao cấu hình hệ thống cho AI, nhưng NixOS thì đáng tin nhờ tính khai báo và khả năng rollback
Tôi sẽ không giao cho Claude hay Codex việc chuyển từ Pulseaudio sang Pipewire hay cài Hyprland, nhưng với NixOS thì tôi còn đủ tự tin để giao cả cho Grok
Điểm cốt lõi là sự ổn định: có thể xem trước thay đổi và hoàn tác bất cứ lúc nào
Nếu là lập trình viên, tôi khuyên bạn nên thử NixOS với giấc mơ về một “desktop Linux do AI quản lý”. Chỉ cần bắt đầu bằng cách nói với Claude: “hãy tạo cho tôi một cấu hình Gnome dựa trên Flake có thể demo trong VM”
Thấy Claude điều chỉnh cấu hình dconf của GNOME theo kiểu khai báo thật sự rất ấn tượng
Tuy vậy, đôi khi AI vẫn cho ra kết quả lạc quẻ vì không hiểu được bối cảnh phức tạp của hệ sinh thái Nix
Tôi cảm nhận rõ rằng cấu trúc lambda phi định hình của Nix và phạm vi ngầm giữa các module không chỉ khó với con người mà cả với AI
Vì vậy, việc định nghĩa rõ cấu trúc và pattern của dự án là rất quan trọng. Dù vậy, quá trình tạo template dựa trên Nix vẫn vui và năng suất cao
Có nhất thiết phải dùng LLM để cài Hyprland không? Chỉ cần
sudo dnf install hyprlandlà đủCó cảm giác không phải Nix “thân thiện với AI”, mà là vì con người tự xử nó quá phiền nên mới phải nhờ LLM
Tôi quản lý cấu hình của nhiều máy theo “business profile”, rồi tự động triển khai repo và cấu hình cần thiết cho từng máy
Một đồng nghiệp ở công ty vốn là người dùng Windows, giờ đã dùng NixOS hằng ngày
Toàn bộ cấu hình phần cứng cũng đang được quản lý theo kiểu khai báo, và cấu hình của tôi có ở kho lưu trữ công khai trên GitHub. Rất mong nhận được góp ý
Khi chuyển cấu hình sang cấu trúc mới hoặc tạo nhiều môi trường thử nghiệm WM/DE, Claude xử lý gần hết phần việc lặp đi lặp lại
Giờ hệ thống của tôi đã hoàn toàn ổn định nên hầu như chẳng còn gì phải làm thủ công
Ở các OS khác rất khó có được mức độ tin tưởng như vậy
Thay vào đó, tôi quản lý môi trường phát triển bằng script Docker, nhưng giờ tôi thấy Nix và AI cực kỳ hợp nhau
Có lẽ sắp tới sẽ có thêm nhiều phần mềm được tạo ra để AI xử lý dễ dàng hơn
Tôi đã dùng Windows suốt 30 năm, rồi chuyển hẳn sang Nix từ 1 năm trước
Giờ tôi hoàn toàn không muốn quay lại Windows nữa
Tôi cực kỳ thích việc toàn bộ cấu hình OS nằm trong một repo Git
Phát triển mà không có Nix cũng kém hiệu quả như viết code mà không có Git
Chỉ cần cấu hình một lần, việc thiết lập máy mới sau đó sẽ rất đơn giản
Tôi muốn mỗi ứng dụng chạy trong môi trường riêng mà không ảnh hưởng tới toàn bộ hệ thống
Tôi nghĩ NixOS là một trong những con đường dẫn tới tương lai đó
GPU Nvidia cũng hoạt động tốt, và ổn định hơn Gamescope rất nhiều
Tôi muốn thích NixOS hơn nữa, nhưng vấn đề lớn nhất là thiếu tài liệu
Thông tin bị phân tán ở nhiều diễn đàn, blog cũ và issue khác nhau
Cả hai đều được cập nhật, nhưng mỗi lần tìm kiếm lại ra kết quả khác nhau về cái nào mới hơn
Clone nixpkgs về và tự đọc là nhanh nhất
Tôi đã thử dùng NixOS làm OS cho laptop, và thấy ưu nhược điểm rất rõ
Cấu hình khai báo và tính năng snapshot là bước tiến lớn, nhưng khái niệm phân biệt package/service và Flake lại khá rối
Khi cài KDE thì chỉ có cấu hình tối thiểu được cài, nên phải thiết lập thêm, mà tài liệu lại khác nhau theo từng phiên bản nên rất khó làm theo
Cuối cùng tôi bỏ cuộc vì cần một chiếc máy ổn định, nhưng với quản trị viên hệ thống thì đây có vẻ là lựa chọn tuyệt vời
Trình cài đặt của Determinate Systems bật Flake theo mặc định
Bạn có thể chuyển cấu hình trong
/etc/nixossang repo Git, rồi dùng lệnhnixos-install --flake <repo>để triển khai cấu hình hoàn chỉnhNếu dùng thêm Home-manager thì còn có thể quản lý thư mục người dùng theo kiểu khai báo
Các file trong
/etccó thể quản bằngenvironment.etc, còn file.configthì dùng các tùy chọn của home-managerLink liên quan: tùy chọn environment.etc, tùy chọn home-manager
mkOutOfStoreSymlinkvà bật cười khi nhận được câu trả lời kiểu “đơn giản nên không cần tài liệu”Dù vậy, ưu điểm của NixOS quá lớn nên tôi đang chuyển toàn bộ theo thứ tự homelab → laptop → desktop
Tuy nhiên, tình hình tài liệu vẫn tuyệt vọng như cũ
Tức là nó đảm nhiệm vai trò của package.json và file lock ở cấp độ Nix
Tôi đã thích NixOS từ lâu, nhưng từ thời đại LLM thì còn thích hơn
Chỉ cần bảo Codex: “hãy sửa cấu hình server này để wildcard certificate hoạt động”, là 5 phút sau xong luôn
Đây là lần đầu tiên quản trị server có thể tái lập trở nên dễ dàng đến vậy
Sau khi chuyển sang NixOS, thời dùng apt hay brew để quản lý giờ giống như công nghệ thời đồ đá
Nó cũng phối hợp rất tốt với các công cụ AI như Copilot
Muốn xử lý vấn đề phải hiểu sâu hơn Linux thông thường
Bù lại, đây là kiểu dồn toàn bộ độ phức tạp trả trước một lần
Việc cài tạm bằng nix-shell, hay có thể xem toàn bộ package đã cài chỉ qua một file cấu hình, là thứ tuyệt nhất
Nhờ snapshot tự động, tôi không còn sợ thử nghiệm nữa. Nếu có gì sai, chỉ cần boot vào thế hệ trước là xong
Trước đây tôi rất ngại sửa kernel parameter, giờ thì có thể thoải mái thử
Vì thích Lisp nên tôi cũng từng cân nhắc Guix System, nhưng về tính thực dụng thì NixOS tốt hơn
Giá mà NixOS không có cấu trúc filesystem kỳ lạ đó thì tốt biết mấy
Đó là cách tiếp cận để giải quyết việc dùng nhiều phiên bản Python cùng lúc, nhưng với tôi thì không cần thiết
Tôi chỉ muốn giữ cùng một cấu hình trên mọi máy
Hiện tôi đang thử nghiệm image Fedora bootc và Podman, nhưng thiếu khả năng áp dụng ngay kiểu
nixos-rebuild switchnên khá bất tiệnRốt cuộc đây là sự đánh đổi giữa Nix dễ thử nghiệm và Fedora với filesystem chuẩn
Điểm mạnh lớn nhất của NixOS là khả năng tái lập mang tính quyết định của cache CI
Không cần build lại package mỗi lần, và việc thiết lập môi trường phát triển cũng rất đơn giản
Ví dụ, Tangled đã xây toàn bộ hệ thống CI bằng Nix, và giải quyết triệt để vấn đề cache của GitHub Actions
Tôi không dùng cho toàn hệ thống, nhưng rất thích devenv.sh
Nó giúp cấu hình môi trường phát triển đơn giản hơn nhiều so với container cục bộ
Thật tiếc là không có cách đơn giản kiểu
.tool-versionscủa asdf để đồng bộ versionBên Nix thường nói “đó là cách tiếp cận sai”, nhưng tôi vẫn muốn ghim từng phiên bản riêng lẻ
pkgs.mkShellcũng có thể tạo ra môi trường tương tự, nên tôi muốn biết vì sao lại cần dùng devenvTôi cũng thích NixOS, nhưng Guix còn hợp gu hơn
Tôi thấy ngôn ngữ Guile quen thuộc hơn, tài liệu cũng tốt hơn. Theo tôi thì hai hệ thống này là chị em với nhau
Điểm mạnh lớn là dùng một ngôn ngữ lập trình thực thụ (Scheme)
Nó có nền tảng mạnh hơn hẳn so với một ngôn ngữ cấu hình đơn thuần