4.0๋ ๋ฐ์ ๊ฐ๋ฐ ๋์ MirageOS XNUMX ํ๋ก์ ํธ๊ฐ ์ถ์๋์์ต๋๋ค. ์ด๋ฅผ ํตํด ํ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์ด์ ์ฒด์ ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ด ํ๋ก์ ํธ์์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ ๋ฆฝํ "์ ๋์ปค๋"๋ก ์ ๊ณต๋์ด ๋ณ๋์ ์์ ์์ด ์คํ๋ ์ ์์ต๋๋ค. ์ด์ ์ฒด์ , ๋ณ๋์ OS ์ปค๋ ๋ฐ ๋ชจ๋ ๊ณ์ธต์ ์ฌ์ฉ. OCaml ์ธ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ํ๋ก์ ํธ ์ฝ๋๋ ๋ฌด๋ฃ ISC ๋ผ์ด์ผ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค.
์ด์ ์ฒด์ ์ ๋ด์ฌ๋ ๋ชจ๋ ํ์ ์์ค ๊ธฐ๋ฅ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฐ๊ฒฐ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํํ๋ก ๊ตฌํ๋ฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ OS์์ ๊ฐ๋ฐ๋ ์ ์์ผ๋ฉฐ, ๊ทธ ํ์๋ ๋ชจ๋ฐ์ผ ํ๋ซํผ์ Xen, KVM, BHyve ๋ฐ VMM(OpenBSD) ํ์ดํผ๋ฐ์ด์ ์์ ์ง์ ์คํํ ์ ์๋ ํน์ ์ปค๋(์ ๋์ปค๋ ๊ฐ๋ )๋ก ์ปดํ์ผ๋ฉ๋๋ค. POSIX ํธํ ํ๊ฒฝ์ด๋ ํด๋ผ์ฐ๋ ํ๊ฒฝ Amazon Elastic Compute Cloud ๋ฐ Google Compute Engine์ ํ๋ก์ธ์ค ํํ์ ๋๋ค.
์์ฑ๋ ํ๊ฒฝ์ ๋ถํ์ํ ๊ฒ์ ํฌํจํ์ง ์์ผ๋ฉฐ ๋๋ผ์ด๋ฒ๋ ์์คํ ๊ณ์ธต ์์ด ํ์ดํผ๋ฐ์ด์ ์ ์ง์ ์ํธ ์์ฉํ๋ฏ๋ก ๊ฐ์ ๋น๋ฅผ ํฌ๊ฒ ์ค์ด๊ณ ๋ณด์์ ๊ฐํํ ์ ์์ต๋๋ค. MirageOS ์์ ์ ํ๊ฒฝ์ ์ฌ์ฉ๋๋ OPAM ํจํค์ง ์ ์๋ฅผ ํตํ ๊ตฌ์ฑ ์ค๋น, ํ๊ฒฝ ์กฐ๋ฆฝ, ํ๊ฒฝ ์์์ ์ธ ๋จ๊ณ๋ก ๋๋์ด์ง๋๋ค. ํ์ดํผ๋ฐ์ด์ ์์์์ ์๋์ ๋ณด์ฅํ๊ธฐ ์ํด ๋ฐํ์์ Solo5 ์ปค๋์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋์์ต๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๊ณ ๊ธ ์ธ์ด OCaml๋ก ์์ฑ๋์์์๋ ๋ถ๊ตฌํ๊ณ ๊ฒฐ๊ณผ ํ๊ฒฝ์ ์๋นํ ์ฐ์ํ ์ฑ๋ฅ๊ณผ ์ต์ ํฌ๊ธฐ๋ฅผ ๋ณด์ฌ์ค๋๋ค(์: DNS ์๋ฒ๋ 200KB๋ง ์ฐจ์งํจ). ํ๋ก๊ทธ๋จ์ ์ ๋ฐ์ดํธํ๊ฑฐ๋ ๊ตฌ์ฑ์ ๋ณ๊ฒฝํด์ผ ํ๋ ๊ฒฝ์ฐ ์ ํ๊ฒฝ์ ์์ฑํ๊ณ ์์ํ๋ฉด ์ถฉ๋ถํ๋ฏ๋ก ํ๊ฒฝ ์ ์ง ๊ด๋ฆฌ๋ ๋จ์ํ๋ฉ๋๋ค. ๋คํธ์ํฌ ์์ (DNS, SSH, OpenFlow, HTTP, XMPP, Matrix, OpenVPN ๋ฑ)์ ์ํํ๊ณ ์คํ ๋ฆฌ์ง ์์ ์ ์ํํ๋ฉฐ ๋ณ๋ ฌ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด OCaml ์ธ์ด๋ก ๋ ์๋ฐฑ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ง์๋ฉ๋๋ค.
์ฃผ์ ๊ฐ์ ์ฌํญ:
- ํ๋ก์ ํธ ๋ฐ ์ ๋์ปค๋ ์ปดํ์ผ ํ๋ก์ธ์ค๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค. ์ด์ ์ ์ฌ์ฉ๋ ocamlbuild ์ด์ ๋ธ๋ฆฌ ์์คํ ๋์ dune ํดํท๊ณผ ๋ก์ปฌ ์ ์ฅ์(monorepo)๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฌํ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์์ฑํ๊ธฐ ์ํด opam-monorepo๋ผ๋ ์๋ก์ด ์ ํธ๋ฆฌํฐ๊ฐ ์ถ๊ฐ๋์์ต๋๋ค. ์ด๋ฅผ ํตํด ํจํค์ง ๊ด๋ฆฌ์ ์์ค ์ฝ๋ ๋น๋๋ฅผ ๋ถ๋ฆฌํ ์ ์์ต๋๋ค. opam-monorepo ์ ํธ๋ฆฌํฐ๋ ํ๋ก์ ํธ ๊ด๋ จ ์ข ์์ฑ์ ์ํ ์ ๊ธ ํ์ผ ์์ฑ, ์ข ์์ฑ ์ฝ๋ ๋ก๋ ๋ฐ ์ถ์ถ, dune ๋น๋ ์์คํ ์ ์ฌ์ฉํ๋๋ก ํ๊ฒฝ ์ค์ ๋ฑ์ ์์ ์ ์ํํฉ๋๋ค. ์ค์ ์กฐ๋ฆฝ์ dune ํดํท์ ์ํด ์ํ๋ฉ๋๋ค.
- ๋ฐ๋ณต ๊ฐ๋ฅํ ๋น๋ ํ๋ก์ธ์ค๊ฐ ์ ๊ณต๋ฉ๋๋ค. ์ ๊ธ ํ์ผ์ ์ฌ์ฉํ๋ฉด ์ข ์์ฑ ๋ฒ์ ์ ๋ํ ๋งํฌ๊ฐ ์ ๊ณต๋๋ฉฐ ์ธ์ ๋ ์ง ๋์ผํ ์ฝ๋๋ก ๋น๋ ํ๋ก์ธ์ค๋ฅผ ์์ ํ ๋ฐ๋ณตํ ์ ์์ต๋๋ค.
- ์๋ก์ด ํฌ๋ก์ค ์ปดํ์ผ ํ๋ก์ธ์ค๊ฐ ๊ตฌํ๋์์ผ๋ฉฐ ํ๋์ ๊ณตํต ๋น๋ ํ๊ฒฝ์์ ์ง์๋๋ ๋ชจ๋ ๋์ ํ๋ซํผ์ ๋ํด ํฌ๋ก์ค ์ปดํ์ผํ๋ ๊ธฐ๋ฅ์ด ์ ๊ณต๋ฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ด๋ฌํ ๋ฐ์ธ๋ฉ์ ์ถ๊ฐํ ํ์ ์์ด C ๋ฐ์ธ๋ฉ์ด ์๋ ์ข ์์ฑ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํฌ๋ก์ค ์ปดํ์ผํฉ๋๋ค. ๋ฉ์ธ ํจํค์ง. ํฌ๋ก์ค ์ปดํ์ผ์ dune ๋น๋ ์์คํ ์์ ์ ๊ณตํ๋ ์์ ๊ณต๊ฐ์ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑ๋ฉ๋๋ค.
- ์๋ก์ด ๋์ ํ๋ซํผ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. ์๋ฅผ ๋ค์ด Raspberry Pi 4 ๋ณด๋์์ ์คํํ๊ธฐ ์ํ ๋ ๋ฆฝํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ์คํ์ ๊ธฐ๋ฅ์ด ์ ๊ณต๋์์ต๋๋ค.
- Unikernel ํํ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด์ ๋ธ๋ฆฌ๋ฅผ ๋จ์ํํ๊ธฐ ์ํด MirageOS์ ์ผ๋ถ๋ฅผ OCaml ์ธ์ด ๊ฐ๋ฐ๊ณผ ๊ด๋ จ๋ ์ํ๊ณ์ ํตํฉํ๋ ์์ ์ด ์ํ๋์์ต๋๋ค. ๋ง์ MirageOS ํจํค์ง๊ฐ dune ๋น๋ ์์คํ ์ผ๋ก ์ด์๋์์ต๋๋ค. opam-monorepo ์ ํธ๋ฆฌํฐ๋ opam ํจํค์ง ๊ด๋ฆฌ์๋ฅผ ์ฌ์ฉํ์ฌ ์ค์นํ ์ ์์ผ๋ฉฐ dune ๋น๋ ์์คํ ์ ์ฌ์ฉํ๋ ํ๋ก์ ํธ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. dune์์ ์ข ์์ฑ ๊ตฌ์ถ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ํจ์น๋ฅผ ์ ์งํ๊ธฐ ์ํด dune-universe/opam-overlays ๋ฐ dune-universe/mirage-opam-overlays๋ผ๋ ๋ ๊ฐ์ ๋ฆฌํฌ์งํ ๋ฆฌ๊ฐ ์์ฑ๋์์ต๋๋ค. ์ด๋ mirage CLI ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋ฉ๋๋ค.
- C ๋ฐ Rust ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ MirageOS ํตํฉ์ด ๋จ์ํ๋์์ต๋๋ค.
- libc ์์ด(libc-free) ์์ ์ ์ํํ ์ ์๋ ์๋ก์ด OCaml ๋ฐํ์์ด ์ ์๋์์ต๋๋ค.
- ํ์ค ํตํฉ ๊ฐ๋ฐ ํ๊ฒฝ๊ณผ์ ํตํฉ์ ์ํด Merlin ์๋น์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ถ์ฒ : opennet.ru