GN⁺: 파일 시스템을 위한 Rust
(lwn.net)Rust를 파일 시스템에 사용하기
목표
- Rust의 타입 시스템을 사용하여 컴파일 타임에 더 많은 오류를 잡음
- 자원 정리와 같은 작업을 자동화하여 C 코드보다 생산성을 높임
- 메모리 관련 취약점을 줄이고 디버깅 시간을 단축함
Rust의 장점
- Rust는 정의되지 않은 동작을 제거하고 코드 내부에서 무슨 일이 일어나고 있는지 볼 수 있는 기능을 제공함
- Rust로 작성된 코드의 정확성을 증명할 수 있어 기능 개발을 방해하는 버그가 줄어듦
Rust 타입 시스템의 예
-
iget_locked()
함수는 복잡한 요구 사항을 가지고 있음 - Rust에서는
get_or_create_inode()
함수로 대체 가능하며, 타입 시스템을 통해 이러한 요구 사항을 강제함
API 이름 변경에 대한 논의
- C API와 Rust API의 이름 불일치 문제
- 기존 개발 커뮤니티에 익숙하지 않을 수 있음
- 이름을 일치시키는 것이 필요할 수 있음
일반적인 문제
- Rust 추상화가 모든 커널 파일 시스템에 일반적으로 사용될지, 아니면 Rust로 작성된 간단한 파일 시스템에만 집중될지 결정 필요
- C 코드가 진화하면서 Rust 코드와의 동기화 문제 발생 가능
객체 수명 주기 문제
- 객체 수명 주기가 파일 시스템에 따라 다를 수 있음
- Rust API에 단일 수명 주기를 인코딩하면 일부 파일 시스템에서 작동하지 않을 수 있음
Rust 바인딩의 문제
- 모든 파일 시스템이 즉시 Rust로 전환되지 않을 것임
- C 코드가 진화하면서 Rust 바인딩이 깨질 수 있음
- Rust 바인딩이 깨지면 Rust-for-Linux 개발자들의 문제로 남음
결론
- Rust 바인딩 개발을 계속하면서 C 코드가 진화하도록 함
- Rust 타입 시스템에 많은 의미를 인코딩하는 것이 좋은지 나쁜지 시간이 지나면 명확해질 것임
GN⁺의 정리
- Rust를 파일 시스템에 도입하는 것은 메모리 안전성과 생산성을 높이는 데 큰 도움이 될 것임
- Rust 타입 시스템을 통해 복잡한 API 요구 사항을 강제할 수 있어 코드의 정확성을 높임
- 기존 C 개발자들이 Rust를 배우지 않으면 동기화 문제와 같은 어려움이 발생할 수 있음
- Rust 바인딩이 깨지면 이를 해결하는 것은 Rust-for-Linux 개발자들의 몫이 될 것임
- 비슷한 기능을 가진 프로젝트로는 Google의 Fuchsia OS가 있음
Hacker News 의견
-
각 파일 시스템이 inode 수명 주기를 다르게 관리하면서 동일한 함수로 관리하는 것은 추상화 계층의 반대임
- 파일 시스템별로 inode 수명 주기를 관리해야 함
-
Rust가 C 호출을 더 쉽게 만들기 위해 변경이 필요한지에 대한 질문이 있음
- Rust와 C의 상호 운용성에 대한 명확한 이해가 부족함
- C++와 Objective C는 헤더 파일을 포함하고 함수를 호출하면 됨
- Swift는 Objective C 파일을 포함하고 C를 호출할 수 있음
- Rust가 커널 개발자에게 맞추기보다는 언어 자체가 조금 유연해질 필요가 있음
-
Rust API가 C API를 감싸는 것인지 재구현하는 것인지 명확하지 않음
- 재구현이라면 C API와 동일한 이름을 사용하는 것이 문제를 일으킬 수 있음
-
Rust를 커널에 추가하는 것은 추가적인 복잡성을 초래함
- 새로운 OS를 처음부터 작성하면 언어의 모든 기능을 사용할 수 있음
- 기존의 방대한 코드베이스에 추가하면 추가적인 문제가 발생함
-
논의가 매우 문명적임
- 부정적인 톤에 동의하지 않음
- 관련된 사람들이 명확하게 문제점을 전달한 점에 대해 낙관적임
-
Linux 커널에 더 많은 옵션이 있는 것은 항상 유익함
- Rust가 모든 문제의 해결책은 아님
- Rust는 안전한 프로그래밍 모델을 제공하지만 제한적임
- 메모리 문제? Rust 사용!
- 동시성 문제? Rust로 전환!
- 하지만 unsafe 블록을 사용하지 않고는 C가 하는 모든 것을 할 수 없음
- Rust는 새로운 관점을 제공할 수 있지만 완전한 해결책은 아님
-
lwn.net 페이지 아래의 일부 댓글이 무례함
- 오픈 소스 프로젝트에 기여하는 사람에게 "과학은 한 번의 장례식으로 발전한다"는 댓글을 상상해 보라
-
C API와 Rust API의 이름 불일치 문제에 대한 논의
- 레거시 네이밍 규칙의 어려움
- 동일한 이름을 유지하거나 새로운 이름으로 감싸는 방법이 있음
- 이름 짓기는 어려운 일임