๋ฌธ์
Nix๋ ์ค๊ณ ์ฒ ํ์ Nix ์ธ์ด(์์ ํจ์ํ ํ๊ฐ ์ธ์ด)์ Nix store(์ฝํ
์ธ ์ฃผ์ ๊ธฐ๋ฐ ์ ์ฅ์)๊ฐ ๋ณ๋์ ๋ ์ด์ด๋ก ๋ถ๋ฆฌ๋์ด ์๋ค. ๊ทธ๋ฌ๋ ํ์ค์์๋ Nix ์ธ์ด๊ฐ store์ ๋ํด ํน๊ถ์ ์ง์๋ฅผ ๊ฐ๊ณ ์์ผ๋ฉฐ, ์ด ๋ ์ฌ์ด์ ๋ช
์์ ์ธ ์ธํฐํ์ด์ค ๊ฒฝ๊ณ๊ฐ ์กด์ฌํ์ง ์๋๋ค.
ํน๊ถ์ ์ง์์ ๊ตฌ์ฒด์ ์์
์ ์ผํ ๊ณต์ ์ง์
์ : derivation์ ์์ฑํ๊ณ store์ ๋ฑ๋กํ๋ ์ฌ์ค์ ์ ์ผํ ๊ฒฝ๋ก๊ฐ Nix ์ธ์ด ํ๊ฐ๊ธฐ๋ค. nix build, nix develop ๋ฑ CLI ๋๊ตฌ๋ ๋ด๋ถ์ ์ผ๋ก Nix ํ๊ฐ๊ธฐ๋ฅผ ํธ์ถํ๋ค.
์ํ๊ณ ์ข
์: nixpkgs ์ ์ฒด๊ฐ Nix ์ธ์ด๋ก ์์ฑ๋์ด ์๊ณ , flake ์์คํ
๋ Nix ํ๊ฐ๊ธฐ๋ฅผ ์ ์ ํ๋ค. ๋์ ์ธ์ด๋ ํญ์ ์ด๋ฑ ์๋ฏผ์ด๋ค.
์์์ฑ์ ๋ํ ์ ๋ขฐ ์์กด: store์ ๋ฌด๊ฒฐ์ฑ์ด Nix ์ธ์ด์ ์์์ฑ(๋ถ์์ฉ ์์, string context๋ฅผ ํตํ ์์กด์ฑ ์ถ์ ๋ฑ)์ ์์กดํ๋ค. ์ด๋ ์ธ์ด ๊ตฌํ์ ์ ํ์ฑ์ ๋ฏฟ์ด์ผ ํ๋ ์ทจ์ฝํ ์ ๋ขฐ ๋ชจ๋ธ์ด๋ค.
๊ธฐ์กด ์ฐํ ์๋์ ํ๊ณ
Guix: Nix ์ธ์ด ๋์ Guile์ ํ๋ก ํธ์๋๋ก ์ฌ์ฉํ์ง๋ง, nixpkgs๋ฅผ ์ฌ์ฌ์ฉํ์ง ๋ชปํ๊ณ ์ํ๊ณ๋ฅผ ์ฒ์๋ถํฐ ๋ค์ ๊ตฌ์ถํด์ผ ํ๋ค.
Tvix: store๋ฅผ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ ค ํ์ง๋ง, ๊ฒฐ๊ตญ Nix ์ธ์ด์ ํธํ ํ๊ฐ๊ธฐ๋ฅผ ๋ง๋๋ ๋ฐ ์๋นํ ๋น์ฉ์ ์น๋ฅด๊ณ ์๋ค.
Recursive Nix: ๋น๋ ์์ ์ ๋ค๋ฅธ ์ธ์ด์์ Nix daemon์ ํธ์ถํ ์ ์์ง๋ง, ์ต์์ ์ง์
์ ์ ์ฌ์ ํ Nix ์ธ์ด๊ฐ ์ฅ๊ณ ์๋ค. ํ์ถ๊ตฌ๋ ์๊ฒผ์ง๋ง ๊ทธ ๋ฌธ์ ์ฌ๋ ์ด์ ๋ Nix ์ธ์ด์ ์๋ค.
์ ์: ๋ชจ๋ ์ธ์ด๋ฅผ Sandbox ์์ผ๋ก
ํต์ฌ ์์ด๋์ด: Nix ์ธ์ด ํ๊ฐ๊ธฐ๋ฅผ ํฌํจํ ๋ชจ๋ ํ๋ก ํธ์๋ ์ธ์ด๋ฅผ, Nix sandbox ์์์ ๋ง์ดํธ๋ Nix daemon ์์ผ์ ํตํด์๋ง store์ ์ํธ์์ฉํ๋๋ก ํ๋ค.
๊ตฌ์กฐ ๋ณ๊ฒฝ
[ํ์ฌ]
Nix ์ธ์ด ํ๊ฐ๊ธฐ โโ(ํน๊ถ์ ์ ๊ทผ)โโโถ Nix Store
[์ ์]
โโโโ Sandbox โโโโโโโโโโโโโโโโโโโโโ
โ Nix ์ธ์ด ํ๊ฐ๊ธฐ
โ Guile / Python / Rust / ... โโโ(daemon ์์ผ)โโโถ Nix Daemon โโโถ Nix Store
โ (๋คํธ์ํฌ ์์, FS ๊ฒฉ๋ฆฌ)
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๋์ ๋ฐฉ์
ํ๋ก ํธ์๋ ์ธ์ด(Nix ํฌํจ)๋ sandbox ์์์ ์คํ๋๋ค. ๋คํธ์ํฌ ์ ๊ทผ ๋ถ๊ฐ, ํ์ผ์์คํ
๊ฒฉ๋ฆฌ.
Store ๊ด๋ จ ๋ชจ๋ ๋์(derivation ๋ฑ๋ก, store path ์กฐํ, ๋น๋ ์์ฒญ ๋ฑ)์ sandbox ์์ ๋ง์ดํธ๋ Nix daemon ์์ผ์ ํตํด์๋ง ์ํํ๋ค.
Daemon์ด store์ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๋ ์ ์ผํ ์ฃผ์ฒด๊ฐ ๋๋ค.
์ด์
1. ์ ๋ขฐ ๋ชจ๋ธ์ ๋จ์ํ
์ธ์ด์ ์์์ฑ์ ์ ๋ขฐํ ํ์๊ฐ ์๋ค. Sandbox๊ฐ ์ปค๋ ๋ ๋ฒจ์์ ๊ฒฉ๋ฆฌ๋ฅผ ๊ฐ์ ํ๋ฏ๋ก, ์ด๋ค ์ธ์ด๊ฐ sandbox ์์์ ๋ฌด์์ ํ๋ store์ ๋ฌด๊ฒฐ์ฑ์ daemon์ด ๋ณด์ฅํ๋ค. ์ธ์ด ์๋ฏธ๋ก ์ ์์กดํ๋ ์ ๋ขฐ๋ณด๋ค OS ๋ ๋ฒจ ๊ฒฉ๋ฆฌ์ ์์กดํ๋ ์ ๋ขฐ๊ฐ ํจ์ฌ ๊ฒฌ๊ณ ํ๋ค.
2. ์ธ์ด ๊ฐ ๋๋ฑํ ์ง์
Nix, Guile, Python, Rust ๋ฑ ์ด๋ค ์ธ์ด๋ sandbox ์์์ daemon ์์ผ ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋์ผํ๋ค. nixpkgs๊ฐ Nix๋ก ์์ฑ๋์ด ์๋ค๋ ๊ฒ์ ์ํ๊ณ์ ์ญ์ฌ์ ์ ํ์ผ ๋ฟ, ์ํคํ
์ฒ๊ฐ ๊ฐ์ ํ๋ ๊ฒ์ด ์๋๊ฒ ๋๋ค.
3. ๊ธฐ์กด ํน์ ์ผ์ด์ค์ ์ผ๋ฐํ
IFD(Import From Derivation): ํ๊ฐ ์ค์ ๋น๋๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ ํน์ ์ผ์ด์ค๊ฐ ์๋๋ผ, sandbox ์์์ daemon์๊ฒ ๋น๋๋ฅผ ์์ฒญํ๋ ์ผ๋ฐ์ ๋์์ด ๋๋ค.
Recursive Nix: ๋ณ๋ ๊ธฐ๋ฅ์ด ์๋๋ผ ๋น์ฐํ ํจํด์ด ๋๋ค.
ํ๊ฐ์ ๋น๋์ ๊ฒฝ๊ณ๊ฐ ๋ชจํธํด์ ธ๋ sandbox๊ฐ ๊ฒฉ๋ฆฌ๋ฅผ ๋ณด์ฅํ๋ฏ๋ก ๋ฌธ์ ๊ฐ ๋์ง ์๋๋ค.
์์ฝ
ํ์ฌ Nix ์ํคํ
์ฒ์์ ์ธ์ด ๋ ๋ฒจ์ ์์์ฑ์ด ๋ด๋นํ๋ ๋ณด์ ์ญํ ์, OS ๋ ๋ฒจ์ ๊ฒฉ๋ฆฌ(sandbox + daemon ํ๋กํ ์ฝ)๋ก ๋ด๋ฆฌ์๋ ๊ฒ์ด ์ด ์ ์์ ํต์ฌ์ด๋ค. ์ด๋ฅผ ํตํด Nix ์ธ์ด์ ํน๊ถ์ ์ง์๊ฐ ์ ๊ฑฐ๋๊ณ , ๋ชจ๋ ํ๋ก ํธ์๋ ์ธ์ด๊ฐ ๋๋ฑํ ์กฐ๊ฑด์์ Nix store๋ฅผ ํ์ฉํ ์ ์๊ฒ ๋๋ค.