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๋ ๋ํ ์ ์ ์ค๋ฒํ๋ก์ ๋ํ ๋ณดํธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ , ์ฌ์ฉํ๊ธฐ ์ ์ ๋ณ์ ๊ฐ์ ํ์ ์ด๊ธฐํ๊ฐ ํ์ํ๋ฉฐ, ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ค๋ฅ๋ฅผ ๋ ์ ์ฒ๋ฆฌํ๊ณ , ๊ธฐ๋ณธ์ ์ผ๋ก ๋ถ๋ณ ์ฐธ์กฐ ๋ฐ ๋ณ์ ๊ฐ๋ ์ ์ ์ฉํ๊ณ , ๊ฐ๋ ฅํ ์ ์ ์ ํ ์ง์ ์ ์ ๊ณตํ์ฌ ๋ ผ๋ฆฌ์ ์ค๋ฅ๋ฅผ ์ต์ํํฉ๋๋ค.
ํจ์น์ ์ ๋ฒ์ ์์๋ ํจ์น์ ์ฒซ ๋ฒ์งธ, ๋ ๋ฒ์งธ, ์ธ ๋ฒ์งธ ๋ฐ ๋ค ๋ฒ์งธ ๋ฒ์ ์ ๋ํ ๋ ผ์ ์ค์ ์ธ๊ธ๋ ๋ด์ฉ์ด ๊ณ์ํด์ ์ ๊ฑฐ๋์์ต๋๋ค. ์ ๋ฒ์ ์์๋:
- Intel์ด ์ง์ํ๋ 0DAY/LKP ๋ด์ ๊ธฐ๋ฐ์ผ๋ก ํ ์ง์์ ํตํฉ ์์คํ ์ Rust ์ง์์ ์ํ ๊ตฌ์ฑ ์์ ํ ์คํธ๊ฐ ์ถ๊ฐ๋์์ผ๋ฉฐ ํ ์คํธ ๋ณด๊ณ ์ ๋ฐํ์ด ์์๋์์ต๋๋ค. ์ฐ๋ฆฌ๋ Rust ์ง์์ KernelCI ์๋ํ ํ ์คํธ ์์คํ ์ ํตํฉํ ์ค๋น๋ฅผ ํ๊ณ ์์ต๋๋ค. GitHub CI ๊ธฐ๋ฐ ํ ์คํธ๊ฐ ์ปจํ ์ด๋ ์ฌ์ฉ์ผ๋ก ์ ํ๋์์ต๋๋ค.
- Rust ์ปค๋ ๋ชจ๋์ ํฌ๋ ์ดํธ ์์ฑ โ#![no_std]โ ๋ฐ โ#![feature(โฆ)]โ๋ฅผ ์ ์ํ ํ์๊ฐ ์์ต๋๋ค.
- ๋จ์ผ ์ด์ ๋ธ๋ฆฌ ๋์(.o, .s, .ll ๋ฐ .i)์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ์ฝ๋ ์ง์นจ์ ์ฃผ์("//") ๋ถ๋ฆฌ ๋ฐ ์ฝ๋ ๋ฌธ์ํ("///")์ ๋ํ ๊ท์น์ ์ ์ํฉ๋๋ค.
- is_rust_module.sh ์คํฌ๋ฆฝํธ๊ฐ ์ฌ์์ ๋์์ต๋๋ค.
- "CONFIG_CONSTRUCTORS" ๊ตฌํ์ ๊ธฐ๋ฐ์ผ๋ก ์ ์ (์ ์ญ ๊ณต์ ๋ณ์) ๋๊ธฐํ ํ๋ฆฌ๋ฏธํฐ๋ธ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ์ ๊ธ ๊ด๋ฆฌ๊ฐ ๋จ์ํ๋์์ต๋๋ค. Guard์ GuardMut์ด ๊ฒฐํฉ๋์ด ํ๋์ ๋งค๊ฐ๋ณ์ํ๋ ์ ํ์ ๋๋ค.
- ์ฅ์น ๋ฑ๋ก ์ ์ถ๊ฐ ๋งค๊ฐ๋ณ์๋ฅผ ์ ์ํ ์ ์์ต๋๋ค.
- rw_semaphore C ๊ตฌ์กฐ์ ๋ํ ๋ํผ ์ญํ ์ ํ๋ "RwSemaphore" ์ถ์ํ๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
- mmap์ ์ฌ์ฉํ๊ธฐ ์ํด ์๋ก์ด mm ๋ชจ๋๊ณผ VMA ์ถ์ํ๊ฐ ์ถ๊ฐ๋์์ต๋๋ค(vm_area_struct ๊ตฌ์กฐ์ ๋ํ ๋ํผ).
- GPIO PL061 ๋๋ผ์ด๋ฒ๊ฐ "dev_*!" ๋งคํฌ๋ก๋ฅผ ์ฌ์ฉํ๋๋ก ๋ณํ๋์์ต๋๋ค.
- ์ฝ๋์ ์ผ๋ฐ์ ์ธ ์ ๋ฆฌ๊ฐ ์ํ๋์์ต๋๋ค.
์ถ์ฒ : opennet.ru