Hacker News가 주목한 Surelock, deadlock을 compile time에 막는 Rust mutex 설계

왜 Hacker News에서 반응했나

2026년 4월 12일 기준 이 글은 Hacker News에서 212 points와 67 comments를 모았다. 이유는 단순한 lint나 runtime detector가 아니라, Rust에서 익숙한 concurrency 문제인 deadlock을 훨씬 공격적으로 다루기 때문이다. Brooklyn Zelenka는 상당수의 mutex 기반 코드에서 deadlock freedom을 convention이 아니라 compile time 검증으로 끌어올릴 수 있다고 주장한다.

글은 Coffman conditions에서 출발해 그중 circular wait를 깨는 데 집중한다. 개발자가 lock order를 문서나 팀 규칙으로만 기억하는 대신, Surelock은 lock을 잡을 때마다 소비되고 다시 발행되는 move-only MutexKey를 도입한다. 이 key는 지금까지 어떤 lock level을 통과했는지를 type level에 남기기 때문에, 뒤로 가는 acquisition은 compiler가 즉시 거부할 수 있다.

설계의 핵심

같은 level의 여러 lock은 LockSet이 각 mutex 내부의 stable한 LockId 순서로 정렬해 잡는다. 그래서 서로 다른 caller가 반대 순서로 요청해도 acquisition order는 같아진다.

서로 다른 resource class는 Level<N>와 LockAfter trait bound로 모델링해, 증가하는 방향의 lock만 compile time에 허용한다.

저자는 DAG보다 total order를 택한다. 독립적으로 보이는 branch라도 서로 다른 caller가 반대 경로를 고르면 deadlock이 다시 생길 수 있기 때문이다.

공개 API는 safe하게 유지하고, unsafe는 raw mutex internals 안으로 가둔다. 또한 crate는 no_std 환경까지 염두에 두고 설계됐다.

왜 의미가 있나

이것이 Rust의 모든 concurrency 문제를 해결한다는 뜻은 아니다. 글 자체도 Surelock이 아직 pre-release이며, lock-free programming이나 actor model을 완전히 대체하려는 것이 아니라 더 나은 ergonomic balance를 찾으려는 시도라고 선을 긋는다. 그래도 아이디어의 무게는 분명하다. deadlock prevention을 나중에 디버깅하는 문제가 아니라, 애초에 잘못된 모델링을 build 단계에서 막는 문제로 바꾸기 때문이다.

Rust 팀이 여전히 일반적인 mutex를 많이 쓰는 현실을 생각하면, 이 접근은 충분히 흥미롭다. 문서화된 lock order나 code review 감에 의존하는 대신, compiler가 현재 lock state의 witness를 들고 다니게 하는 방식이기 때문이다. 그래서 이 글은 단순한 crate 소개보다, Rust가 concurrency safety를 어디까지 끌어올릴 수 있는지에 대한 설계 논쟁으로 읽힌다.

Original source: Surelock blog post. Hacker News discussion: thread.