๐ฆ Rust๊ฐ ๊ณต์์ ์ผ๋ก Linux ๋ฉ์ธ๋ผ์ธ์ ํฉ๋ฅ! ์ปค๋ ๊ฐ๋ฐ์ ์๋ก์ด ์ ํ์
# ์๋ก โ โ์ 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๋น๋ ์์คํ ๊ณผ ์ฐ๋.
- ๊ฐ๋จํ ๊ฐ์ ๋๋ฐ์ด์ค ๋๋ผ์ด๋ฒ๊ฐ Rust๋ก ๊ตฌํ๋ผ,
์ด๋ฌํ ์ฌ๋ก๋ ์ด๋ณด์์๊ฒ๋ ์น์ํ cargo ๋ช
๋ น์ด์ rustc ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํด ์ปค๋ ๋ชจ๋์ ๋น๋ํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. ๊ธฐ์กด์ make์ gcc๋ง ์ฌ์ฉํ๋ ํ๋ฆ๊ณผ ๋ฌ๋ฆฌ, Rust๋ ํจํค์ง ๋งค๋์ ๋ฅผ ํตํด ์์กด์ฑ์ ์๋ ๊ด๋ฆฌํด ๊ฐ๋ฐ ์ง์
์ฅ๋ฒฝ์ ๋ฎ์ถฅ๋๋ค.
# 3๏ธโฃ ์ด๋ณด์๋ฅผ ์ํ RustโLinux ์์ ๊ฐ์ด๋
- ๊ฐ๋ฐ ํ๊ฒฝ ์ค๋น
bash
sudo apt install build-essential libssl-dev bc bison flex libelf-dev
sudo apt install rustc cargo # Rust ์ค์น
- Linux ์ปค๋ ์์ค ๋ค์ด๋ก๋
bash
git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux
git checkout v6.8 # ์ต์ ๋ฉ์ธ๋ผ์ธ ๋ฒ์
- Rust ๋ชจ๋ ํ ํ๋ฆฟ ๋ง๋ค๊ธฐ
bash
cargo new rust_hello --lib
cd rust_hello
Cargo.toml์ kernel = { path = '../scripts/rust' }์ ๊ฐ์ ์ค์ ์ ์ถ๊ฐํ๊ณ , src/lib.rs์ ๊ฐ๋จํ printk! ํจ์๋ฅผ ๊ตฌํํฉ๋๋ค.
- ์ปค๋์ ๋น๋ ๋ฐ ๋ก๋
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 ๊ธฐ๋ฐ ์ปค๋ ๋ชจ๋์ ์์ฑํ ์ ์์ต๋๋ค.
ํ๋ ์ ๋ :
์ ๊ฐ์ด๋๋ฅผ ๋ฐ๋ผ ๋ก์ปฌ์์ Rust ๋ชจ๋์ ๋น๋ํด ๋ณด์ธ์.
GitHub์ ์์ ์ ์ฒซ ๋ฒ์งธ RustโLinux ํ๋ก์ ํธ๋ฅผ ๊ณต๊ฐํ๊ณ , ์ปค๋ฎค๋ํฐ ํผ๋๋ฐฑ์ ๋ฐ์๋ณด์ธ์.
์ต์ LinuxโRust ๊ด๋ จ ๋ฌธ์๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ์ฒดํฌํ๋ฉฐ ์ต์ ๋ํฅ์ ๋์น์ง ๋ง์ธ์.
์์ ํ ์์คํ ์ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด, ์ค๋ ๋ฐ๋ก Rust์ Linux์ ๋ง๋จ์ ๋ฐ์ด๋ค์ด ๋ณด์ธ์! ๐
Comments
Join the discussionNo comments yet. Be the first to comment.