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๋ ๋ํ ์ ์ ์ค๋ฒํ๋ก์ ๋ํ ๋ณดํธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ , ์ฌ์ฉํ๊ธฐ ์ ์ ๋ณ์ ๊ฐ์ ํ์ ์ด๊ธฐํ๊ฐ ํ์ํ๋ฉฐ, ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ค๋ฅ๋ฅผ ๋ ์ ์ฒ๋ฆฌํ๊ณ , ๊ธฐ๋ณธ์ ์ผ๋ก ๋ถ๋ณ ์ฐธ์กฐ ๋ฐ ๋ณ์ ๊ฐ๋ ์ ์ ์ฉํ๊ณ , ๊ฐ๋ ฅํ ์ ์ ์ ํ ์ง์ ์ ์ ๊ณตํ์ฌ ๋ ผ๋ฆฌ์ ์ค๋ฅ๋ฅผ ์ต์ํํฉ๋๋ค.
์ ๋ฒ์ ์ ํจ์น์์๋ ํจ์น์ ์ฒซ ๋ฒ์งธ ๋ฐ ๋ ๋ฒ์งธ ๋ฒ์ ์ ๋ํ ๋ ผ์ ์ค์ ์์ฑ๋ ์๊ฒฌ์ด ๊ณ์ํด์ ์ ๊ฑฐ๋ฉ๋๋ค. ๊ฐ์ฅ ๋์ ๋๋ ๋ณํ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- Rust 1.57์ ์์ ๋ฆด๋ฆฌ์ค๋ฅผ ์ฐธ์กฐ ์ปดํ์ผ๋ฌ๋ก ์ฌ์ฉํ๋๋ก ์ ํ๋์์ผ๋ฉฐ Rust 2021 ์ธ์ด์ ์์ ํ ๋ฒ์ ์ ๋ํ ๋งํฌ๊ฐ ์ ๊ณต๋์์ต๋๋ค. ์ด์ ์๋ ํจ์น๊ฐ Rust์ ๋ฒ ํ ๋ธ๋์น์ ๋ฌถ์ฌ ์์๊ณ ๋ค์๊ณผ ๊ฐ์ ์ผ๋ถ ์ธ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ต๋๋ค. ๋ถ์์ ํ ๊ฒ์ผ๋ก ๋ถ๋ฅ๋์์ต๋๋ค. Rust 2021 ์ฌ์์ผ๋ก์ ์ ํ์ ํตํด ์ฐ๋ฆฌ๋ const_fn_transmute, const_panic, const_unavailable_unchecked ๋ฐ core_panic ๋ฐ try_reserve์ ๊ฐ์ ํจ์น์์ ๋ถ์์ ํ ๊ธฐ๋ฅ์ ์ฌ์ฉ์ ํผํ๊ธฐ ์ํ ์์ ์ ์์ํ ์ ์์์ต๋๋ค.
- ํจ์น์ ํฌํจ๋ Rust ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ ๋น ๋ฒ์ ๊ฐ๋ฐ์ ๊ณ์๋์ด ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ๊ณผ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๋ "ํจ๋" ์ํ๊ฐ ๋ฐ์ํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๊ธฐ๋ฅ์ ์ ๊ฑฐํ๋๋ก ์์ ๋์์ต๋๋ค. ์ ๋ฒ์ ์์๋ ์ปค๋ Rust ์ฝ๋์์ ์ฌ์ฉ๋์ง ์๋ ๊ธฐ๋ฅ์ ๋นํ์ฑํํ๋ "no_rc" ๋ฐ "no_sync" ์ต์ ์ ๊ตฌํํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋์ฑ ๋ชจ๋ํํฉ๋๋ค. ์ปค๋์ ํ์ํ ๋ณ๊ฒฝ ์ฌํญ์ ๊ธฐ๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ ์กํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ ์ฃผ์ alloc ๊ฐ๋ฐ์์์ ์์ ์ด ๊ณ์๋ฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ปค๋ ์์ค์์ ์๋ํ๋ ๋ฐ ํ์ํ "no_fp_fmt_parse" ์ต์ ์ด Rust ๊ธฐ๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(์ฝ์ด)๋ก ์ด๋๋์์ต๋๋ค.
- CONFIG_WERROR ๋ชจ๋์์ ์ปค๋์ ๋น๋ํ ๋ ๋ฐ์ํ ์ ์๋ ์ปดํ์ผ๋ฌ ๊ฒฝ๊ณ ๋ฅผ ์ ๊ฑฐํ๊ธฐ ์ํด ์ฝ๋๊ฐ ์ ๋ฆฌ๋์์ต๋๋ค. Rust์์ ์ฝ๋๋ฅผ ๋น๋ํ ๋ ์ถ๊ฐ ์ปดํ์ผ๋ฌ ์ง๋จ ๋ชจ๋์ Clippy linter ๊ฒฝ๊ณ ๊ฐ ํ์ฑํ๋ฉ๋๋ค.
- seqlock(์ํ์ค ์ ๊ธ), ์ ์ ๊ด๋ฆฌ๋ฅผ ์ํ ์ฝ๋ฐฑ ํธ์ถ, I/O ๋ฉ๋ชจ๋ฆฌ(readX/writeX), ์ธํฐ๋ฝํธ ๋ฐ ์ค๋ ๋ ์ฒ๋ฆฌ๊ธฐ, GPIO, ์ฅ์น ์ก์ธ์ค, ๋๋ผ์ด๋ฒ ๋ฐ ์๊ฒฉ ์ฆ๋ช ์ ์ํ Rust ์ฝ๋์์์ ์ฌ์ฉ์ ์ํ ์ถ์ํ๊ฐ ์ ์๋์์ต๋๋ค.
- ๋๋ผ์ด๋ฒ ๊ฐ๋ฐ์ ์ํ ๋๊ตฌ๋ ์ฌ๋ฐฐ์น ๊ฐ๋ฅํ ๋ฎคํ ์ค, ๋นํธ ๋ฐ๋ณต๊ธฐ, ๋จ์ํ๋ ํฌ์ธํฐ ๋ฐ์ธ๋ฉ, ํฅ์๋ ์ค๋ฅ ์ง๋จ ๋ฐ ๋ฐ์ดํฐ ๋ฒ์ค ๋ ๋ฆฝ์ ์ธํ๋ผ๋ฅผ ํฌํจํ๋๋ก ํ์ฅ๋์์ต๋๋ค.
- ์ฐธ์กฐ ๊ณ์ฐ์ ์ํด ๋์ผํ ์ด๋ฆ์ ์ปค๋ API๋ฅผ ์ฌ์ฉํ๋ refcount_t ๋ฐฑ์๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋จ์ํ๋ Ref ์ ํ์ ์ฌ์ฉํ๋ ๋งํฌ ์์ ์ด ๊ฐ์ ๋์์ต๋๋ค. ํ์ค ํ ๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ๊ณต๋๋ Arc ๋ฐ Rc ์ ํ์ ๋ํ ์ง์์ด ์ ๊ฑฐ๋์์ผ๋ฉฐ ์ปค๋ ์์ค์์ ์คํ๋๋ ์ฝ๋์์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค(๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฒด์ ์ด๋ฌํ ์ ํ์ ๋นํ์ฑํํ๋ ์ต์ ์ด ์ค๋น๋์ด ์์ต๋๋ค).
- ํจ์น์๋ Rust๋ก ๋ค์ ์์ฑ๋ PL061 GPIO ๋๋ผ์ด๋ฒ ๋ฒ์ ์ด ํฌํจ๋์ด ์์ต๋๋ค. ๋๋ผ์ด๋ฒ์ ํน๋ณํ ํน์ง์ ๊ตฌํ์ด C ์ธ์ด์ ๊ธฐ์กด GPIO ๋๋ผ์ด๋ฒ๋ฅผ ๊ฑฐ์ ํ ์ค์ฉ ๋ฐ๋ณตํ๋ค๋ ๊ฒ์ ๋๋ค. Rust์์ ๋๋ผ์ด๋ฒ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์ตํ๊ณ ์ถ์ ๊ฐ๋ฐ์๋ฅผ ์ํด C ์ฝ๋๊ฐ Rust์์ ์ด๋ค ๊ตฌ์ฑ์ผ๋ก ๋ณํ๋๋์ง ์ดํดํ ์ ์๋๋ก ํ ์ค์ฉ ๋น๊ตํ๋ ๋ฐฉ๋ฒ์ด ์ค๋น๋์ด ์์ต๋๋ค.
- ๊ธฐ๋ณธ Rust ์ฝ๋๋ฒ ์ด์ค๋ libgccjit ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ AOT(Ahead-of-Time) ์ปดํ์ผ์ ๊ตฌํํ๋ GCC์ฉ Rustc ๋ฐฑ์๋์ธ Rustc_codegen_gcc๋ฅผ ์ฑํํ์ต๋๋ค. ๋ฐฑ์๋๋ฅผ ์ ์ ํ๊ฒ ๊ฐ๋ฐํ๋ฉด GCC๋ฅผ ์ฌ์ฉํ์ฌ ์ปค๋์ ํฌํจ๋ Rust ์ฝ๋๋ฅผ ์์งํ ์ ์์ต๋๋ค.
- ARM, Google, Microsoft ์ธ์๋ Red Hat์ Linux ์ปค๋์์ Rust ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ ๋ฐ ๊ด์ฌ์ ํ๋ช ํ์ต๋๋ค. Google์ Linux์ฉ Rust ํ๋ก์ ํธ์ ๋ํ ์ง์์ ์ง์ ์ ๊ณตํ๊ณ , Rust์์ Binder ํ๋ก์ธ์ค ๊ฐ ํต์ ๋ฉ์ปค๋์ฆ์ ์๋ก์ด ๊ตฌํ์ ๊ฐ๋ฐํ๊ณ ์์ผ๋ฉฐ, Rust์์ ๋ค์ํ ๋๋ผ์ด๋ฒ๋ฅผ ์ฌ์์ ํ ๊ฐ๋ฅ์ฑ์ ๊ณ ๋ คํ๊ณ ์๋ค๋ ์ ์ ์๊ธฐํด ๋ณด๊ฒ ์ต๋๋ค. Microsoft๋ Rust์์ Hyper-V์ฉ ๋๋ผ์ด๋ฒ๋ฅผ ๊ตฌํํ๊ธฐ ์์ํ์ต๋๋ค. ARM์ ARM ๊ธฐ๋ฐ ์์คํ ์ ๋ํ Rust ์ง์์ ๊ฐ์ ํ๊ธฐ ์ํด ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค. IBM์ PowerPC ์์คํ ์ฉ ์ปค๋์ Rust ์ง์์ ๊ตฌํํ์ต๋๋ค.
์ถ์ฒ : opennet.ru