Rust-for-Linux ํ๋ก์ ํธ์ ์ ์์ธ Miguel Ojeda๋ Linux ์ปค๋ ๊ฐ๋ฐ์๊ฐ ๊ณ ๋ คํ ์ ์๋๋ก Rust ์ธ์ด๋ก ์ฅ์น ๋๋ผ์ด๋ฒ๋ฅผ ๊ฐ๋ฐํ๊ธฐ ์ํ v8 ๊ตฌ์ฑ ์์ ๋ฆด๋ฆฌ์ค๋ฅผ ์ ์ํ์ต๋๋ค. ์ด๋ ์ฒซ ๋ฒ์งธ ๋ฒ์ ์ ๊ณ ๋ คํ์ฌ ๋ฒ์ ๋ฒํธ ์์ด ๊ฒ์๋ ํจ์น์ ์์ ๋ ๋ฒ์ ์ ๋๋ค. Rust ์ง์์ ์คํ์ ์ธ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋์ง๋ง ์ด๋ฏธ linux-next ๋ธ๋์น์ ํฌํจ๋์ด ์๊ณ 5.20/6.0์ ๊ฐ์ ๋ฆด๋ฆฌ์ค์ ํตํฉ๋์๋ค๊ณ ์ฃผ์ฅํ๋ฉฐ ์ปค๋ ํ์ ์์คํ ์ ๋ํ ์ถ์ํ ๊ณ์ธต์ ์์ฑํ๊ณ ๋๋ผ์ด๋ฒ๋ฅผ ์์ฑํ๋ ์์ ์ ์์ํ ์ ์์ ๋งํผ ์ถฉ๋ถํ ์ฑ์๋์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ชจ๋. ์ด ๊ฐ๋ฐ์ Google๊ณผ Let's Encrypt ํ๋ก์ ํธ์ ์ฐฝ๋ฆฝ์์ธ ISRG(Internet Security Research Group)์์ ์๊ธ์ ์ง์๋ฐ๊ณ HTTPS์ ์ธํฐ๋ท ๋ณด์์ ํฅ์์ํค๋ ๊ธฐ์ ๊ฐ๋ฐ์ ์ด์งํฉ๋๋ค.
์ ๋ฒ์ ์์:
- ์ค๋ฅ ๋ฐ์ ์ "ํจ๋" ์ํ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์๋ ํดํท๊ณผ alloc ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ณํ์ด Rust 1.62 ๋ฆด๋ฆฌ์ค์ ๋ง์ถฐ ์ ๋ฐ์ดํธ๋์์ต๋๋ค. ์ด์ ์ ์ฌ์ฉ๋ ๋ฒ์ ๊ณผ ๋น๊ตํ์ฌ Rust ํดํท์ ์ปค๋ ํจ์น์ ์ฌ์ฉ๋๋ const_fn_trait_bound ๊ธฐ๋ฅ์ ๋ํ ์ง์์ ์์ ํํ์ต๋๋ค.
- ๋ฐ์ธ๋ฉ ์ฝ๋๋ ๋ณ๋์ ํฌ๋ ์ดํธ ํจํค์ง "๋ฐ์ธ๋ฉ"์ผ๋ก ๋ถ๋ฆฌ๋์ด ์์ด ๊ธฐ๋ณธ ํจํค์ง "์ปค๋"๋ง ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ ์ฌ๊ตฌ์ถ์ด ๋จ์ํ๋ฉ๋๋ค.
- ๋งคํฌ๋ก "concat_idents!" ๊ตฌํ concat_idents ๊ธฐ๋ฅ์ ์ฐ๊ฒฐ๋์ง ์๊ณ ์ง์ญ ๋ณ์์ ๋ํ ์ฐธ์กฐ ์ฌ์ฉ์ ํ์ฉํ๋ ์ ์ฐจ์ ๋งคํฌ๋ก ํ์์ผ๋ก ๋ค์ ์์ฑ๋์์ต๋๋ค.
- "static_assert!" ๋งคํฌ๋ก๊ฐ ๋ค์ ์์ฑ๋์ด ๋ชจ๋ ์ปจํ ์คํธ์์ ์์ ๋์ "core::assert!()"๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๋งคํฌ๋ก "build_error!" ๋ชจ๋์ "RUST_BUILD_ASSERT_{WARN,ALLOW}" ๋ชจ๋๊ฐ ์ค์ ๋ ๊ฒฝ์ฐ ์๋ํ๋๋ก ์กฐ์ ๋์์ต๋๋ค.
- "kernel/configs/rust.config" ์ค์ ์ ์ฌ์ฉํ์ฌ ๋ณ๋์ ํ์ผ์ ์ถ๊ฐํ์ต๋๋ค.
- ๋งคํฌ๋ก ๋์ฒด์์ ์ฒ๋ฆฌ๋ "*.i" ํ์ผ์ ์ด๋ฆ์ด "*.rsi"๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค.
- C ์ฝ๋์ ์ฌ์ฉ๋๋ ๊ฒ๊ณผ ๋ค๋ฅธ ์ต์ ํ ์์ค์ผ๋ก Rust ๊ตฌ์ฑ ์์๋ฅผ ๋น๋ํ๋ ์ง์์ด ์ค๋จ๋์์ต๋๋ค.
- ํ์ผ ์์คํ ์์ ์ ์ํ ๋ฐ์ธ๋ฉ์ ์ ๊ณตํ๋ fs ๋ชจ๋์ด ์ถ๊ฐ๋์์ต๋๋ค. Rust๋ก ์์ฑ๋ ๊ฐ๋จํ ํ์ผ ์์คํ ์ ์๊ฐ ์ ๊ณต๋ฉ๋๋ค.
- ์์คํ ๋๊ธฐ์ด ์์ ์ ์ํ ์์ ๋๊ธฐ์ด ๋ชจ๋์ด ์ถ๊ฐ๋์์ต๋๋ค(work_struct ๋ฐ workqueue_struct ์ปค๋ ๊ตฌ์กฐ์ ๋ํ ๋ฐ์ธ๋ฉ ์ ๊ณต).
- kasync ๋ชจ๋์ ๊ฐ๋ฐ์ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ๋ฒ(async)์ ๊ตฌํ๊ณผ ํจ๊ป ๊ณ์๋์์ต๋๋ค. Rust๋ก ์์ฑ๋ ์ฝ์ด ์์ค TCP ์๋ฒ์ ์๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
- [Threaded]Handler ์ ํ ๋ฐ [Threaded]Registration` ์ ํ์ ์ฌ์ฉํ์ฌ Rust ์ธ์ด์์ ์ธํฐ๋ฝํธ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ต๋๋ค.
- file_Operations ๊ตฌ์กฐ์ ๊ฐ์ ํจ์ ํฌ์ธํฐ ํ ์ด๋ธ ์์ ์ ๋ ์ฝ๊ฒ ํ ์ ์๋๋ก ์ ์ฐจ์ ๋งคํฌ๋ก "#[vtable]"์ ์ถ๊ฐํ์ต๋๋ค.
- ์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ชฉ๋ก "unsafe_list::List" ๊ตฌํ์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ์ฝ๊ธฐ ์ ๊ธ์ด ํ์ฌ ์ค๋ ๋์ ๋ฐ์ธ๋ฉ๋์ด ์๋์ง ํ์ธํ๊ธฐ ์ํด RCU(์ฝ๊ธฐ-๋ณต์ฌ-์ ๋ฐ์ดํธ) ๋ฐ Guard ์ ํ์ ๋ํ ์ด๊ธฐ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ์ปค๋ ์ค๋ ๋๋ฅผ ์์ฑํ๊ณ ์๋์ผ๋ก ์์ํ๋ Task::spawn() ํจ์๋ฅผ ์ถ๊ฐํ์ต๋๋ค. Task::wake_up() ๋ฉ์๋๋ ์ถ๊ฐํ์ต๋๋ค.
- ์ง์ฐ์ ์ฌ์ฉํ ์ ์๋ ์ง์ฐ ๋ชจ๋(msleep()์ ๋ํ ๋ํผ)์ ์ถ๊ฐํ์ต๋๋ค.
์ ์๋ ๋ณ๊ฒฝ ์ฌํญ์ ํตํด Rust๋ฅผ ๋๋ผ์ด๋ฒ ๋ฐ ์ปค๋ ๋ชจ๋ ๊ฐ๋ฐ์ ์ํ ์ XNUMX ์ธ์ด๋ก ์ฌ์ฉํ ์ ์๊ฒ ๋์์ต๋๋ค. Rust ์ง์์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ง ์๋ ์ต์ ์ผ๋ก ์ ๊ณต๋๋ฉฐ ์ด๋ก ์ธํด ์ปค๋์ ํ์ํ ๋น๋ ์ข ์์ฑ ์ฌ์ด์ Rust๊ฐ ํฌํจ๋์ง ์์ต๋๋ค. Rust๋ฅผ ์ฌ์ฉํ์ฌ ๋๋ผ์ด๋ฒ๋ฅผ ๊ฐ๋ฐํ๋ฉด ์ต์ํ์ ๋ ธ๋ ฅ์ผ๋ก ๋ ์์ ํ๊ณ ๋ ๋์ ๋๋ผ์ด๋ฒ๋ฅผ ๋ง๋ค ์ ์์ผ๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด ํด์ ๋ ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ก์ธ์คํ๊ณ , ๋ ํฌ์ธํฐ ์ญ์ฐธ์กฐ ๋ฐ ๋ฒํผ ์ค๋ฒ๋ฐ๊ณผ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค.
๋ฉ๋ชจ๋ฆฌ ์์ ์ฒ๋ฆฌ๋ ์ฝ๋ ์คํ ์ค ๋ฉ๋ชจ๋ฆฌ ์ก์ธ์ค์ ์ ํ์ฑ ํ๊ฐ๋ฟ๋ง ์๋๋ผ ์ฐธ์กฐ ํ์ธ, ๊ฐ์ฒด ์์ ๊ถ ๋ฐ ๊ฐ์ฒด ์๋ช
(๋ฒ์) ์ถ์ ์ ํตํด ์ปดํ์ผ ์๊ฐ์ Rust์์ ์ ๊ณต๋ฉ๋๋ค. Rust๋ ๋ํ ์ ์ ์ค๋ฒํ๋ก์ ๋ํ ๋ณดํธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ , ์ฌ์ฉํ๊ธฐ ์ ์ ๋ณ์ ๊ฐ์ ํ์ ์ด๊ธฐํ๊ฐ ํ์ํ๋ฉฐ, ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ค๋ฅ๋ฅผ ๋ ์ ์ฒ๋ฆฌํ๊ณ , ๊ธฐ๋ณธ์ ์ผ๋ก ๋ถ๋ณ ์ฐธ์กฐ ๋ฐ ๋ณ์ ๊ฐ๋
์ ์ ์ฉํ๊ณ , ๊ฐ๋ ฅํ ์ ์ ์ ํ ์ง์ ์ ์ ๊ณตํ์ฌ ๋
ผ๋ฆฌ์ ์ค๋ฅ๋ฅผ ์ต์ํํฉ๋๋ค.
์ถ์ฒ : opennet.ru