Khi nhắc đến Windows Subsystem for Linux (WSL), hầu hết người dùng đều nghĩ ngay đến Ubuntu hay Fedora. Điều này dễ hiểu bởi hai bản phân phối này có đường cong học tập gần như bằng không và sở hữu cộng đồng hỗ trợ lớn mạnh. Tuy nhiên, với vai trò là một chuyên gia công nghệ, tôi luôn khuyến khích việc thử nghiệm các bản phân phối Linux khác nhau để tìm ra môi trường làm việc hiệu quả nhất. Trong đó, NixOS trên WSL là một lựa chọn đáng để cân nhắc, đặc biệt nếu bạn ưu tiên một không gian làm việc có tính tái tạo (reproducible), khai báo (declarative) hơn là chỉ gắn bó với các quy trình apt
hoặc dnf
quen thuộc.
NixOS biến WSL thành một môi trường mà bạn có thể dễ dàng xây dựng lại, nhân bản và khôi phục về trạng thái trước đó chỉ với một lệnh duy nhất. Điều tuyệt vời là nó vẫn cung cấp đầy đủ các tính năng GUI, GPU và USB tương tự như Ubuntu và Fedora dưới WSL hiện đại, mang lại trải nghiệm làm việc mạnh mẽ và linh hoạt trên hệ điều hành Windows.
1. Cách Tiếp Cận Khai Báo và Tính Đồng Bộ Đa Nền Tảng
Khả Năng Tái Tạo và Quản Lý Phiên Bản Vượt Trội
Điểm cốt lõi của NixOS nằm ở phương pháp tiếp cận khai báo. Mọi khía cạnh của một cài đặt NixOS đều được định nghĩa rõ ràng trong một tệp văn bản duy nhất, thường là configuration.nix
(hoặc flake.nix
nếu bạn sử dụng Nix Flakes). Khi bạn thực thi lệnh nixos-rebuild switch
, toàn bộ hệ điều hành sẽ được xây dựng trực tiếp từ nội dung của tệp này. Điều này có nghĩa là không có phần nào của hệ thống bị ẩn trong lịch sử lệnh tương tác hay các gói được cài đặt một cách ngẫu nhiên.
Cách tiếp cận này mang lại vô số lợi ích. Đầu tiên là khả năng tái tạo (reproducibility) cao. Bạn có thể cài đặt lại NixOS trên một máy tính khác hoặc trong môi trường CI/CD và bạn sẽ nhận được một thiết lập giống hệt đến từng byte. Lịch sử Git sẽ hiển thị rõ ràng khi một gói được thêm vào, ai đã thêm nó và lý do. Hơn nữa, 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ữ cấu hình, sau đó tái tạo lại toàn bộ hệ thống chỉ bằng một lệnh và vài phút tải xuống.
Có lẽ lý do thuyết phục nhất đối với tôi là cách NixOS trong WSL giúp thống nhất các 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 giao diện (headless) cho các triển khai, đồng thời 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, môi trường phát triển Windows, máy chủ Linux và máy tính xách tay macOS của bạn đều có thể đồng bộ với cùng một phiên bản phần mềm, đảm bảo tính nhất quán tối đa.
2. Cập Nhật Nguyên Tử và Khả Năng Khôi Phục Dễ Dàng
Không Lo Lỗi Vặt, Quay Về Bản Cũ Chỉ Trong Tích Tắc
Quy trình nâng cấp trong NixOS giúp cuộc sống của developer trở nên dễ dàng hơn rất 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 sang trạng thái mới khi mọi thứ đã sẵn sàng, do đó không có các bản cập nhật một phần có thể khiến thiết lập của bạn bị hỏng. Nếu một bản nâng cấp gây ra lỗi, chẳng hạn như lỗi driver, bạn có thể dễ dàng khởi động lại vào một thế hệ (generation) trước đó để khắc phục vấn đề.
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 phải gỡ lỗi hay cài đặt lại bất cứ thứ gì. Đây là điều mà bạn không thể có đượ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.
Màn hình console NixOS minh họa khả năng quay về các phiên bản hệ thống trước đó sau khi cập nhật.
3. Môi Trường Phát Triển Riêng Cho Từng Dự Án Với nix develop
Tạm Biệt Docker Containers và Xung Đột Dependency
Một tính năng nổi bật khác là cách NixOS và bộ công cụ Nix xử lý các 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 có các dependency xung đột, chẳng hạn như các phiên bản Node.js khác nhau hoặc thư viện Python riêng biệt, bạn không cần phải sử dụng Docker containers hay làm lộn xộn hệ thống cơ sở của mình. Thay vào đó, bạn có thể sử dụng các shell phát triển theo từng dự án của Nix.
Bộ công cụ shell của Nix 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ỡ bỏ 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 Windows Subsystem for Linux (WSL)
Trải Nghiệm WSL2 Đầy Đủ Tính Năng
Sẽ 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 hoàn hảo 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à tôi có thể chạy các dịch vụ nền Linux 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 của tôi 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 qua socket (socket-activated services) và nhiều hơn nữa, tất cả đều hiện được Ubuntu và Fedora trên WSL hỗ trợ.
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 của 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 của:
\wsl.localhostNixOS
Ví dụ, tôi có thể muốn sử dụng VS Code ở phía Windows của hệ thống. Để trỏ đến mã nguồn đang lưu trữ trên phía NixOS, tôi sẽ trỏ VS Code đến:
\wsl.localhostNixOShomeanuragGitmy-repo-name
Giao diện người dùng minh họa việc sử dụng kho lưu trữ Nixpkgs trên NixOS, thể hiện khả năng tích hợp mượt mà với WSL.
Tạm Kết
NixOS thực sự là một bản phân phối Linux thú vị và mạnh mẽ, mang lại nhiều tính năng hữu ích cho cộng đồng developer. Khả năng tái tạo môi trường, hệ thống cập nhật nguyên tử, và môi trường phát triển độc lập theo dự án là những lợi thế lớn, giúp đơn giản hóa quy trình làm việc và tăng cường sự ổn định. Khi chạy trên WSL, NixOS còn phát huy tối đa tiềm năng của WSL2 với khả năng tích hợp systemd
và GPU mượt mà, biến nó thành một công cụ lý tưởng cho những ai muốn có một môi trường phát triển đồng nhất và đáng tin cậy trên Windows.
Nếu bạn là một developer đang tìm kiếm giải pháp tối ưu cho không gian làm việc của mình trên Windows, hãy thử NixOS trên WSL. Bạn sẽ khám phá ra một cách tiếp cận hoàn toàn mới, khai phá tiềm năng vượt trội trong việc quản lý hệ thống và môi trường phát triển. Hãy chia sẻ trải nghiệm của bạn với NixOS trên WSL trong phần bình luận bên dưới nhé!