Rust ์–ธ์–ด๋ฅผ ์ง€์›ํ•˜๋Š” Linux ์ปค๋„์šฉ ํŒจ์น˜ ์ œXNUMXํŒ

Rust-for-Linux ํ”„๋กœ์ ํŠธ์˜ ์ €์ž์ธ Miguel Ojeda๋Š” Linux ์ปค๋„ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ๋„๋ก Rust ์–ธ์–ด๋กœ ์žฅ์น˜ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ ์„ธ ๋ฒˆ์งธ ๊ตฌ์„ฑ ์š”์†Œ ์˜ต์…˜์„ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. Rust ์ง€์›์€ ์‹คํ—˜์ ์ธ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜์ง€๋งŒ ์ด๋ฏธ linux-next ๋ธŒ๋žœ์น˜์— ํฌํ•จํ•˜๊ธฐ๋กœ ํ•ฉ์˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฐœ๋ฐœ์€ Google๊ณผ Let's Encrypt ํ”„๋กœ์ ํŠธ์˜ ์ฐฝ๋ฆฝ์ž์ธ ISRG(Internet Security Research Group)์—์„œ ์ž๊ธˆ์„ ์ง€์›๋ฐ›๊ณ  HTTPS์™€ ์ธํ„ฐ๋„ท ๋ณด์•ˆ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๊ธฐ์ˆ  ๊ฐœ๋ฐœ์„ ์ด‰์ง„ํ•ฉ๋‹ˆ๋‹ค.

์ œ์•ˆ๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ†ตํ•ด Rust๋ฅผ ๋“œ๋ผ์ด๋ฒ„ ๋ฐ ์ปค๋„ ๋ชจ๋“ˆ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๋‘ ๋ฒˆ์งธ ์–ธ์–ด๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค๋Š” ์ ์„ ๊ธฐ์–ตํ•˜์„ธ์š”. Rust ์ง€์›์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์ง€ ์•Š๋Š” ์˜ต์…˜์œผ๋กœ ์ œ๊ณต๋˜๋ฉฐ Rust๊ฐ€ ์ปค๋„์— ๋Œ€ํ•œ ํ•„์ˆ˜ ๋นŒ๋“œ ์ข…์†์„ฑ์œผ๋กœ ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋“œ๋ผ์ด๋ฒ„ ๊ฐœ๋ฐœ์— Rust๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด์ œ ํ›„ ๋ฉ”๋ชจ๋ฆฌ ์•ก์„ธ์Šค, ๋„ ํฌ์ธํ„ฐ ์—ญ์ฐธ์กฐ ๋ฐ ๋ฒ„ํผ ์˜ค๋ฒ„๋Ÿฐ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ ์—†์ด ์ตœ์†Œํ•œ์˜ ๋…ธ๋ ฅ์œผ๋กœ ๋” ์•ˆ์ „ํ•˜๊ณ  ๋” ๋‚˜์€ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ์•ˆ์ „ ์ฒ˜๋ฆฌ๋Š” ์ฝ”๋“œ ์‹คํ–‰ ์ค‘ ๋ฉ”๋ชจ๋ฆฌ ์•ก์„ธ์Šค์˜ ์ •ํ™•์„ฑ ํ‰๊ฐ€๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ฐธ์กฐ ํ™•์ธ, ๊ฐœ์ฒด ์†Œ์œ ๊ถŒ ๋ฐ ๊ฐœ์ฒด ์ˆ˜๋ช…(๋ฒ”์œ„) ์ถ”์ ์„ ํ†ตํ•ด ์ปดํŒŒ์ผ ์‹œ๊ฐ„์— Rust์—์„œ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. Rust๋Š” ๋˜ํ•œ ์ •์ˆ˜ ์˜ค๋ฒ„ํ”Œ๋กœ์— ๋Œ€ํ•œ ๋ณดํ˜ธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ , ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๋ณ€์ˆ˜ ๊ฐ’์˜ ํ•„์ˆ˜ ์ดˆ๊ธฐํ™”๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ, ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์˜ค๋ฅ˜๋ฅผ ๋” ์ž˜ ์ฒ˜๋ฆฌํ•˜๊ณ , ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ถˆ๋ณ€ ์ฐธ์กฐ ๋ฐ ๋ณ€์ˆ˜ ๊ฐœ๋…์„ ์ ์šฉํ•˜๊ณ , ๊ฐ•๋ ฅํ•œ ์ •์  ์œ ํ˜• ์ง€์ •์„ ์ œ๊ณตํ•˜์—ฌ ๋…ผ๋ฆฌ์  ์˜ค๋ฅ˜๋ฅผ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ ๋ฒ„์ „์˜ ํŒจ์น˜์—์„œ๋Š” ํŒจ์น˜์˜ ์ฒซ ๋ฒˆ์งธ ๋ฐ ๋‘ ๋ฒˆ์งธ ๋ฒ„์ „์— ๋Œ€ํ•œ ๋…ผ์˜ ์ค‘์— ์ž‘์„ฑ๋œ ์˜๊ฒฌ์ด ๊ณ„์†ํ•ด์„œ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๋ˆˆ์— ๋„๋Š” ๋ณ€ํ™”๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Rust 1.57์˜ ์•ˆ์ • ๋ฆด๋ฆฌ์Šค๋ฅผ ์ฐธ์กฐ ์ปดํŒŒ์ผ๋Ÿฌ๋กœ ์‚ฌ์šฉํ•˜๋„๋ก ์ „ํ™˜๋˜์—ˆ์œผ๋ฉฐ Rust 2021 ์–ธ์–ด์˜ ์•ˆ์ •ํ™” ๋ฒ„์ „์— ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ์ œ๊ณต๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ „์—๋Š” ํŒจ์น˜๊ฐ€ Rust์˜ ๋ฒ ํƒ€ ๋ธŒ๋žœ์น˜์— ๋ฌถ์—ฌ ์žˆ์—ˆ๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ผ๋ถ€ ์–ธ์–ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ถˆ์•ˆ์ •ํ•œ ๊ฒƒ์œผ๋กœ ๋ถ„๋ฅ˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Rust 2021 ์‚ฌ์–‘์œผ๋กœ์˜ ์ „ํ™˜์„ ํ†ตํ•ด ์šฐ๋ฆฌ๋Š” const_fn_transmute, const_panic, const_unavailable_unchecked ๋ฐ core_panic ๋ฐ try_reserve์™€ ๊ฐ™์€ ํŒจ์น˜์—์„œ ๋ถˆ์•ˆ์ •ํ•œ ๊ธฐ๋Šฅ์˜ ์‚ฌ์šฉ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•œ ์ž‘์—…์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
  • ํŒจ์น˜์— ํฌํ•จ๋œ Rust ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํ• ๋‹น ๋ฒ„์ „ ๊ฐœ๋ฐœ์€ ๊ณ„์†๋˜์–ด ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ "ํŒจ๋‹‰" ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๊ธฐ๋Šฅ์„ ์ œ๊ฑฐํ•˜๋„๋ก ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ ๋ฒ„์ „์—์„œ๋Š” ์ปค๋„ Rust ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” "no_rc" ๋ฐ "no_sync" ์˜ต์…˜์„ ๊ตฌํ˜„ํ•˜์—ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋”์šฑ ๋ชจ๋“ˆํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ปค๋„์— ํ•„์š”ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ธฐ๋ณธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์ „์†กํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” ์ฃผ์š” alloc ๊ฐœ๋ฐœ์ž์™€์˜ ์ž‘์—…์ด ๊ณ„์†๋ฉ๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ปค๋„ ์ˆ˜์ค€์—์„œ ์ž‘๋™ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ "no_fp_fmt_parse" ์˜ต์…˜์ด Rust ๊ธฐ๋ณธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(์ฝ”์–ด)๋กœ ์ด๋™๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • CONFIG_WERROR ๋ชจ๋“œ์—์„œ ์ปค๋„์„ ๋นŒ๋“œํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ ๊ฒฝ๊ณ ๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๊ฐ€ ์ •๋ฆฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Rust์—์„œ ์ฝ”๋“œ๋ฅผ ๋นŒ๋“œํ•  ๋•Œ ์ถ”๊ฐ€ ์ปดํŒŒ์ผ๋Ÿฌ ์ง„๋‹จ ๋ชจ๋“œ์™€ Clippy linter ๊ฒฝ๊ณ ๊ฐ€ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค.
  • seqlock(์‹œํ€€์Šค ์ž ๊ธˆ), ์ „์› ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์ฝœ๋ฐฑ ํ˜ธ์ถœ, I/O ๋ฉ”๋ชจ๋ฆฌ(readX/writeX), ์ธํ„ฐ๋ŸฝํŠธ ๋ฐ ์Šค๋ ˆ๋“œ ์ฒ˜๋ฆฌ๊ธฐ, GPIO, ์žฅ์น˜ ์•ก์„ธ์Šค, ๋“œ๋ผ์ด๋ฒ„ ๋ฐ ์ž๊ฒฉ ์ฆ๋ช…์„ ์œ„ํ•œ Rust ์ฝ”๋“œ์—์„œ์˜ ์‚ฌ์šฉ์„ ์œ„ํ•œ ์ถ”์ƒํ™”๊ฐ€ ์ œ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋“œ๋ผ์ด๋ฒ„ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๋„๊ตฌ๋Š” ์žฌ๋ฐฐ์น˜ ๊ฐ€๋Šฅํ•œ ๋ฎคํ…์Šค, ๋น„ํŠธ ๋ฐ˜๋ณต๊ธฐ, ๋‹จ์ˆœํ™”๋œ ํฌ์ธํ„ฐ ๋ฐ”์ธ๋”ฉ, ํ–ฅ์ƒ๋œ ์˜ค๋ฅ˜ ์ง„๋‹จ ๋ฐ ๋ฐ์ดํ„ฐ ๋ฒ„์Šค ๋…๋ฆฝ์  ์ธํ”„๋ผ๋ฅผ ํฌํ•จํ•˜๋„๋ก ํ™•์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ฐธ์กฐ ๊ณ„์‚ฐ์„ ์œ„ํ•ด ๋™์ผํ•œ ์ด๋ฆ„์˜ ์ปค๋„ API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” refcount_t ๋ฐฑ์—”๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹จ์ˆœํ™”๋œ Ref ์œ ํ˜•์„ ์‚ฌ์šฉํ•˜๋Š” ๋งํฌ ์ž‘์—…์ด ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ‘œ์ค€ ํ• ๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ œ๊ณต๋˜๋Š” Arc ๋ฐ Rc ์œ ํ˜•์— ๋Œ€ํ•œ ์ง€์›์ด ์ œ๊ฑฐ๋˜์—ˆ์œผ๋ฉฐ ์ปค๋„ ์ˆ˜์ค€์—์„œ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค(๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž์ฒด์— ์ด๋Ÿฌํ•œ ์œ ํ˜•์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ์˜ต์…˜์ด ์ค€๋น„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค).
  • ํŒจ์น˜์—๋Š” Rust๋กœ ๋‹ค์‹œ ์ž‘์„ฑ๋œ PL061 GPIO ๋“œ๋ผ์ด๋ฒ„ ๋ฒ„์ „์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋“œ๋ผ์ด๋ฒ„์˜ ํŠน๋ณ„ํ•œ ํŠน์ง•์€ ๊ตฌํ˜„์ด C ์–ธ์–ด์˜ ๊ธฐ์กด GPIO ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๊ฑฐ์˜ ํ•œ ์ค„์”ฉ ๋ฐ˜๋ณตํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Rust์—์„œ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์ตํžˆ๊ณ  ์‹ถ์€ ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•ด C ์ฝ”๋“œ๊ฐ€ Rust์—์„œ ์–ด๋–ค ๊ตฌ์„ฑ์œผ๋กœ ๋ณ€ํ™˜๋˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ ์ค„์”ฉ ๋น„๊ตํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์ค€๋น„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ Rust ์ฝ”๋“œ๋ฒ ์ด์Šค๋Š” libgccjit ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ AOT(Ahead-of-Time) ์ปดํŒŒ์ผ์„ ๊ตฌํ˜„ํ•˜๋Š” GCC์šฉ Rustc ๋ฐฑ์—”๋“œ์ธ Rustc_codegen_gcc๋ฅผ ์ฑ„ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ๊ฐœ๋ฐœํ•˜๋ฉด GCC๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปค๋„์— ํฌํ•จ๋œ Rust ์ฝ”๋“œ๋ฅผ ์ˆ˜์ง‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ARM, Google, Microsoft ์™ธ์—๋„ Red Hat์€ Linux ์ปค๋„์—์„œ Rust ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์„ ํ‘œ๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค. Google์€ Linux์šฉ Rust ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ์ง€์›์„ ์ง์ ‘ ์ œ๊ณตํ•˜๊ณ , Rust์—์„œ Binder ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹  ๋ฉ”์ปค๋‹ˆ์ฆ˜์˜ ์ƒˆ๋กœ์šด ๊ตฌํ˜„์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, Rust์—์„œ ๋‹ค์–‘ํ•œ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์žฌ์ž‘์—…ํ•  ๊ฐ€๋Šฅ์„ฑ์„ ๊ณ ๋ คํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ ์„ ์ƒ๊ธฐํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Microsoft๋Š” Rust์—์„œ Hyper-V์šฉ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ARM์€ ARM ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ Rust ์ง€์›์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. IBM์€ PowerPC ์‹œ์Šคํ…œ์šฉ ์ปค๋„์— Rust ์ง€์›์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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