Ubuntu 26.10, 핵심 명령어 전부 Rust로 교체: cp·mv·rm까지 끝낸 'oxidising' 작업

한눈에 보는 핵심 요약
Ubuntu 26.10 **'Stonking Stingray'**부터 리눅스 핵심 명령줄 유틸리티(coreutils)가 전부 Rust 구현으로 바뀝니다. 이전 LTS에서 보안 문제로 GNU 버전을 그대로 쓰던 cp, mv, rm도 이번에 Rust 버전으로 교체됐습니다.
- ✅
ls,cat,chmod,du는 물론cp,mv,rm까지 Rust 기반 uutils로 교체 - 🔒 26.04 LTS에서 전환을 막았던 TOCTOU 문제가 업스트림에서 해결됨
- 🧩 GNU와 호환되는 것을 목표로 하므로 사용자가 느끼는 기능 변화는 없음
- 📅 2026년 9월 중 베타, 10월 15일 정식 출시 예정
보류됐던 세 명령어까지 교체된 이유
Ubuntu 26.04 LTS에서도 대부분의 핵심 유틸리티는 이미 Rust 버전이었습니다. 다만 cp, mv, rm 세 가지만 GNU 구현으로 남아 있었는데, 이유는 TOCTOU(time-of-check to time-of-use) 문제였습니다.
TOCTOU란?
프로그램이 파일 상태를 확인하는 시점과 그 파일을 실제로 사용하는 시점 사이에 틈이 생기면, 공격자가 그 사이에 파일을 바꿔치기할 수 있습니다. 대표적인 경쟁 조건(race condition) 취약점입니다. 파일을 복사·이동·삭제하는 cp, mv, rm은 특히 이런 공격에 민감한 명령어입니다.
이 문제는 Canonical이 26.04 출시 전에 의뢰한 uutils 보안 감사에서 발견됐습니다. 그래서 LTS에서는 세 명령어를 GNU 버전으로 남겨 두는 보수적인 결정을 내렸고, 이후 업스트림 uutils에서 문제가 고쳐지면서 26.10에서 전환을 마무리했습니다.
💡 눈여겨볼 부분은 Rust가 메모리 안전성은 보장하지만 TOCTOU 같은 로직 차원의 취약점까지 막아 주지는 않는다는 점입니다. 언어만 바꾼다고 보안이 완성되지는 않기 때문에 외부 감사를 받는 과정이 필요했습니다.
Canonical이 추진하는 'Oxidising' 전략
Canonical 엔지니어들은 2025년부터 기반 소프트웨어를 Rust 대안으로 바꾸는 작업을 해 왔습니다. Rust(녹)에 빗대 이 작업을 **'oxidising(산화)'**이라고 부릅니다.
왜 Rust인가?
- C 컴파일러와 달리 Rust는 버퍼 오버플로, use-after-free 같은 메모리 버그를 컴파일 시점에 잡습니다.
- 오랫동안 쓰인 C 기반 시스템 도구에서 반복적으로 나오던 메모리 관련 취약점을 구조적으로 줄일 수 있습니다.
지금까지의 흐름
| 버전 | 주요 변화 |
|---|---|
| Ubuntu 25.10 | Rust 기반 유틸리티 첫 탑재, Rust 기반 sudo 기본 채택 |
| Ubuntu 26.04 LTS | 대부분의 coreutils를 Rust로 전환 (cp, mv, rm은 GNU 유지) |
| Ubuntu 26.10 | coreutils 전체 Rust 전환 완료 |
| Ubuntu 27.10 (계획) | Rust로 재작성한 NTP를 기본 시간 동기화 클라이언트로 사용 |
전환 과정에서 문제도 있었지만, Canonical은 보안 감사를 의뢰하는 등 서두르지 않고 진행해 왔습니다.
사용자가 체감하는 변화는?
거의 없습니다. uutils 프로젝트는 GNU coreutils를 수정 없이 그대로 대체하는 것을 목표로 하고, GNU와 동작이 다르면 버그로 취급합니다.
그래서 평소 쓰던 셸 스크립트나 명령어 습관은 바꿀 필요가 없습니다. 이번 전환은 기능을 바꾸려는 것이 아니라 보안을 강화하려는 것입니다.
다만 GNU coreutils의 세세한 동작이나 에러 메시지 형식에 의존하는 자동화 스크립트를 운영하고 있다면, 베타 기간에 미리 테스트해 보는 것을 권합니다.
Rust 생태계 투자와 다음 목표: 시간 동기화
Canonical은 비영리 재단 Trifecta Tech Foundation의 골드 스폰서로, Rust 소프트웨어 개발에 연간 4만 유로를 지원합니다.
이 재단은 현재 Network Time Protocol(NTP)을 Rust로 다시 작성하고 있고, Ubuntu는 27.10까지 이 구현을 기본 시간 동기화 클라이언트로 쓸 계획입니다. coreutils와 sudo에 이어 시간 동기화까지 Rust로 옮기겠다는 것입니다.
마무리하며
Ubuntu 26.10의 coreutils 전환은 한 배포판의 업데이트를 넘어, 메모리 안전 언어로 시스템 소프트웨어를 옮기는 흐름이 실제 배포판 수준에서 자리 잡고 있다는 사례입니다. 사용자 경험은 그대로 두고 보안을 높인다는 목표를 달성했는지는 9월 베타와 10월 15일 정식 출시 뒤 실제 사용에서 확인할 수 있을 것입니다.
여러분은 핵심 시스템 도구를 Rust로 바꾸는 흐름을 어떻게 보시나요? 🦀