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

Rust-for-Linux ํ”„๋กœ์ ํŠธ์˜ ์ €์ž์ธ Miguel Ojeda๋Š” Linux ์ปค๋„ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ๋„๋ก Rust ์–ธ์–ด๋กœ ์žฅ์น˜ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ ์—…๋ฐ์ดํŠธ๋œ ๋ฒ„์ „์˜ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. Rust ์ง€์›์€ ์‹คํ—˜์ ์ธ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜์ง€๋งŒ ์ด๋ฏธ linux-next ๋ธŒ๋žœ์น˜์— ํฌํ•จํ•˜๊ธฐ๋กœ ํ•ฉ์˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ ๋ฒ„์ „์—์„œ๋Š” ํŒจ์น˜์˜ ์ฒซ ๋ฒˆ์งธ ๋ฒ„์ „์„ ๋…ผ์˜ํ•˜๋Š” ๋™์•ˆ ์–ธ๊ธ‰๋œ ๋‚ด์šฉ์ด ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Linus Torvalds๋Š” ์ด๋ฏธ ํ† ๋ก ์— ์ฐธ์—ฌํ•˜์—ฌ ์ผ๋ถ€ ๋น„ํŠธ ์—ฐ์‚ฐ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋…ผ๋ฆฌ ๋ณ€๊ฒฝ์„ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค.

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

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

์ƒˆ ๋ฒ„์ „์˜ ํŒจ์น˜์—์„œ ๊ฐ€์žฅ ๋ˆˆ์— ๋„๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์ฝ”๋“œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ "ํŒจ๋‹‰" ์ƒํƒœ๋ฅผ ์ƒ์„ฑํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ์žฌ์ž‘์—…ํ•˜๋Š” Rust alloc ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ณ€ํ˜•์ด ํฌํ•จ๋˜์–ด ์žˆ์ง€๋งŒ ๊ถ๊ทน์ ์ธ ๋ชฉํ‘œ๋Š” ์ปค๋„์— ํ•„์š”ํ•œ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ alloc์˜ ๋ฉ”์ธ ์—๋””์…˜์œผ๋กœ ์ด์ „ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ์ด๋ฏธ ์ค€๋น„๋˜์–ด ํ‘œ์ค€ ๋ฒ„์ „์œผ๋กœ ์ด์ „๋˜์—ˆ์Šต๋‹ˆ๋‹ค). ๋Ÿฌ์ŠคํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ).
  • ์•ผ๊ฐ„ ๋นŒ๋“œ ๋Œ€์‹  ์ด์ œ Rustc ์ปดํŒŒ์ผ๋Ÿฌ์˜ ๋ฒ ํƒ€ ๋ฆด๋ฆฌ์Šค์™€ ์•ˆ์ • ๋ฆด๋ฆฌ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Rust๋ฅผ ์ง€์›ํ•˜๋Š” ์ปค๋„์„ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ๋Š” Rustc 1.54-beta1์ด ๋ ˆํผ๋Ÿฐ์Šค ์ปดํŒŒ์ผ๋Ÿฌ๋กœ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์ง€๋งŒ, ์ด๋‹ฌ ๋ง 1.54 ๋ฆด๋ฆฌ์Šค๊ฐ€ ์ถœ์‹œ๋œ ์ดํ›„์—๋Š” ๋ ˆํผ๋Ÿฐ์Šค ์ปดํŒŒ์ผ๋Ÿฌ๋กœ ์ง€์›๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.
  • Rust์˜ ํ‘œ์ค€ "#[test]" ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ์— ๋Œ€ํ•œ ์ง€์›๊ณผ doctest๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ๋ฅผ ๋ฌธ์„œํ™”ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ด์ „์— ์ง€์›๋œ x32_86 ๋ฐ ARM64 ์™ธ์— ARM64 ๋ฐ RISCV ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ด์ œ ๋ชจ๋“  ๊ธฐ๋ณธ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•œ GCC Rust(Rust์šฉ GCC ํ”„๋ŸฐํŠธ์—”๋“œ) ๋ฐ Rustc_codegen_gcc(GCC์šฉ Rustc ๋ฐฑ์—”๋“œ)์˜ ๊ตฌํ˜„์ด ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ ˆ๋“œ-๋ธ”๋ž™ ํŠธ๋ฆฌ, ์ฐธ์กฐ ์นด์šดํŠธ ๊ฐ์ฒด, ํŒŒ์ผ ์„ค๋ช…์ž ์ƒ์„ฑ, ์ž‘์—…, ํŒŒ์ผ ๋ฐ I/O ๋ฒกํ„ฐ์™€ ๊ฐ™์ด C๋กœ ์ž‘์„ฑ๋œ ์ปค๋„ ๋ฉ”์ปค๋‹ˆ์ฆ˜์˜ Rust ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด ์ˆ˜์ค€์˜ ์ถ”์ƒํ™”๊ฐ€ ์ œ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋“œ๋ผ์ด๋ฒ„ ๊ฐœ๋ฐœ ๊ตฌ์„ฑ ์š”์†Œ๋Š” file_options ๋ชจ๋“ˆ, ๋ชจ๋“ˆ ๋งคํฌ๋กœ, ๋งคํฌ๋กœ ๋“ฑ๋ก ๋ฐ ๊ธฐ๋ณธ ๋“œ๋ผ์ด๋ฒ„(ํƒ์ƒ‰ ๋ฐ ์ œ๊ฑฐ)์— ๋Œ€ํ•œ ์ง€์›์„ ํ–ฅ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ด์ œ ๋ฐ”์ธ๋”๋Š” ํŒŒ์ผ ์„ค๋ช…์ž ๋ฐ LSM ํ›„ํฌ ์ „๋‹ฌ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • Rust ๋“œ๋ผ์ด๋ฒ„์˜ ๋ณด๋‹ค ๊ธฐ๋Šฅ์ ์ธ ์˜ˆ๊ฐ€ ์ œ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, Raspberry Pi ๋ณด๋“œ์˜ ํ•˜๋“œ์›จ์–ด ๋‚œ์ˆ˜ ์ƒ์„ฑ๊ธฐ๋ฅผ ์œ„ํ•œ bcm2835-rng์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ์ปค๋„์—์„œ Rust๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ๋œ ์ผ๋ถ€ ํšŒ์‚ฌ์˜ ํ”„๋กœ์ ํŠธ๊ฐ€ ์–ธ๊ธ‰๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • Microsoft๋Š” Rust ์ง€์›์„ Linux ์ปค๋„์— ํ†ตํ•ฉํ•˜๋Š” ์ž‘์—…์— ์ฐธ์—ฌํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์„ ํ‘œ๋ช…ํ–ˆ์œผ๋ฉฐ ์•ž์œผ๋กœ ๋ช‡ ๋‹ฌ ์•ˆ์— Rust์—์„œ Hyper-V์šฉ ๋“œ๋ผ์ด๋ฒ„ ๊ตฌํ˜„์„ ์ œ๊ณตํ•  ์ค€๋น„๊ฐ€ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ARM์€ ARM ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ Rust ์ง€์›์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Rust ํ”„๋กœ์ ํŠธ๋Š” ์ด๋ฏธ 64๋น„ํŠธ ARM ์‹œ์Šคํ…œ์„ Tier 1 ํ”Œ๋žซํผ์œผ๋กœ ๋งŒ๋“œ๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Google์€ Linux์šฉ Rust ํ”„๋กœ์ ํŠธ๋ฅผ ์ง์ ‘ ์ง€์›ํ•˜๊ณ , Rust์—์„œ Binder ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹  ๋ฉ”์ปค๋‹ˆ์ฆ˜์˜ ์ƒˆ๋กœ์šด ๊ตฌํ˜„์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, Rust์—์„œ ๋‹ค์–‘ํ•œ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์žฌ์ž‘์—…ํ•  ๊ฐ€๋Šฅ์„ฑ์„ ๊ณ ๋ คํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Google์€ ISRG(Internet Security Research Group)๋ฅผ ํ†ตํ•ด Rust ์ง€์›์„ Linux ์ปค๋„์— ํ†ตํ•ฉํ•˜๋Š” ์ž‘์—…์— ์ž๊ธˆ์„ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.
  • IBM์€ PowerPC ์‹œ์Šคํ…œ์šฉ Rust์— ๋Œ€ํ•œ ์ปค๋„ ์ง€์›์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • LSE(Systems Research Laboratory) ์—ฐ๊ตฌ์†Œ์—์„œ๋Š” Rust๋กœ SPI ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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