# 자주 묻는 질문

## Nix라는 이름은 어디에서 유래했습니까?

> *Nix*라는 이름은 *아무것도 없음*을 뜻하는 네덜란드어 *niks*에서 유래했습니다. 빌드 작업은 입력으로 명시적으로 선언되지 않은 것은 아무것도 볼 수 없습니다.
>
> — <cite>[Nix: A Safe and Policy-Free System for Software Deployment](https://edolstra.github.io/pubs/nspfssd-lisa2004-final.pdf), LISA XVIII, 2004</cite>

Nix 로고는 [Haskell 로고에 대한 한 아이디어](https://wiki.haskell.org/File:Sgf-logo-blue.png)와 [*nix*가 라틴어로 *눈*이라는 사실](https://nix-dev.science.uu.narkive.com/VDaaP1BY/nix-logo)에서 영감을 받았습니다.

## 플레이크란 무엇입니까?

[](flakes-definition)를 참고하십시오.

(channel-branches)=
## 어떤 채널 브랜치를 사용해야 합니까?

Nixpkgs와 NixOS에는 안정 릴리스와 롤링 릴리스가 모두 있습니다.

이러한 릴리스는 "채널 브랜치"라는 변형으로 배포됩니다. 채널 브랜치는 릴리스에 사용되는 Git 브랜치이며, Nix 채널로도 변환됩니다.

:::{tip}
채널에 대한 자세한 내용은 Nix 참조 매뉴얼의 [`nix-channel`](https://nix.dev/manual/nix/2.22/command-ref/nix-channel) 항목을, Nixpkgs 브랜치 전략에 대해서는 [Nixpkgs 기여 가이드](https://github.com/NixOS/nixpkgs/blob/master/CONTRIBUTING.md#branch-conventions)를 참고하십시오.
:::

### 안정

안정 릴리스는 버그나 보안 취약점을 수정하기 위한 보수적인 업데이트만 받으며, 그 외에는 패키지 버전이 변경되지 않습니다. 새로운 안정 릴리스는 6개월마다 나옵니다.

- Linux(NixOS 및 WSL 포함)에서는 [`nixos-*`](https://github.com/NixOS/nixpkgs/branches/all?query=nixos-)를 사용하십시오.

  이 브랜치들은 대부분의 Linux 패키지가 미리 빌드되어 바이너리 캐시에서 가져올 수 있는 커밋을 가리킵니다. 또한 이 커밋들은 NixOS 테스트 스위트 전체를 통과했습니다.

- macOS/Darwin에서는 [`nixpkgs-*-darwin`](https://github.com/NixOS/nixpkgs/branches/all?query=nixpkgs-)을 사용하십시오.

  이 브랜치들은 대부분의 Darwin 패키지가 미리 빌드되어 바이너리 캐시에서 가져올 수 있는 커밋을 가리킵니다.

- 그 밖의 플랫폼에서는 위의 브랜치 중 어느 것을 사용하든 상관없습니다.

  Hydra는 다른 플랫폼용 바이너리를 미리 빌드하지 않습니다.

이 "채널 브랜치"들은 모두 대응하는 [`release-*`](https://github.com/NixOS/nixpkgs/branches/all?query=release-) 브랜치를 따릅니다.

:::{admonition} 예시
`nixos-23.05`와 `nixpkgs-23.05-darwin`은 모두 `release-23.05`를 기반으로 합니다.
:::

### 롤링

롤링 릴리스는 주 개발 브랜치인 [`master`](https://github.com/NixOS/nixpkgs/branches/all?query=master)를 따릅니다.

- Linux(NixOS 및 WSL 포함)에서는 [`nixos-unstable`](https://github.com/NixOS/nixpkgs/branches/all?query=nixos-unstable)을 사용하십시오.
- 그 밖의 플랫폼에서는 [`nixpkgs-unstable`](https://github.com/NixOS/nixpkgs/branches/all?query=nixpkgs-unstable)을 사용하십시오.

[`*-small`](https://github.com/NixOS/nixpkgs/branches/all?query=-small) 채널 브랜치는 더 작은 테스트 스위트를 통과한 브랜치입니다. 따라서 기반 브랜치의 최신 상태를 더 가깝게 따르지만, 안정성은 덜 보장됩니다.

## 샌드박스 빌드에도 아직 비순수성이 남아 있습니까?

예, 있습니다. 다음과 같습니다.

- CPU 아키텍처 — 네이티브 명령어를 컴파일하지 않고 하드코딩된 지원 명령어를 사용하도록 많은 노력을 기울이고 있습니다.
- 시스템의 현재 시각/날짜.
- 빌드에 사용되는 파일 시스템([`TMPDIR`](https://nix.dev/manual/nix/stable/command-ref/env-common.html#env-TMPDIR)도 참고하십시오).
- 다음과 같은 Linux 커널 매개변수:
  - [IPv6 기능](https://github.com/NixOS/nix/issues/5615).
  - binfmt 인터프리터(예: [`boot.binfmt.emulatedSystems`](https://search.nixos.org/options?show=boot.binfmt.emulatedSystems)로 설정된 인터프리터).
- 빌드 시스템의 타이밍 동작 — 병렬 Make 빌드는 경우에 따라 올바른 입력을 받지 못할 수 있습니다.
- 무작위 값의 삽입(예: `/dev/random` 또는 `/dev/urandom`에서 가져온 값).
- Nix 버전 간의 차이. 예를 들어 새 Nix 버전에서 새로운 환경 변수가 도입될 수 있습니다. Nix는 `env > $out`과 같은 구문이 앞으로도 동일한 출력을 낼 것이라고 보장하지 않습니다.
