2021.04.12

안드로이드 개발 언어에 '러스트' 추가… 고질적인 C/C++ 메모리 버그 잡는다

Paul Krill | InfoWorld
안드로이드 오픈소스 프로젝트가 안드로이드 모바일 OS 개발 언어에 러스트(Rust)를 추가했다. 그동안 OS 개발 작업에서 C/C++가 맡던 부분을 러스트가 맡게 되는데, 이를 통해 메모리 버그를 해결할 것으로 기대하고 있다.
 
ⓒ Gratisography

4월 6일 구글 블로그에 따르면, 안드로이드팀은 그동안 안드로이드 내 코드 정확성의 최우선 순위에 보안과 안정성, 품질을 뒀다. 안드로이드에서 고위험 보안 취약점의 약 70%를 차지하는 메모리 세이프티 버그는 안정성 이슈의 주요 과제 정도로 다뤘고, C와 C++의 세이프티 버그는 가장 까다로운 문제로 계속 남아 있었다.

이런 가운데 러스트가 돌파구를 마련할 것으로 기대된다. 안드로이드팀에 따르면, 러스트는 컴파일 시간 체크를 이용해 객체 라이프타임을 강제로 확인하는 방식으로 메모리 액세스가 유효함을 검증하고 결과적으로 메모리 세이프티를 보증한다. C나 C++에 버금가는 성능을 제공하면서 이런 세이프티를 달성한다는 장점도 있다.

러스트는 자바, 코틀린과 함께 안드로이드 OS 개발에서 사용하는 메모리-세이프 언어로 추가됐다. 안드로이드 OS는 플랫폼의 상당 부분에서 메모리 버그를 막는 데 자바를 사용하지만, 자바나 코틀린 모두 OS의 더 낮은 레이어에서는 쓸 수 없는 한계가 있었고, 이들 레이어에서는 C, C++ 같은 언어를 사용했다. 그러나 이제 리소스가 제약된 환경에서 러스트가 C, C++ 대신 예측 가능한 성능을 제공할 수 있게 됐다.

또한 그동안 개발자가 C와 C++를 이용할 때는 메모리 라이프사이클을 직접 관리해야 했는데 이 과정에서 실수가 발생하기 일쑤였다. 특히 복잡한 멀티스레드 코드베이스에서 작업할 때 오류가 많았다. 하지만 러스트는 메모리 사용을 자동으로 관리하므로 이런 실수를 크게 줄일 수 있다.

C와 C++는 모두 러스트에 비해 메모리 세이프티 보증이 취약하고 강력한 격리 작업이 필요하다. 모든 안드로이드 프로세스는 샌드박스로 처리되는데, OS 개발팀은 코드 세이프티를 위해 '2의 룰(rule of two)' 지침을 준수한다. 2의 룰이란 그 이름에서 알 수 있는 것처럼 신뢰할 수 없는 인풋을 다루는 코드와, C와 C++ 같은 안전하지 않은 실행 언어를 사용하는 코드, 또는 샌드박스 없이 실행하는 코드 중 2개만 선택할 수 있다는 의미다.

이런 지침을 따르면, 심각한 보안 취약점을 줄일 수 있지만, 샌드박스는 큰 비용이 들고 오버헤드와 레이턴시를 발생시킨다. 그러면서도 코드의 취약점을 완전히 제거하지는 못하는 한계가 있다.

반면 러스트와 같은 메모리 세이프 언어에는 이러한 한계가 없어서 코드의 버그를 크게 줄일 수 있다. 현재의 샌드박스 방식보다 효율성이 높고 샌드박스에 대한 필요성 자체를 줄여준다. 또한, 더 안전하고 리소스에 부담이 적은 신기능을 추가하기도 쉽다.

안드로이드팀의 메모리 안전 관련 노력은 기존 C/C++ 코드를 개선하는 것보다는 새로운 개발 작업에 먼저 적용될 예정이다. 메모리 버그 대부분은 최근 수정된 코드에서 발생하기 때문이다. 또한, 안드로이드팀에 따르면, 안드로이드 플랫폼에 새 언어를 추가하는 것은 툴체인, 관리가 필요한 의존성, 테스트 인프라와 툴 업데이트 등 많은 부분에서 후속 작업으로 이어진다. 물론 개발자가 새로 언어를 익혀야 하는 부분도 있다.

러스트 지원은 지난 18개월 간 안드로이드 오픈 소스 프로젝트에서 차근차근 추가돼 왔으며, 얼리 어답터 프로젝트가 곧 공개될 예정이다. editor@itworld.co.kr


2021.04.12

안드로이드 개발 언어에 '러스트' 추가… 고질적인 C/C++ 메모리 버그 잡는다

Paul Krill | InfoWorld
안드로이드 오픈소스 프로젝트가 안드로이드 모바일 OS 개발 언어에 러스트(Rust)를 추가했다. 그동안 OS 개발 작업에서 C/C++가 맡던 부분을 러스트가 맡게 되는데, 이를 통해 메모리 버그를 해결할 것으로 기대하고 있다.
 
ⓒ Gratisography

4월 6일 구글 블로그에 따르면, 안드로이드팀은 그동안 안드로이드 내 코드 정확성의 최우선 순위에 보안과 안정성, 품질을 뒀다. 안드로이드에서 고위험 보안 취약점의 약 70%를 차지하는 메모리 세이프티 버그는 안정성 이슈의 주요 과제 정도로 다뤘고, C와 C++의 세이프티 버그는 가장 까다로운 문제로 계속 남아 있었다.

이런 가운데 러스트가 돌파구를 마련할 것으로 기대된다. 안드로이드팀에 따르면, 러스트는 컴파일 시간 체크를 이용해 객체 라이프타임을 강제로 확인하는 방식으로 메모리 액세스가 유효함을 검증하고 결과적으로 메모리 세이프티를 보증한다. C나 C++에 버금가는 성능을 제공하면서 이런 세이프티를 달성한다는 장점도 있다.

러스트는 자바, 코틀린과 함께 안드로이드 OS 개발에서 사용하는 메모리-세이프 언어로 추가됐다. 안드로이드 OS는 플랫폼의 상당 부분에서 메모리 버그를 막는 데 자바를 사용하지만, 자바나 코틀린 모두 OS의 더 낮은 레이어에서는 쓸 수 없는 한계가 있었고, 이들 레이어에서는 C, C++ 같은 언어를 사용했다. 그러나 이제 리소스가 제약된 환경에서 러스트가 C, C++ 대신 예측 가능한 성능을 제공할 수 있게 됐다.

또한 그동안 개발자가 C와 C++를 이용할 때는 메모리 라이프사이클을 직접 관리해야 했는데 이 과정에서 실수가 발생하기 일쑤였다. 특히 복잡한 멀티스레드 코드베이스에서 작업할 때 오류가 많았다. 하지만 러스트는 메모리 사용을 자동으로 관리하므로 이런 실수를 크게 줄일 수 있다.

C와 C++는 모두 러스트에 비해 메모리 세이프티 보증이 취약하고 강력한 격리 작업이 필요하다. 모든 안드로이드 프로세스는 샌드박스로 처리되는데, OS 개발팀은 코드 세이프티를 위해 '2의 룰(rule of two)' 지침을 준수한다. 2의 룰이란 그 이름에서 알 수 있는 것처럼 신뢰할 수 없는 인풋을 다루는 코드와, C와 C++ 같은 안전하지 않은 실행 언어를 사용하는 코드, 또는 샌드박스 없이 실행하는 코드 중 2개만 선택할 수 있다는 의미다.

이런 지침을 따르면, 심각한 보안 취약점을 줄일 수 있지만, 샌드박스는 큰 비용이 들고 오버헤드와 레이턴시를 발생시킨다. 그러면서도 코드의 취약점을 완전히 제거하지는 못하는 한계가 있다.

반면 러스트와 같은 메모리 세이프 언어에는 이러한 한계가 없어서 코드의 버그를 크게 줄일 수 있다. 현재의 샌드박스 방식보다 효율성이 높고 샌드박스에 대한 필요성 자체를 줄여준다. 또한, 더 안전하고 리소스에 부담이 적은 신기능을 추가하기도 쉽다.

안드로이드팀의 메모리 안전 관련 노력은 기존 C/C++ 코드를 개선하는 것보다는 새로운 개발 작업에 먼저 적용될 예정이다. 메모리 버그 대부분은 최근 수정된 코드에서 발생하기 때문이다. 또한, 안드로이드팀에 따르면, 안드로이드 플랫폼에 새 언어를 추가하는 것은 툴체인, 관리가 필요한 의존성, 테스트 인프라와 툴 업데이트 등 많은 부분에서 후속 작업으로 이어진다. 물론 개발자가 새로 언어를 익혀야 하는 부분도 있다.

러스트 지원은 지난 18개월 간 안드로이드 오픈 소스 프로젝트에서 차근차근 추가돼 왔으며, 얼리 어답터 프로젝트가 곧 공개될 예정이다. editor@itworld.co.kr


X