2P by neo 2달전 | favorite | 댓글 1개

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의 이름 불일치 문제에 대한 논의

    • 레거시 네이밍 규칙의 어려움
    • 동일한 이름을 유지하거나 새로운 이름으로 감싸는 방법이 있음
    • 이름 짓기는 어려운 일임