Android에서의 Rust: 더 빠르게 움직이며 문제 해결
(security.googleblog.com)- Android 플랫폼에서 Rust 도입 이후 메모리 안전 취약점 비율이 전체의 20% 이하로 감소, 보안성과 개발 효율이 동시에 향상됨
- Rust 코드는 C/C++ 대비 메모리 안전 취약점 밀도가 1000배 낮고, 롤백률 4배 감소, 코드 리뷰 시간 25% 단축
- Rust 사용 확대는 커널, 펌웨어, 1st-party 앱으로 확장되어, 시스템 전반의 기본 보안 수준 향상에 기여
- CrabbyAVIF에서 발견된 Rust 기반 첫 메모리 안전 취약점 ‘거의 발생’ 사례를 통해 Scudo 할당자와 안전한 unsafe 코드 교육의 중요성 확인
- Rust 전환은 보안 강화와 개발 속도 향상을 동시에 달성하는 새로운 소프트웨어 개발 패러다임으로 평가됨
Rust 도입의 효과와 2025년 데이터
- 2025년 Android의 메모리 안전 취약점 비율이 20% 미만으로 감소, Rust 중심의 보안 전략이 유효함을 입증
- Rust는 C/C++ 대비 메모리 안전 취약점 밀도 1000배 감소, 롤백률 4배 낮음, 코드 리뷰 시간 25% 단축
- Rust 도입은 단순한 보안 개선을 넘어 소프트웨어 전달 속도 향상으로 이어짐
- 데이터는 Android 플랫폼 내 C, C++, Java, Kotlin, Rust 전반의 1st-party 및 3rd-party 코드 변경을 포함
시스템 언어 전환과 개발 생산성
- Android는 시스템 프로그래밍 언어로 Rust를 C/C++의 대안으로 채택, 유사한 제어 수준을 제공하면서 위험을 줄임
- 1st-party 코드 기준으로 Rust 코드 증가세가 C++을 추월, 두 언어 간 개발 지표 비교가 가능해짐
- DORA 프레임워크를 활용해 Throughput(전달 속도) 과 Stability(안정성) 을 측정
- Rust와 C++의 코드 크기, 개발자 풀, 시간 경향을 통제하여 비교 수행
Throughput: 코드 리뷰 효율 향상
- Rust 코드는 C++ 대비 20% 적은 수정(revision) 이 필요하며, 코드 리뷰 시간 25% 단축
- 2023~2024년 사이 Rust 전문성 향상으로 리뷰 효율이 크게 개선
- 리뷰 및 재작업 감소는 생산성 향상으로 이어지며, 안정성 개선이 가장 큰 효과 요인으로 작용
Stability: 롤백률 감소와 품질 향상
- DORA 기준에서 Rust의 롤백률은 C++ 대비 약 4배 낮음, 특히 중대형 변경에서 두드러짐
- 낮은 롤백률은 생산성 향상에 직접 기여, 빌드 재작업·포스트모템·팀 차단 등 부수적 비용을 줄임
- 2022년 Google 엔지니어 설문에서도 Rust가 리뷰가 쉽고 정확도가 높다는 평가를 받음
- 데이터는 이러한 인식을 실증적으로 뒷받침
보안과 생산성의 동시 향상
- 과거에는 보안 강화가 성능 저하나 개발 지연을 초래했으나, Rust 전환은 보안과 효율을 동시에 개선
- Rust 도입으로 보안, 개발 효율, 제품 안정성 모두 향상되는 구조 형성
Rust 확산 영역
-
커널: Android 6.12 Linux 커널에서 Rust 지원 및 첫 Rust 드라이버 도입
- Arm·Collabora와 협력해 Rust 기반 GPU 드라이버 개발 진행 중
-
펌웨어: Rust 도입으로 고권한·제약 환경의 보안성 강화, 관련 튜토리얼·교육·코드 공개
- Arm과 협력한 Rusted Firmware-A 프로젝트 진행
-
1st-party 앱:
- Nearby Presence: Bluetooth 기반 기기 탐색 프로토콜을 Rust로 구현, Google Play Services에서 실행
- MLS: RCS 메시징용 보안 프로토콜을 Rust로 구현, 향후 Google Messages 앱에 포함 예정
- Chromium: PNG, JSON, 웹폰트 파서를 Rust로 교체, Rule of 2 준수 용이
Rust 기반 첫 메모리 안전 취약점 ‘거의 발생’ 사례
- CrabbyAVIF에서 선적 직전 버퍼 오버플로우 취약점(CVE-2025-48530) 발견, 공개 전 수정 완료
- Scudo hardened allocator가 가드 페이지로 인해 취약점을 비악용 가능(non-exploitable) 상태로 만듦
- Scudo는 Pixel 등에서 기본 사용 중이며, 파트너사에도 의무화 추진 중
- 크래시 리포팅 개선으로 오버플로우 감지 신호 명확화
Unsafe 코드 관리와 교육 강화
- OS 개발에는 불가피하게 unsafe 코드(C/C++ 또는 unsafe Rust) 필요
- Google은 Comprehensive Rust 교육 과정에 unsafe 코드 심화 모듈 추가
- unsafe 코드의 건전성(soundness), 정의되지 않은 동작, 안전 주석, 안전 추상화 기법 등을 다룸
- unsafe Rust의 이해도 향상은 Android 및 오픈소스 생태계 전반의 코드 품질 향상으로 이어짐
취약점 밀도 비교
- Android Rust 코드 약 500만 줄 중 1건의 잠재적 취약점 발견 → Rust 취약점 밀도 0.2/MLOC
- C/C++의 과거 평균은 1,000/MLOC, 즉 1000배 이상 감소
- 메모리 안전 취약점 밀도 감소는 전체 보안 아키텍처의 효과성 강화로 이어짐
- Rust 코드 중 약 4%는
unsafe{}블록이지만, 데이터상 C/C++보다 버그 가능성이 낮음- 이유로는 안전 검사 유지, 캡슐화, 추가 검토 강화 등이 있음
결론
- 과거에는 보안 확보를 위해 정적 분석·샌드박싱·패치 등 고비용 대응이 필요했음
- Rust 전환은 보안성과 효율성을 동시에 확보하는 새로운 접근
- 이제는 “빠르게 개발하고 나중에 고치는” 방식이 아니라, “빠르게 개발하면서 동시에 고치는” 단계로 진입
- 보안이 강화될수록 성능과 생산성 회복 가능성도 커짐
감사
- CVE-2025-48530 분석, Scudo 개선, unsafe Rust 교육 개발, Rust 활용 정보 제공 등 기여자 다수 언급
- Android Rust 팀과 전체 Android 조직의 지속적 품질 개선 노력에 감사 표시
Embassy로 펌웨어 개발을 살짝 손대보니
언어적 안정성도 좋지만.... 툴링이 워낙 좋다보니, c/c++ 사용하던 때에 비해 생산성이 압도적 입니다.
Hacker News 의견
-
5백만 줄의 Rust 코드에서 단 하나의 메모리 안전성 취약점만 발견되었음
즉, Rust는 백만 줄당 0.2건의 취약점 비율을 보임
반면 C/C++은 백만 줄당 1,000건 수준이라, 차이가 압도적임- 인터넷에는 여전히 “Rust로 리라이트하자”는 말만 나와도 비난이 쏟아지는 곳이 있음
하지만 이런 명확한 데이터 앞에서 왜 여전히 무시하는지 이해하기 어려움
나 자신은 아직 Rust를 써본 적 없지만, 언젠가 꼭 배워볼 생각임 - 개인적으로는 이 글에서 “코드 리뷰가 쉬워지고 롤백이 줄어든다”는 점이 더 인상 깊었음
보안도 중요하지만, 롤백 없는 배포야말로 개발자가 진짜 원하는 것임
Rust로 작성하면 그런 안정감이 있음 - Rust는 진정한 공학적 돌파구임
컴퓨터 과학에서 이런 혁신은 정말 드물게 나오는 것임 - 만약 이 통계가 사실이라면, C++의 미래는 어둡다고 봄
2025년에 C++을 쓸 이유는 기존 코드베이스 유지 외에는 거의 없음
새로 만드는 건 전부 Rust로 가야 함 - 다만 이건 새 코드 vs 오래된 코드의 비교라 완전히 공정하진 않음
새 프로젝트는 최신 테스트 체계와 명확한 목표를 가지고 시작하니까
그래도 Rust가 C++보다 정신적으로 건강한 언어라는 건 부정할 수 없음
- 인터넷에는 여전히 “Rust로 리라이트하자”는 말만 나와도 비난이 쏟아지는 곳이 있음
-
Rust 배우는 게 정말 고통스러웠음, 다른 언어보다 훨씬 복잡했음
하지만 컴파일러와 몇 번 씨름하고 나면, 코드가 돌아갈 때 거의 문제가 없다는 확신이 생김
Ruby, JS/TS, Python을 쓰다가 Rust로 오니 “컴파일되면 80~90% 완성”이라는 느낌이 듦
게다가 빠름- 내가 제일 좋아하는 Rust의 특징은 런타임 에러를 컴파일 타임에 잡는 것임
컴파일러와 싸우는 과정이 사실은 숨어 있던 버그를 미리 고치는 과정임 - 어느 순간부터는 컴파일러와 싸우지 않고 협업하게 됨
Rust의 사고방식이 머릿속을 지배하게 됨 - Rust 배우기 쉽다고? 나도 4~5번은 새로 배워봤음
그만큼 잊기 쉽고 다시 배우기 쉬운 언어라는 농담임 - TypeScript에서도 이런 안정감을 느끼지 못했는지 궁금함
Ruby, JS, Python은 동의하지만 TS는 조금 다르다고 생각함
- 내가 제일 좋아하는 Rust의 특징은 런타임 에러를 컴파일 타임에 잡는 것임
-
Google은 아직 Android userspace에서 Rust를 공식 지원하지 않음
NDK와 Android Studio는 여전히 C/C++만 지원함
Rust를 쓰려면 커뮤니티가 직접 도구를 만들어야 함- 사실 Google은 NDK 자체를 점점 없애려는 방향으로 가고 있음
JVM 쪽 코드 없이는 앱을 만들기 어려움 - 그래도 Rust로 .so 파일을 빌드해 NDK에 넣는 건 가능함
Android의 ABI는 언어에 상관없이 규칙만 지키면 됨
- 사실 Google은 NDK 자체를 점점 없애려는 방향으로 가고 있음
-
이건 C++을 침몰시킨 폭탄 같은 사건임
이제 “Rust도 unsafe하다”거나 “C++도 잘 쓰면 안전하다”는 변명은 힘들어짐- Rust의 장점은 단순히 안전성뿐 아니라 cargo, 문법, 모듈 관리 전반임
안전한 코드 작성은 귀찮지만, 일단 통과하면 멀티스레드 환경에서도 자신감이 생김
Android 앱도 Rust로 만들고 싶음 - 언어 전쟁에는 관심 없음
단지 안전한 시스템 도구를 만들 수 있는 선택지가 늘어난 게 반가움 - Rust 컴파일러도 결국 LLVM과 GCC 위에 서 있음
산업 표준은 여전히 C/C++ 중심이라 Rust가 완전히 대체하긴 어려움 - 결국 어떤 소프트웨어 종류냐에 따라 Rust의 적합성이 달라짐
- Rust의 장점은 단순히 안전성뿐 아니라 cargo, 문법, 모듈 관리 전반임
-
롤백률이 4배 차이 난다는 건 충격적임
대부분의 수치는 이미 예상된 현실이지만, 이건 새로움- Rust가 안전하다는 건 다들 알았지만, 1000배 차이는 놀라움
Rust가 특별히 완벽하다기보다, 기존 코드의 버그가 그만큼 많다는 뜻임
대규모 코드베이스에서 이런 데이터가 나온 건 인상적임 - 대부분의 코드베이스는 초기 테스트 설계가 부족함
처음부터 모듈 단위의 수용 테스트 시스템을 만들면 Rust가 하는 검증을 테스트로 대체할 수 있음
메모리 누수뿐 아니라 성능 저하까지 감시 가능함 - 새 코드는 Rust로, 오래된 코드는 C++로 유지했다면
단순히 오래된 코드의 리스크 차이일 수도 있음 - 코드 크기 차이에도 불구하고 롤백률이 일정하다는 점이 흥미로움
- Rust가 안전하다는 건 다들 알았지만, 1000배 차이는 놀라움
-
친구가 Rust 리라이트 프로젝트를 맡게 됐는데,
“이걸로 3년치 월급은 보장됐다”고 농담했음
리라이트 → 메모리 안전 확보 → 안정된 급여 루프라는 농담 섞인 전략임
Rust 컴파일러가 느리게 컴파일하는 동안 옛 코드를 읽으며 여유롭게 일할 수 있음 -
이 데이터는 혼란 변수를 통제하지 않았음
보통 리라이트 대상은 이미 잘 이해된 코드라 리뷰가 빠르고 롤백이 적음
반면 복잡한 레거시 코드는 리뷰가 길고 롤백이 많음- 하지만 첫 번째 차트는 단순히 그런 현상만으로 설명되지 않음
쉬운 코드만 리라이트했다면, 메모리 안전 취약점 비율이 다르게 나왔을 것임
실제로는 문제 많은 코드일수록 Rust로 다시 쓰는 경향이 있음
완벽한 실험은 아니지만, 실제 효과로 보는 게 더 타당함 - 이 글은 대부분 신규 코드 작성에 대한 이야기임
- 변경 크기(S/M/L)별로 비교해 혼란을 줄이려 했음
라인 삭제량 기준으로 리라이트 규모를 분석하면 더 흥미로울 것 같음 - 테스트 커버리지가 높은 복잡한 프로젝트일수록
오히려 리라이트하기 쉬운 환경이 됨
Rust의 장점을 믿지만, 이건 과학적 증거라기보다 강력한 경험적 근거로 봄
- 하지만 첫 번째 차트는 단순히 그런 현상만으로 설명되지 않음
-
앞으로 Rust 도입이 비메모리 안전성 버그에도 어떤 영향을 줄지 궁금함
-
나는 게임 개발에 Rust를 씀 (Bevy는 아님)
안정성과 처리량 덕분에 다른 언어로 돌아갈 생각이 없음- Bevy 없이 Rust로 게임을 만든다니 흥미로움
어떤 crate 조합과 아키텍처를 쓰는지 궁금함
나도 취미로 게임을 만드는데 Bevy는 조금 과하다고 느꼈음
- Bevy 없이 Rust로 게임을 만든다니 흥미로움
-
이제 Rust는 핵심 시스템 코드에도 충분히 자리 잡았다고 느낌
더 이상 uphill battle이 아님
“Rust로 다시 써라”는 게 밈이 아니라 실제 근거가 쌓이고 있음-
Phoronix의 Rust 관련 글을 보면
댓글의 80%가 여전히 Rust 혐오자임
“C++도 잘 쓰면 안전하다”, “Rust도 버그 있다” 같은 반복된 주장뿐임
무지한 비판이지만, 이제는 웃기기보다 안타까움 - 이 접근은 “기존 코드 리라이트”가 아니라 신규 코드를 Rust로 작성하는 전략임
- Rust는 Android처럼 커널과 소프트웨어를 직접 관리하는 환경에선 완벽히 맞음
하지만 모든 곳에 적용하자는 건 과함
Rust의 소유권 모델은 개발 속도를 늦추고, 언어 자체도 아직 진화 중임
네트워크 지연이 큰 서비스라면 Python이나 Node가 더 효율적임
즉, Rust는 훌륭하지만 모든 문제의 해답은 아님
-
Phoronix의 Rust 관련 글을 보면