안드로이드 바인더(Android Binder) & D-Bus
"제 4회 Korea Android 세미나"를 위한 선행질문을 받은 적이 있습니다. 그 때 안드로이드 바인더와 D-Bus 간의 관계에 대한 설명을 요청하신 분이 있습니다. 발표 때 시간을 내어 설명해드리겠다고 했지만, 시간 부족으로 인해 약속을 지키지 못했습니다. 그래서 간단하나마 글로라도 정리하고 넘어가려고 합니다. 우선 확실히 짚고 넘어갈 부분은 현재 안드로이드에서는 D-Bus 를 중요한 IPC 메커니즘으로 보고 있지 않다는 것입니다. 과거에도 없고, 현재도 없고, 아마 미래에도 D-Bus 가 중요하게 사용될 가능성은 없어 보입니다. D-Bus 는 FreeDesktop 에서 개발된, 소켓을 사용하는 IPC 메커니즘입니다. Introspection을 포함한 RPC를 제공하는 것을 골자로 하고 있습니다. 다양한 언어에 연결되고 주로 데스크톱 응용들과 연관된 서비스들과 응용에서 많이 사용되고 있습니다. Mixup을 장려하는 분위기를 연출하는데 좋습니다. 저도 D-Bus의 몇몇 설계철학을 좋아하고 있고, 개인적으로 D-Bus와 같은 구조를 갖고, Multicast 와 Realtime 을 도입한 F-Bus 라는 시스템을 Distributed Embedded Control 용으로 만들어 쓰고 있기도 합니다. 현재 안드로이드에서도 블루투스(Bluetooth) 스택에서 사용되고 있습니다. 하지만 이 사용은 일종의 Legacy 시스템을 도입할 때 따라온 부산물일 뿐이지, 안드로이드의 IPC 메커니즘으로써 중요한 쓰임새가 있기 때문은 아닙니다. 안드로이드 IPC를 개발함에 있어서 여러 가지 대안들이 나올 수 있습니다. 가령 D-Bus를 기반으로 하고 부족한 부분들을 채워나가는 방법이 있습니다. D-Bus 의 Transport 가 현재의 소켓만으로 한정되어야 할 이유는 없으니 얼마든지 더 효과적인 Transport를 추가할 수도 있습니다. 하지만 그러지 않았습니다. 안드로이드의 IPC가 필요로 하는 모든 요구사항을 수용하는 새 IPC를 만들기로 결정했고, 그것이 바인더입니다. 일단 이런 결정을 내린 이상 D-Bus를 돌아볼 이유는 눈곱만큼도 없습니다. 이런 결정을 그리 마음에 들어 하지 않는 사람들이 있을 수 있고, 그런 의견을 온라인상에서 표현한적도 있습니다. 아마 이 때부터 안드로이드 바인더와 D-Bus 가 비교되기 시작했다고, 저는 생각하고 있습니다. 제 결론은 이렇습니다. "안드로이드는 D-Bus에 관심 없다." 관련 포스트: