Khi nhắc đến Windows Subsystem for Linux (WSL), phần lớn người dùng sẽ nghĩ ngay đến Ubuntu hoặc Fedora – và điều này hoàn toàn có lý do. Các bản phân phối này có đường cong học tập gần như bằng không, dù bạn đã quen thuộc với Linux hay chưa. Hơn nữa, chúng có đủ tài liệu và sự hỗ trợ cộng đồng để giúp bạn vượt qua mọi vấn đề. Tuy nhiên, nếu bạn là người thích thử nghiệm các Linux distro khác nhau, bạn nên cân nhắc NixOS trong WSL. Nếu bạn ưu tiên một không gian làm việc có khả năng tái tạo, khai báo (declarative) hơn là gắn bó với quy trình apt
hoặc dnf
quen thuộc, thì NixOS chính là lựa chọn dành cho bạn. NixOS biến WSL thành một môi trường mà bạn có thể xây dựng lại, nhân bản và khôi phục về trạng thái trước đó chỉ bằng một lệnh duy nhất, nhưng vẫn cung cấp đầy đủ các tính năng GUI, GPU và USB mà Ubuntu hay Fedora có được dưới WSL hiện đại.
Giao diện NixOS chạy trên laptop Windows thông qua WSL
1. Phương Pháp Khai Báo (Declarative Approach) và Tính Đồng Nhất Đa Nền Tảng
Mọi khía cạnh của một cài đặt NixOS đều được khai báo bên trong một tệp văn bản duy nhất, thường là configuration.nix
(hoặc một flake.nix
nhập nó). Khi bạn chạy lệnh nixos-rebuild switch
, hệ điều hành sẽ được xây dựng trực tiếp từ nội dung của tệp đó. Không có phần nào của hệ thống bị ẩn trong lịch sử tương tác hoặc các lệnh cài đặt gói bị quên.
Cách tiếp cận này mang lại nhiều lợi thế đáng kể. Một trong số đó là khả năng tái tạo. Bạn có thể cài đặt lại NixOS trên một PC khác hoặc trong CI (Continuous Integration) và nhận được một thiết lập byte-identical (giống hệt từng byte). Lịch sử Git sẽ cho bạn biết khi nào một gói được thêm vào, ai đã thêm nó và tại sao. Nếu bạn mất hình ảnh máy ảo, bạn vẫn có thể giữ lại kho lưu trữ, tạo lại hệ thống chỉ với một lệnh và vài phút tải xuống. Cùng một flake có thể nhắm mục tiêu WSL, một máy chủ bare-metal, một máy ảo đám mây hoặc macOS thông qua nix-darwin
.
Có lẽ lý do thuyết phục nhất đối với nhiều người là cách NixOS trong WSL giúp thống nhất môi trường phát triển trên mọi nền tảng. Bạn có thể chạy NixOS trên một máy chủ Linux không đầu (headless) cho các triển khai, và cũng có thể sử dụng Nix thông qua Home Manager và nix-darwin
trên máy Mac. Bằng cách sử dụng NixOS trong WSL trên máy Windows, thiết lập phát triển trên Windows, máy chủ Linux và laptop macOS của bạn đều có thể duy trì đồng bộ với các phiên bản phần mềm chính xác như nhau.
2. Cập Nhật Nguyên Tử (Atomic Updates) và Khả Năng Khôi Phục Dễ Dàng
Quá trình nâng cấp trong NixOS giúp cuộc sống trở nên dễ dàng hơn nhiều. Khi bạn điều chỉnh cấu hình và chạy nixos-rebuild switch
, Nix sẽ xây dựng trạng thái hệ thống mới trong nền. Nó chỉ chuyển đổi khi mọi thứ đã sẵn sàng, vì vậy không có các bản cập nhật một phần gây hỏng hóc thiết lập của bạn. Nếu một bản nâng cấp gây ra lỗi, như lỗi trình điều khiển, bạn có thể dễ dàng khởi động lại vào một thế hệ trước đó để khắc phục.
Ảnh chụp màn hình console NixOS hiển thị các thế hệ hệ thống để dễ dàng rollback
Ngay cả trong WSL, NixOS vẫn giữ một lịch sử đầy đủ các trạng thái hệ thống của bạn. Mỗi lần xây dựng lại đều được đánh số phiên bản, cho phép bạn dễ dàng quay lại mà không cần gỡ lỗi hoặc cài đặt lại bất cứ thứ gì. Đây là điều mà bạn không nhận được một cách tự nhiên với apt
hoặc dnf
trong các bản phân phối WSL thông thường.
3. Môi Trường Phát Triển Độc Lập Theo Dự Án với nix develop
Một tính năng nổi bật khác là cách NixOS và bộ công cụ Nix xử lý môi trường phát triển. Nếu bạn thường xuyên làm việc trên nhiều dự án với các phụ thuộc xung đột, chẳng hạn như các phiên bản Node hoặc thư viện Python khác nhau, bạn không cần phải quản lý nhiều Docker container hoặc làm lộn xộn hệ thống cơ bản của mình. Thay vào đó, bạn có thể sử dụng các shell phát triển độc lập theo dự án của Nix.
Công cụ Nix shell cho phép bạn tạo ra một môi trường với chính xác các công cụ cần thiết cho dự án đó. Không có gì tồn tại vĩnh viễn sau khi bạn thoát khỏi shell. Đây là một sự thay đổi lớn so với cách mọi thứ thường hoạt động trên Ubuntu hoặc Fedora, nơi bạn thường phải cài đặt và gỡ cài đặt các gói, hoặc dựa vào các công cụ như virtualenv
và nvm
để mô phỏng sự cô lập.
4. Tích Hợp Mượt Mà Với WSL và Windows
Không có ý nghĩa gì khi sử dụng Linux trên WSL nếu nó không tích hợp tốt với Windows. NixOS trong WSL hoạt động tốt với tất cả các tính năng chính của WSL2. Phiên bản NixOS-WSL mới nhất thậm chí còn bao gồm hỗ trợ gốc cho systemd
tích hợp sẵn của WSL, điều này có nghĩa là bạn có thể chạy các dịch vụ Linux nền trong WSL mà không cần bất kỳ thủ thuật nào.
Trước đây, việc thiếu PID 1 và systemd
trong WSL là một hạn chế lớn. Nhưng giờ đây, phiên bản NixOS WSL khởi động với systemd
giống như một hệ thống Linux thông thường. Điều này cho phép các tính năng như hẹn giờ (timers), dịch vụ kích hoạt socket (socket-activated services) và nhiều hơn nữa, tất cả đều hiện được hỗ trợ bởi Ubuntu và Fedora trên WSL.
Màn hình terminal của NixOS hiển thị việc sử dụng kho gói nixpkgs trong môi trường WSL
Tích hợp phần cứng và giao diện người dùng cũng mượt mà không kém. Nếu bạn cần tăng tốc GPU cho các ứng dụng Linux, NixOS WSL bao gồm một tùy chọn để sử dụng trình điều khiển đồ họa OpenGL của máy chủ Windows, cho phép các ứng dụng GUI Linux tận dụng GPU.
Ngoài ra, nếu bạn muốn truy cập các tệp NixOS của mình thông qua một ứng dụng Windows, chỉ cần trỏ đến đường dẫn tệp:
\wsl.localhostNixOS
Ví dụ, bạn có thể muốn sử dụng VS Code ở phía Windows của hệ thống. Để trỏ đến mã đang nằm ở phía NixOS, bạn sẽ trỏ VS Code đến:
\wsl.localhostNixOShomeanuragGitmy-repo-name
NixOS là một bản phân phối Linux đầy thú vị và hữu ích. Nó được trang bị các tính năng thực sự có giá trị, và là một trong số ít hệ điều hành có thể giúp bạn xây dựng một phòng lab cá nhân (home lab) thực sự bất biến.
Kết luận
NixOS trong WSL mang đến một phương pháp tiếp cận hoàn toàn mới và mạnh mẽ cho việc quản lý môi trường Linux trên Windows. Với khả năng khai báo cấu hình, cập nhật nguyên tử an toàn, môi trường phát triển độc lập linh hoạt và tích hợp mượt mà với Windows, NixOS không chỉ giải quyết các vấn đề phổ biến mà còn nâng cao đáng kể trải nghiệm làm việc của bạn. Đây là một lựa chọn đáng để khám phá cho bất kỳ nhà phát triển hoặc người đam mê công nghệ nào muốn tối ưu hóa quy trình làm việc và đảm bảo tính nhất quán của hệ thống.
Bạn đã từng thử NixOS trong WSL chưa? Hãy chia sẻ trải nghiệm và ý kiến của bạn trong phần bình luận bên dưới nhé!