NixOS는 선언형 설정을 통해 가상 머신(VM)이나 라이브 ISO 이미지를 쉽게 생성할 수 있는 강력한 운영체제입니다. 하지만 기본적으로 생성되는 최소 라이브 ISO 이미지의 크기는 458MiB로, 66MiB에 불과한 Alpine Linux VM ISO에 비해 훨씬 크다는 점이 지적되어 왔습니다. 이 글은 NixOS ISO의 크기를 줄이기 위한 다양한 시도와 그 결과를 상세히 다루며, 최종적으로 183MiB까지 용량을 절감하는 방법을 제시합니다.
ISO 크기의 대부분은 'nix-store.squashfs' 파일이 차지하며, 이 안에는 Python, 리눅스 커널 모듈, systemd, Perl 등 다양한 의존성이 포함되어 있습니다. 초기 458MiB 이미지에서 Nix 자체('nix.enable = false'), 문서('documentation.enable = false'), 그리고 부팅 시 Nix 경로를 등록하는 서비스('register-nix-paths.service')를 제거하여 360MiB까지 줄였습니다. 이어서 OpenSSH 클라이언트, 기본 패키지, GRUB 설치 도구, 런타임 커널 모듈, Perl 기반 활성화 경로까지 제거하는 과정을 거쳐 최종적으로 183MiB까지 크기를 줄이는 데 성공했습니다. 특히 커널 모듈은 전체 크기의 약 4분의 1을 차지하는 큰 비중을 보여, 이를 제거하는 것이 큰 폭의 용량 절감으로 이어졌습니다. Perl 의존성은 '/etc' 관리와 사용자 구성을 실험적인 대체 기능으로 전환하여 제거했습니다.
이러한 최적화는 작은 실험용 부팅 이미지가 필요하거나 특정 목적에 맞춰 최소한의 기능만 요구되는 경우에 매우 유용합니다. 하지만 많은 필수 기능이 제거되므로, 일반적인 데스크톱 환경이나 중요한 서버 환경에 그대로 적용하기는 어렵습니다. 예를 들어, 커널 모듈을 제거하면 디스플레이 해상도 전환과 같은 기본적인 기능이 제한될 수 있습니다. 이번 시도는 NixOS ISO의 잠재적인 최소 크기를 탐색하고, 불필요한 의존성을 제거하는 방법을 보여주었다는 점에서 의미가 있습니다. 향후 'systemdMinimal'과 'systemd' 중 하나를 제거하거나 더 작은 항목들을 걷어내는 등 추가적인 최적화 여지도 남아 있습니다.