Android/JAVA - 안드로이드 바인더(Android Binder)가 탄생하기 까지

2014. 4. 7. 20:37Programing/Android / Java

예전에 비(Be) 라는 이름의 회사가 만든 비박스(BeBox) 라는 컴퓨터가 있었다. 

이 컴퓨터는 BeOS 라는 자신만의 OS를 장착하고 있었고, 꽤 참신한 아이디어들로 무장하고 있었지만, 

결국 시장의 반응을 끌어내지는 못한 채, 다른 회사에 흡수되고 말았다. 


Be를 인수한 팜(Palm)은 팜 파일럿(Palm Pilot) 이라는 PDA로 한 시절을 풍미한 회사다. 

팜 역시 나름의 복잡한 역사를 갖고 있지만 여기서는 필요한 만큼만 언급하고 넘어가기로 하자. 

팜(Palm), 팜원(PalmOne), 팜소스(PalmSource)를 구별하지 않고 팜이라고 부르겠다.


여기까지가 2001년의 일이다. 


어쨌거나 꽤 오래 전임에도 불구하고 시스템 API를 모두 C++로 제공하는 도전적이고 스타일 있는 시스템으로 기억되고 있다. 

이 시절을 잊지 못한 사람들이 하이쿠(Haiku) 라는 이름으로 BeOS를 되살려 놓으려고 하고 있다. 

그 시절의 추억을 되살리고 싶은 분들은 http://www.haiku-os.org/ 로 찾아가 보기 바란다.


그런데 회사가 인수되기 전에 시작한 내부 프로젝트가 있었다고 한다. 


오픈 바인더(OpenBinder)라는 프로젝트인데, 차세대 BeOS의 핵심 기능들을 위해 준비되던 컴포넌트 시스템(Component System)이다. 


컴포넌트 시스템이란, 

비교적 작고 단순한 여러 개의 소프트웨어들이 상호 협력하여 컴퓨터를 운영할 수 있도록, 

구성 요소들간의 신호 전달에 대한 통일적이고 효율적인 방법을 제공한다. 

근처에서 비슷한 것을 찾아보면 윈도우즈의 COM이나 유닉스 진영의 코바(Corba)와 같은 것들이 있다. 

오픈 바인더가 이들과 어떤 점에서 차별 점을 갖고 있는지는 뒤에서 좀 더 자세히 다룰 것이다.

일단은 다른 시스템들에 비해 굉장히 가벼운 설계를 갖고 있다는 정도만 기억해 두자. 


이 프로젝트를 이끌던 Dianne Hackborn 이라는 친구가 팜으로 옮긴 후에도 작업을 계속했고, 

결국 2004년 경에 코발트(Cobalt) 라는 이름으로 알려진 PalmOS 6 의 중요한 구성요소로 완성하게 된다. 

– Cobalt Networks 의 NetBSD/cobalt 와 혼동하지 않기 바란다. 

– 코발트 역시 이제는 잊혀져 가는 이름이 되고 말았다. 


팜은 리눅스로 기반 OS를 변경하게 되고, 오픈 바인더 역시 리눅스로 이식된다. 

이 리눅스 버전이 오픈 소스로 공개되었고, 지금도 http://www.angryredplanet.com/~hackbod/openbinder/ 에서 다운로드 할 수 있다. 

하지만 개발은 2005년 말에 중단된 상태이고, 더 이상 의미 있는 형태로 사용되지는 않고 있다.

최근에 팜프리(Palm Pre) 라는 스마트폰으로 부활의 신호탄을 쏘아 올린 팜은, 리눅스(Linux)기반의 webOS 라는 시스템을 새로 개발하여 사용하고 있다. 

심지어 webOS에서 제공되는 PalmOS 에뮬레이터마저도 PalmOS 5 만을 지원할 뿐, 코발트는 영영 잊혀진 이름이 되고 말았다. 

어쨌거나 오픈 바인더는 더 이상 팜에서 사용되지 않을 듯하고, Hackborn 역시 일찌감치 구글(Google)로 옮겨간 상태다. 

이 때쯤에 쓴 것으로 보이는 인터뷰 기사는 바인더에 관련된 여러 가지 유용한 실마리를 제공한다.

http://www.osnews.com/story/13674/Introduction_to_OpenBinder_and_Interview_with_Dianne_Hackborn 에서 볼 수 있다.


구글로 옮겨간 Hackborn은 안드로이드를 위한 바인더(Binder)를 새로 작성하게 된다. 

기본적인 설계는 공유하고 있지만, 커널 모듈을 제외하고는 오픈 바인더의 코드를 사용하지 않고 전면적인 재 구현이 이루어졌다.

커널 모듈의 경우도 전체적인 구조는 그대로 유지하고 있지만, 세부 사항에 있어서 상당 부분 수정이 가해졌다. 

같은 리눅스기반임에도 불구하고 안드로이드 바인더는 오픈 바인더와 호환성이 없다.

때문에 안드로이드의 바인더는 오픈 바인더와는 단절되고 부분적인 역사만을 공유한다. 

이제야 바인더의 최초 설계가 빛을 발휘할 플랫폼에 비로소 안착할지, 아니면 바인더의 설계를 채용했던 다른 플랫폼들의 전철을 밟게 될지는 두고 볼 일이다.



안드로이드 바인더

자료가 기술하고 있는 안드로이드의 버전은 1.6 입니다. 

안드로이드의 공식 문서에 포함되어 있지는 않으나, 안드로이드의 소스 코드로부터 직접 읽어낸 자료들을 상당량 포함하고 있습니다. 

이런 자료들은 안드로이드의 버전이 올라감에 따라, 공식 문서를 통해 공개된 내용들에 비해 변경의 가능성이 더 높다는 점을 유의해주시기 바랍니다.


이 강의는 바인더의 RPC에 초점을 맞춘 것으로, 몇 가지 생략된 내용들이 있습니다. 

발표 후에 따로 질문하신 분이 있기도 하고 해서, 어떤 내용들이 생략되었는지 생각나는 데로 적어보겠습니다. 

이 내용들은 계획된 1시간에 맞추기 위해 강의 계획을 짤 때부터 생략하기로 한 것입니다. 

때문에 자료에도 포함되어있지 않습니다. 

좀 더 시간적으로 여유 있는 강의가 있다면 다룰 수 있을지 모르겠습니다..

- Flat Binder Object 로 IBinder 외에 File Descriptor를 전달할 수 있습니다.

- One-way Call이 존재한다는 사실을 알리지 않았습니다.

- Reference Counting 과 관련된 일체의 내용을 생략했습니다.

- Thread Priority 와 관련된 내용을 다루지 않았습니다.

- Death Notification 을 생략했습니다.

- /proc 로 노출되는 데이터들에 관한 설명을 생략했습니다.

- Error Handling 도 다루지 않았습니다.

- Activity Manager 와 관련된 모든 것들을 생략했음은 발표 때 이미 설명 드렸습니다.

발표 자료에는 pdf 파일에 더해, OpenBinder 와 관련된 안트로이드 바인더의 역사부분에 관한 초고를 함께 올립니다. 

발표 때는 시간 때문에 많이 줄여야만 했습니다. 

관심있는 분들 참고하시기 바랍니다.



Refer : http://www.flowdas.com/blog/the-history-of-android-binder