ํ•˜์ดํผ๋ฐ”์ด์ € ์œ„์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ํ”Œ๋žซํผ์ธ MirageOS 4.0 ์ถœ์‹œ

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

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€