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

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

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

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

ํŒจ์น˜์˜ ์ƒˆ ๋ฒ„์ „์—์„œ๋Š” ํŒจ์น˜์˜ ์ฒซ ๋ฒˆ์งธ, ๋‘ ๋ฒˆ์งธ, ์„ธ ๋ฒˆ์งธ, ๋„ค ๋ฒˆ์งธ ๋ฐ ๋‹ค์„ฏ ๋ฒˆ์งธ ๋ฒ„์ „์— ๋Œ€ํ•œ ๋…ผ์˜ ์ค‘์— ์–ธ๊ธ‰๋œ ๋‚ด์šฉ์ด ๊ณ„์†ํ•ด์„œ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ ๋ฒ„์ „์—์„œ๋Š”:

  • ํˆดํ‚ท์ด ์—…๋ฐ์ดํŠธ๋˜์–ด Rust 1.59.0์ด ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ alloc ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ณ€ํ˜•์€ ์ƒˆ๋กœ์šด ๋ฒ„์ „์˜ Rust์™€ ๋™๊ธฐํ™”๋˜์–ด ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ "ํŒจ๋‹‰" ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์–ด์…ˆ๋ธ”๋Ÿฌ ์‚ฝ์ž…("feature(global_asm)")์„ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์•ˆ์ •ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ปค๋„ ์ปดํŒŒ์ผ ์ค‘์— ์‚ฌ์šฉ๋˜๋Š” Rust์—์„œ ํ˜ธ์ŠคํŠธ ํ”„๋กœ๊ทธ๋žจ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฏธ๋ฆฌ ์ƒ์„ฑ๋œ ๋Œ€์ƒ ํ”Œ๋žซํผ ์‚ฌ์–‘ ํŒŒ์ผ์„ ์ œ๊ณตํ•˜๋Š” ๋Œ€์‹  ์ปค๋„ ๊ตฌ์„ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  • Rust๋ฅผ ์ง€์›ํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด HAVE_RUST ์ปค๋„ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ•˜๋“œ์›จ์–ด ์˜์‚ฌ ๋‚œ์ˆ˜ ์ƒ์„ฑ๊ธฐ์šฉ Rust ์ฝ”๋“œ์— ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ถ”์ƒํ™”๊ฐ€ ์ œ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • C์—์„œ ์˜ค๋ฅ˜ ์ฝ”๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ "Error::" ์ ‘๋‘์‚ฌ(์˜ˆ: "return Err(EINVAL)") ์—†์ด ์˜ค๋ฅ˜ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž ์ •์˜ C-์ŠคํŠธ๋ง์„ ์œ„ํ•œ "CString" ์œ ํ˜•์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. Formatter ๋ฐ Buffer ์œ ํ˜•์ด ๊ฒฐํ•ฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • Bool ๋ฐ LockInfo ์œ ํ˜•์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์Šคํ•€ ์ž ๊ธˆ ๊ตฌํ˜„์ด ๋‹จ์ˆœํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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