12 điểm bởi GN⁺ 29 ngày trước | 5 bình luận | Chia sẻ qua WhatsApp
  • 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.nixnix 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à flake hay 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.

 
ytuniverse 29 ngày trước

Đườ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 flake rồ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”

    • Tôi đã dùng NixOS được 3 năm, và Claude hơn 1 năm. Sự kết hợp của hai thứ này thực sự lý tưởng
      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
    • Nói thật thì cái này trông giống một giải pháp kỹ thuật quá mức cho một vấn đề vốn không tồn tại
      Có nhất thiết phải dùng LLM để cài Hyprland không? Chỉ cần sudo dnf install hyprland là đủ
      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 cũng có trải nghiệm tương tự. Trước đây tôi từng đăng bài trên HN với tên “ClaudeOS”, nhưng thực ra đó là tổ hợp NixOS + Flakes + Claude Code
      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 ý
    • Tôi cũng từng để Claude xử lý các vấn đề cấu hình NixOS, và nó hoạt động cực tốt
      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
    • Trước đây Nix trông quá khó hiểu nên tôi đã chờ đến khi AI tiến bộ hơn
      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 tò mò không biết có dự án nào cho phép dễ dàng tạo container cô lập dựa trên cấu hình NixOS của tôi không
      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 đó
    • Có lúc tôi định quay lại Fedora Bazzite, nhưng cuối cùng vẫn ở lại NixOS vì có thể triển khai HDR trên Sway ổn định hơn
      GPU Nvidia cũng hoạt động tốt, và ổn định hơn Gamescope rất nhiều
    • Tôi muốn xem ví dụ về cách dùng nix-shell để chạy nhanh script Python. Tôi vẫn đang học cách Python và NixOS tương tác với nhau
  • 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

    • Thêm vào đó còn có hai wiki chính thức (nixos.wiki, wiki.nixos.org), rất dễ gây nhầm lẫn
      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
    • Trước đây tôi cũng phàn nàn về việc thiếu tài liệu, nhưng giờ tôi nghĩ chính source code mới là tài liệu
      Clone nixpkgs về và tự đọc là nhanh nhất
    • ChatGPT khá hữu ích trong việc gom nhiều nguồn lại và tạo ra ví dụ code chạy được
    • Thực ra nhiều người dùng không đọc tài liệu, mà giao luôn cho Claude Code viết mã Nix
  • 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

    • Ban đầu tôi cũng thấy Flake khó, nhưng thực ra đây là cách làm trực quan nhất
      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/nixos sang repo Git, rồi dùng lệnh nixos-install --flake <repo> để triển khai cấu hình hoàn chỉnh
      Nế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 /etc có thể quản bằng environment.etc, còn file .config thì dùng các tùy chọn của home-manager
      Link liên quan: tùy chọn environment.etc, tùy chọn home-manager
    • Tôi từng tìm tài liệu về mkOutOfStoreSymlink và 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ũ
    • Flake có hai vai trò:
      1. khai báo input và output của codebase
      2. ghim (pinning) phiên bản của nguồn input
        Tức là nó đảm nhiệm vai trò của package.json và file lock ở cấp độ Nix
    • Tôi thấy lạ là đến giờ vẫn chưa ai dùng LLM để cải thiện tài liệu
  • 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

    • NixOS tuyệt vời 95%, nhưng 5% còn lại thì cực kỳ đau đớn
      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
    • Tôi đã dùng nhiều bản Linux suốt 20 năm, nhưng NixOS là lần đầu tiên khiến tôi thấy “đây mới là đáp án đúng”
      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 switch nên khá bất tiện
    Rốt cuộc đây là sự đánh đổi giữa Nix dễ thử nghiệmFedora 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

    • Dùng Nix trong CI thật sự là một cặp bài trùng
      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ộ

    • Tuy nhiên, cách ghim phiên bản (pinning) không thật sự rõ ràng
      Thật tiếc là không có cách đơn giản kiểu .tool-versions của asdf để đồng bộ version
      Bê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ẻ
    • Tôi tò mò không biết nó khác gì so với home-manager
    • Chỉ với pkgs.mkShell cũ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 devenv
  • Tô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

    • Tôi nghĩ Guix xứng đáng được yêu mến nhiều hơn
      Đ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