Skip to main content

๐Ÿฆ€ Rust๊ฐ€ ๊ณต์‹์ ์œผ๋กœ Linux ๋ฉ”์ธ๋ผ์ธ์— ํ•ฉ๋ฅ˜! ์ปค๋„ ๊ฐœ๋ฐœ์˜ ์ƒˆ๋กœ์šด ์ „ํ™˜์ 

Published 3 min readMarkdown

# ์„œ๋ก  โ€“ โ€œ์™œ Rust๊ฐ€ ํ•„์š”ํ• ๊นŒ?โ€

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

์ดˆ๋ณด ๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„œ โ€œC๋Š” ์–ด๋ ต๊ณ  ์‹ค์ˆ˜ํ•˜๊ธฐ ์‰ฝ๋‹คโ€๋Š” ๋А๋‚Œ์„ ๋ฐ›๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์ฃ . ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ Rust๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์†Œ์œ ๊ถŒ๊ณผ ๋นŒ๋ฆผ ๊ฒ€์‚ฌ ๊ฐ™์€ ์•ˆ์ „ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ํฐ ๊ธฐ๋Œ€๋ฅผ ๋ชจ์•˜์Šต๋‹ˆ๋‹ค.

2024๋…„ 5์›”, Linux ์ปค๋„ ๋ฉ”์ธ๋ผ์ธ์— Rust๊ฐ€ ๊ณต์‹์ ์œผ๋กœ ํฌํ•จ๋˜์—ˆ๋‹ค๋Š” ์†Œ์‹์ด ์ „ ์„ธ๊ณ„ ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ๋œจ๊ฒ๊ฒŒ ๋‹ฌ๊ตฌ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Rust๊ฐ€ ๋ฉ”์ธ๋ผ์ธ์— ๋“ค์–ด๊ฐ„ ์˜๋ฏธ์™€ ์ดˆ๋ณด์ž๋„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ํ•ต์‹ฌ ํฌ์ธํŠธ๋ฅผ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.


# 1๏ธโƒฃ Rust ๋„์ž… ๋ฐฐ๊ฒฝ โ€“ ์•ˆ์ „ํ•œ ์ปค๋„์„ ์œ„ํ•œ ์„ ํƒ

| ๋ฌธ์ œ์  | ๊ธฐ์กด C ๋ฐฉ์‹ | Rust๊ฐ€ ์ œ๊ณตํ•˜๋Š” ํ•ด๊ฒฐ์ฑ… |

|--------|------------|------------------------|

| ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ | ํฌ์ธํ„ฐ์™€ ์ˆ˜๋™ ํ•ด์ œ | ์†Œ์œ ๊ถŒ ์‹œ์Šคํ…œ์œผ๋กœ ์ž๋™ ๊ด€๋ฆฌ |

| ๋„ ํฌ์ธํ„ฐ Deref | ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜ ๊ฐ€๋Šฅ | Option<T> ํƒ€์ž…์œผ๋กœ ๊ฐ•์ œ ๊ฒ€์‚ฌ |

| ๋ฐ์ดํ„ฐ ๋ ˆ์ด์Šค | ๋ณต์žกํ•œ ๋ฝ ๊ตฌํ˜„ | SendยทSync ํŠธ๋ ˆ์ดํŠธ๋กœ ์ปดํŒŒ์ผ ํƒ€์ž„ ๊ฒ€์ฆ |

Linux ์ปค๋„ ๊ฐœ๋ฐœํŒ€์€ 2020๋…„๋ถ€ํ„ฐ Rust for Linux ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ–ˆ์œผ๋ฉฐ, ํŒŒ์ผ ์‹œ์Šคํ…œ, ๋„คํŠธ์›Œํฌ ๋“œ๋ผ์ด๋ฒ„ ๋“ฑ ์ผ๋ถ€ ์„œ๋ธŒ์‹œ์Šคํ…œ์— ์‹œํ—˜ ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋ฉ”์ธ๋ผ์ธ์— ํฌํ•จ๋จ์œผ๋กœ์จ, ์ƒˆ๋กœ์šด ๋ชจ๋“ˆ์„ Rust๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต์‹์ ์ธ ๊ฒฝ๋กœ๊ฐ€ ์—ด๋ ธ์Šต๋‹ˆ๋‹ค.


# 2๏ธโƒฃ ์‹ค์ œ ์ ์šฉ ์‚ฌ๋ก€ โ€“ ์ฒซ ๋ฒˆ์งธ Rust ๋ชจ๋“ˆ์€?

  • BPF (Berkeley Packet Filter) ์„œ๋ธŒ์‹œ์Šคํ…œ

    • ๊ธฐ์กด C ๊ธฐ๋ฐ˜ BPF ํ”„๋กœ๊ทธ๋žจ์„ Rust๋กœ ์žฌ์ž‘์„ฑํ•ด ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์ „์„ฑ์„ ํ™•๋ณด.
  • ๋“œ๋ผ์ด๋ฒ„ ๊ฐœ๋ฐœ

    • ๊ฐ„๋‹จํ•œ ๊ฐ€์ƒ ๋””๋ฐ”์ด์Šค ๋“œ๋ผ์ด๋ฒ„๊ฐ€ Rust๋กœ ๊ตฌํ˜„๋ผ, cargo ๋นŒ๋“œ ์‹œ์Šคํ…œ๊ณผ ์—ฐ๋™.

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


# 3๏ธโƒฃ ์ดˆ๋ณด์ž๋ฅผ ์œ„ํ•œ Rustโ€‘Linux ์‹œ์ž‘ ๊ฐ€์ด๋“œ

  1. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์ค€๋น„
bash

   sudo apt install build-essential libssl-dev bc bison flex libelf-dev

   sudo apt install rustc cargo   # Rust ์„ค์น˜
  1. Linux ์ปค๋„ ์†Œ์Šค ๋‹ค์šด๋กœ๋“œ
bash

   git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

   cd linux

   git checkout v6.8   # ์ตœ์‹  ๋ฉ”์ธ๋ผ์ธ ๋ฒ„์ „
  1. Rust ๋ชจ๋“ˆ ํ…œํ”Œ๋ฆฟ ๋งŒ๋“ค๊ธฐ
bash

   cargo new rust_hello --lib

   cd rust_hello

Cargo.toml์— kernel = { path = '../scripts/rust' }์™€ ๊ฐ™์€ ์„ค์ •์„ ์ถ”๊ฐ€ํ•˜๊ณ , src/lib.rs์— ๊ฐ„๋‹จํ•œ printk! ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

  1. ์ปค๋„์— ๋นŒ๋“œ ๋ฐ ๋กœ๋“œ
bash

   make -C /lib/modules/$(uname -r)/build M=$(pwd) modules

   sudo insmod rust_hello.ko

   dmesg | tail

์„ฑ๊ณต์ ์œผ๋กœ ๋กœ๋“œ๋˜๋ฉด ์ปค๋„ ๋กœ๊ทธ์— โ€œHello from Rust!โ€๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

์ด ๊ณผ์ •์„ ๋”ฐ๋ผ ํ•˜๋ฉด C๋ฅผ ๋ชฐ๋ผ๋„ Rust๋งŒ์œผ๋กœ ์ปค๋„ ๋ชจ๋“ˆ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ์ž์‹ ๊ฐ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


# 4๏ธโƒฃ ์•ž์œผ๋กœ์˜ ์ „๋ง โ€“ Rust์™€ Linux์˜ ์‹œ๋„ˆ์ง€

  • ๋ณด์•ˆ ๊ฐ•ํ™” : ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์ „์„ฑ ํ™•๋ณด๋กœ CVE(๊ณตํ†ต ์ทจ์•ฝ์  ๋ฐ ๋…ธ์ถœ) ๋ฐœ์ƒ๋ฅ  ๊ฐ์†Œ.

  • ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ : ํ’๋ถ€ํ•œ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๋งคํฌ๋กœ ์‹œ์Šคํ…œ์œผ๋กœ ์ฝ”๋“œ๋Ÿ‰ ๊ฐ์†Œ.

  • ์ปค๋ฎค๋‹ˆํ‹ฐ ํ™•๋Œ€ : Rust ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ธฐ์กด C ๊ธฐ๋ฐ˜ ์ปค๋„์— ์‰ฝ๊ฒŒ ์ฐธ์—ฌ ๊ฐ€๋Šฅ.

ํ•˜์ง€๋งŒ ์•„์ง ์ „์ฒด ์ปค๋„์„ Rust๋กœ ์ „ํ™˜ํ•˜๋Š” ๋‹จ๊ณ„๋Š” ์•„๋‹ˆ๋ฉฐ, C์™€ Rust๊ฐ€ ๊ณต์กดํ•˜๋Š” ๋ฉ€ํ‹ฐ์–ธ์–ด ํ™˜๊ฒฝ์ด ์ง€์†๋  ์ „๋ง์ž…๋‹ˆ๋‹ค. ์ดˆ๋ณด์ž๋Š” ๋จผ์ € ์ž‘์€ ๋ชจ๋“ˆ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ์ ์ฐจ ๋ณต์žกํ•œ ์„œ๋ธŒ์‹œ์Šคํ…œ์— ๋„์ „ํ•ด ๋ณด์„ธ์š”.


# ๊ฒฐ๋ก  โ€“ ์ง€๊ธˆ ๋ฐ”๋กœ Rust๋กœ ์ปค๋„ ๊ฐœ๋ฐœ์— ๋›ฐ์–ด๋“ค์–ด ๋ณด์„ธ์š”!

Linux ๋ฉ”์ธ๋ผ์ธ์— Rust๊ฐ€ ๊ณต์‹ ํฌํ•จ๋œ ๊ฒƒ์€ ๋‹จ์ˆœํ•œ ์–ธ์–ด ์ถ”๊ฐ€๊ฐ€ ์•„๋‹ˆ๋ผ, ์•ˆ์ „ํ•˜๊ณ  ํšจ์œจ์ ์ธ ์ปค๋„ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ํฐ ์ „ํ™˜์ ์ž…๋‹ˆ๋‹ค.

  • SEO ํ‚ค์›Œ๋“œ : Rust, Linux ๋ฉ”์ธ๋ผ์ธ, ์ปค๋„ ๊ฐœ๋ฐœ

์ง€๊ธˆ ์†Œ๊ฐœํ•œ ํ™˜๊ฒฝ ์„ค์ •๊ณผ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋งŒ ๋”ฐ๋ผ ํ•˜๋ฉด, ์—ฌ๋Ÿฌ๋ถ„๋„ ์ง์ ‘ Rust ๊ธฐ๋ฐ˜ ์ปค๋„ ๋ชจ๋“ˆ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ–‰๋™ ์œ ๋„ :

  1. ์œ„ ๊ฐ€์ด๋“œ๋ฅผ ๋”ฐ๋ผ ๋กœ์ปฌ์—์„œ Rust ๋ชจ๋“ˆ์„ ๋นŒ๋“œํ•ด ๋ณด์„ธ์š”.

  2. GitHub์— ์ž์‹ ์˜ ์ฒซ ๋ฒˆ์งธ Rustโ€‘Linux ํ”„๋กœ์ ํŠธ๋ฅผ ๊ณต๊ฐœํ•˜๊ณ , ์ปค๋ฎค๋‹ˆํ‹ฐ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์•„๋ณด์„ธ์š”.

  3. ์ตœ์‹  Linuxโ€‘Rust ๊ด€๋ จ ๋ฌธ์„œ๋ฅผ ์ •๊ธฐ์ ์œผ๋กœ ์ฒดํฌํ•˜๋ฉฐ ์ตœ์‹  ๋™ํ–ฅ์„ ๋†“์น˜์ง€ ๋งˆ์„ธ์š”.

์•ˆ์ „ํ•œ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด, ์˜ค๋Š˜ ๋ฐ”๋กœ Rust์™€ Linux์˜ ๋งŒ๋‚จ์— ๋›ฐ์–ด๋“ค์–ด ๋ณด์„ธ์š”! ๐Ÿš€

No comments yet. Be the first to comment.

More from this blog