Android에 대한 小考(소고) – 호환성과 불행의 씨앗

※ Daum 소규모 지인 위주의 카페에 안드로이드 초기 느낀 점을 지인들과 공유하기 위해서 적은 글인데 어딘가 따로 정리가 필요해서 블로그로 복사합니다.

아래 그림은 안드로이드 소개에서 꼭 보여지는 그림입니다. 파란색 영역은 JAVA, 초록색 영역은 C, 붉은색 영역은 Linux Kernel을 의미합니다.

Android architecture diagram
Android architecture diagram

원래 안드로이드에서는 Application은 Application framework 위에서 Java로 프로그래밍을 해야 합니다.
문제는 현 시점에서 Only Java로 할 수 있는 일이 많지 않다는 것이죠…
그 부분은 안드로이드 플랫폼 구조에서도 명확하게 보여집니다.
Application Framework 부터는 Java기반이지만 Libraries layer와 HAL layer 등은 C언어라는 것이고 Java언어와 C언어가 공존할 수 밖에 없는 구조로 다행인지 불행인지 Java application에서도 C library 사용이 가능합니다.
JNI(Java Native Interface)라는 기술을 사용하는 것인데 최근 안드로이드 관련해서 끊임없이 언급되는 용어입니다.

여기서 안드로이드의 불행이 시작됩니다.

현재 대부분의 Solution들은 C언어로 구현되어 있는데 어느날 갑자기 안드로이드가 대세가 되면서 Solution 업체들이 기존 코드를 Java로 모두 바꾸는 것을 포기하고 JNI interface를 이용해서 Solution을 재활용합니다.

물론, Libraries Layer에 기존 Core library들을 포팅하고 Application Framework 단에 Solution을 적절히 활용할 수 있는 Manager/Service Component 들을 만들어주면 좋은데 안드로이드 개발자가 거의 없고 안드로이드 플랫폼을 이해하는 수준이 미천해서 대부분 업체들은 아래와 같은 두 가지의 간편한 방법을 이용합니다.

① Java Application이 JNI Interface를 이용해서 Library를 직접 호출하도록 하는 방법
② Application Framework을 통하지 않고 안드로이드 플랫폼 옆에 Solution을 Vertical로 배치하는 방법

안드로이드 최초 배포시에는 JNI에 대해서 Recommened하지 않았으나 기술적으로 사용을 제한하지 않아서 방관하는 입장이었고 향후에는 JNI를 정식으로 지원한다는 얘기도 종종 들리고 있습니다.

위와 같은 방법으로 Solution이 포팅이 되면서 Java VM 기반 플랫폼의 장점이 무색해지는 동시에 표준 Application Framework과 연동되지 않는 Solution으로 인해서 호환성에 문제가 발생하는 것입니다.

Windows Mobile이나 Symbian같이 한 업체가 Ownership을 가지고 강력하게 통제를 하는 경우에는 호환성 문제가 심각하지 않지만 완전한 Open platform인 안드로이드는 이런 위험에 노출되어 있었는데 세상에 빛을 본지 얼마되지 않아서 표준 구조가 무참히 깨지는 현실에 직면합니다.

호환성 문제는 이러한 Solution에 국한된 것이 아니고 안드로이드 표준 배포 버전인 v1.1과 v1.5 간에도 문제로 인식되고 있는 상황입니다. v1.5 플랫폼에서 Application을 개발하는 개발자는 v1.1 플랫폼에서도 정상 동작하는지 확인을 해야 하고 이를 위해서 v1.5 SDK부터는 Virtual Device 개념을 도입해서 v1.1, v1.5 등 버전별로 Emulator를 별도 생성할 수 있습니다.

Linux가 Kernel 단에서는 구조적으로 호환성을 확보했다고는 하나 난립하는 Shell로 인해서 하나의 Shell에 익숙해진 사용자가 다른 Shell을 사용하지 못하는 현상이 안드로이드 플랫폼에서도 동일하게 발생하지 않을까 심각하게 우려가 되고 있습니다.

이 부분이 안드로이드 플랫폼의 생사의 기로에 영향을 끼칠 불행의 씨앗이 아닐까 싶습니다.

오늘은 기술적인 얘기가 주로 언급되었는데 다음번에는 안드로이드 플랫폼의 가장 큰 특장점인 Open Access에 대해서 얘기를 해볼까 합니다.

Open Access 개념이 생소하고 글로 얼마나 이해를 잘 시킬 수 있을지 모르겠지만 상당히 획기적인 개념이고 안드로이드 플랫폼이 극찬받는 이유 중의 하나이므로 시간을 할애해서 이해를 하시면 좋은 경험이 될 듯 합니다.