# 파일 시스템을 위한 Rust

> Clean Markdown view of GeekNews topic #15859. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=15859](https://news.hada.io/topic?id=15859)
- GeekNews Markdown: [https://news.hada.io/topic/15859.md](https://news.hada.io/topic/15859.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-07-16T09:48:55+09:00
- Updated: 2024-07-16T09:48:55+09:00
- Original source: [lwn.net](https://lwn.net/Articles/978738/)
- Points: 2
- Comments: 1

## Topic Body

### 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가 있음

## Comments



### Comment 27294

- Author: neo
- Created: 2024-07-16T09:48:56+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=40966414) 
- 각 파일 시스템이 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의 이름 불일치 문제에 대한 논의
  - 레거시 네이밍 규칙의 어려움
  - 동일한 이름을 유지하거나 새로운 이름으로 감싸는 방법이 있음
  - 이름 짓기는 어려운 일임
