리눅스 리뷰 #2 Android Rust Binder 패치

"We're generally not proponents of rewrites (nasty uncomfortable things that make you late for dinner!). So why rewrite Binder?"


2023년 11월 1일에 작성된 메일의 첫 줄이 크게 의미심장합니다. 왜 저녁 식사를 늦게 만드는 불쾌하고 또 불편한 이 지지 받지 못할 일을 하려는 것일까요?


안드로이드에서 바인더는 각각 독립된 프로세서들을 연결해주는 IPC와 같은 역할을 하는데, 기존에 C로 되어 있는 구현을 "Rust로 재작성"한다는 내용입니다.


기존에 C의 구현은


  1. 복잡성

    수많은 오류 시나리오를 처리하면서도 13개의 서로 다른 잠금, 7개의 참조 카운터 및 아토믹 변수를 결합하고 중첩하면서도 모든 작업을 최대한 빠르고 효율적으로 수행해야 하는데, 이런 작업을 하기에는 기존에 작성된 C 의 코드가 너무 복잡하다.

  2. 기술부채

    천 줄이 넘는 함수와 오류가 발생하기 쉬운 구조 등으로 인하여 새로운 구현이나 수정 등이 어렵다.

  3. 보안

    Android에서 샌드박스에서 실행되는 프로그램조차 이 바인더에 직접 접근할 수 있다.


이렇게 3가지의 주된 이유로 보안문제와 기술부채를 해결하면서 안드로이드의 바인더를 발전시키기 위해서 복잡성을 줄여야 하고, 이는 Rust 를 통해서 해결 가능할 수 있기에 Rust 로 재작성하기로 결정하였습니다.


러스트를 통해서


  • 참조 계산, 잠금, 범위 확인과 관련된 실수를 쉽게 방지 가능

  • 소멸자와 같은 기능을 사용하여 단순화된 오류 처리가 가능하여 오류 처리의 복잡성을 줄이는데 효율적

  • 바인더 드라이버에는 복잡한 소유권을 갖는 다양한 개체가 존재하는데, 예를 들어, 일부 포인터는 참조 카운트를 소유하고, 일부 포인터는 독점 소유권을 가지며, 일부 포인터는 객체를 참조하는데, 이런 소유권과 관련된 부분을 쉽게 구현 가능

  • 프로그래머가 객체 수명 관리를 구현해주어야 하는 복잡성이 사리짐


이런 이점을 얻을 수 있기에 재작성 하기로 결정하였다고 합니다.


그리고 이렇게 재작성하는데 있어서 기존 디자인에서 신중하게 고려된 여러 개념을 반영하고, 코드 상태, 구조, 가독성, 견고성, 보안, 유지 관리 가능성 및 확장성을 향상시키는 것을 목표로 잡았습니다.


러스트로 작성된 바인더와 C 로 작성된 바인더의 성능 벤치마킹의 결과 역시 러스트 바인더로 작성된 안드로이드 장치(테스트 장치)가 정상적으로 부팅되었으며, 다양한 앱과 기능이 문제 없이 실행되고 모든 테스트를 통과했다고 합니다.


기능의 경우 러스트 바인더는 아직 일부 디버깅을 제외하고 C 바인더가 지원하는 모든 기능을 구현했다고 합니다.


또한 성능 역시 C 바인더와 유사한 성능을 가지고 있다고 하네요. 하지만 러스트 바인더의 경우 트랜잭션 규모가 큰 경우는 아직 C 바인더 성능에 미치지 못하지만 이를 해결할 수 있으며 해결해 나갈 것 이라고 합니다.


Ps. 러스트 공부할 생각이 없었는데, 러스트도 공부 리스트에 넣어 두는 것으로 🤪


https://lore.kernel.org/rust-for-linux/20231101-rust-binder-v1-0-08ba9197f637@google.com/

[PATCH RFC 00/20] Setting up Binder for the future - Alice Ryhl

kernel.org

[PATCH RFC 00/20] Setting up Binder for the future - Alice Ryhl

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2023년 12월 19일 오전 8:57

댓글 0

    함께 읽은 게시물

    개발자는 개발만 잘하면 될까

    최근에 친구가 추천해준 데일 카네기의 인간관계론을 읽던 중 고액 연봉을 받는 엔지니어들의 특징에 대한 흥미로운 내용이 있었다.

    ... 더 보기

     • 

    저장 14 • 조회 2,622


    리트코드 102. Binary Tree Level Order Traver

    ... 더 보기

    Binary Tree Level Order Traversal | 알고달레

    알고달레

    Binary Tree Level Order Traversal | 알고달레

    어제 AI 시대의 개발자 토론회에서 내가 대 AI 시대에는 버전관리 시스템이 필요없을 수도 있다고 생각해야한다는 말을 했는데, 그정도로 파격적인 생각을 해야한다는 이야기긴했지만, 진짜 그럴까?를 다시 한 번 생각해봤다.


    우선 버전관리 시스템의 목적은 크게 다음 세 가지다.


    ... 더 보기

    조회 1,505


    iOS 19가 아니라 이제 iOS 26?

    ... 더 보기

    No iOS 19: Apple Going Straight to iOS 26

    MacRumors

    No iOS 19: Apple Going Straight to iOS 26

    스트레스를 잘 관리하면서 건강하게 살아가고 싶다면, 우선 살아있는 한 우리가 해야 할 일들은 영원히 없어지지 않을 것이므로, 해야 할 일을 100% 해내면서 할 일 목록을 완전히 없애는 데 많은 노력을 들이기보다는 70% 정도만 해내도 만족할 필요가 있다.

    ... 더 보기

    [박진영의 사회심리학]스스로 만들어 내는 스트레스

    m.dongascience.com

    [박진영의 사회심리학]스스로 만들어 내는 스트레스

    괴물은 하루아침에 태어나지 않는다

    큰 것을 하는 것보다 매일 작은 것을 완벽하게 해내는 노력이 더 중요하다. 내가 성격 장애의 하나인 자기애성 성격장애자(NPD, Narcissistic Personality Disorder)를 만나면서 느낀 것은, 처음에는 그런 사람도 "정상인"처럼 느껴진다는 것이었다. 다만 그의 미친짓은 내가 매일매일 "사소한" 사건들로 상대방에게 익숙해졌을 때 발생한다.

    ... 더 보기