3. Implementation/Android
구글의 Android 플랫폼, 그리고 Dalvik VM
SSKK
2010. 2. 5. 06:54
Dalvik 이 무슨 뜻일까 궁금해서 서핑을 하다 좋은 글을 발견하여 원본 그대로 발췌함
출처 : http://sink772.egloos.com/3490667
이미 많은 사람들이 알고있다시피, 지난주 월요일날 구글은 모바일 핸드셋용 플랫폼인 Android를 위한 소프트웨어 개발 툴킷(SDK)을 발표했 다. 그동안 소문으로만 무성하던 통칭 gPhone의 실체가 나타난 셈인데, 지금은 비록 그쪽 분야에서 다소 벗어난 일을 하고 있지만, 과거 수년간 모바일 업계에서 Java VM 개발 관련 일을 했던 나로서는 관심있게 지켜볼 수 밖에 없었고, 즉각 SDK를 다운받아 살펴보기 시작했다.
일단 이번에 발표한 것은 말 그대로 SDK, 즉 Android 플랫폼 상에서 돌아가는 애플리케이션을 작성하기 위한 에뮬레이터 및 각종 유틸리티 도구, 그리고 문서 등이며, Android 플랫폼 그 자체에 대한 것은 포함되어 있지 않다. 그리고 놀랍게도(!) 모든 애플리케이션은 Java 언어 기반으로 작성하도록 되어있으며, 실제로 핸드셋에 배포할 때는 Dalvik VM이라는 구글 자체의 VM 상에서 동작하도록 class 파일을 dex라는 형식으로 변환하여 배포하도록 되어있다.
여기까지만 보면 대다수의 사람들은 그다지 놀랍거나 새로운 것이 없다고 할 지도 모르겠다. SUN에서도 이미 JavaFX Mobile이라는 리눅스 OS 및 자바 애플리케이션 기반의 모바일 플랫폼을 발표했으니 말이다. 그리고 YouTube에 올라온 Android 데모를 본 사람들도 퀘이크가 되네 혹은 iPhone UI를 따라했네 등의 겉모습만 보고서 Android 플랫폼을 평가할 지도 모르겠다. 그러나 내부 구현이나 그들의 정책에 대해서 세심히 살펴보면 구글의 이번 행보가 앞으로 전세계 휴대폰 업계에 미칠 엄청난 파장에 대해서 생각하지 않을 수 없게 된다.
이번에 드러난 Android 플랫폼의 핵심은 바로 Dalvik VM이라 불리우는 런타임 환경이다. 애플리케이션 개발은 Java 언어를 사용하면서 왜 런타임 환경은 Java VM이 아닌 또다른 VM를 채용했을까라는 것이 이슈인데, Stefano Mazzocchi의 블로그 글에서 이에 대한 해답을 찾을 수 있다. 결론만 말하자면 SUN과의 라이센스 문제 때문인데, 작년말에 SUN이 PhoneME라 는 이름으로 Java ME 관련 코드를 오픈 소스화하긴 했지만, 실제로 Java VM을 핸드셋에 탑재하기 위해서는 SUN에 라이센스 비용을 꼬박꼬박 물어야 한다. 즉 생색은 있는 대로 다 내면서 실속 또한 챙기는 이중 전략인 셈인데, 이를 비껴가기 위해서 구글은 Dalvik VM이라는 카드를 꺼내든 것이다. 애플리케이션 개발 환경은 Java SE 관련이므로 그 유명한 Classpath 예외조항에 따라 라이센스 문제를 피할 수 있지만, Java ME 쪽은 예외조항이 없으므로 Java VM을 배제하고 또다른 VM을 탑재하는 식으로 처리를 한 것이다. 구글맵 등 이미 Java 언어 기반으로 모바일 애플리케이션을 배포하던 구글로서는 기존의 인프라를 그대로 살리고 싶어했을 것이고, 또 거의 모든 소스를 오픈하여 자유롭게 사용할 수 있도록 배포하려던 정책도 SUN과의 라이센스 문제 때문에 포기할 수는 없었을 것이다. 여러가지를 고심한 끝에 이와 같은 결정이 나온 것으로 보이며, 정말 영리한 결정이라는 생각이 든다.
굳이 Java 언어를 개발 환경으로 사용해야 하나, 혹은 C/C++ 기반의 native 개발 환경으로 갈 수도 있지 않나라는 생각을 할 수도 있을 것이다. 내 개인적인 생각으로 모바일 분야에서는 보안 문제, 배포 문제, 포팅 문제 등을 고려하면 C/C++ 기반의 native 기반보다는 VM 기반으로 가는 것이 맞다는 판단이며, VM 중에서도 현재 가장 많은 저변을 가지고 있는 Java VM 기반으로 가는 것이 현명하다는 생각이다. 비록 Java VM 그대로를 사용 못하고 변형된 것을 탑재해야 하지만... (이미 dex 파일 포맷 등 Dalvik VM 자체에 대해서 reverse engineering한 결과물들이 나오고 있는데, 대충 보면 몇가지를 제외하고는 Java class 파일 포맷과 상당히 유사하다는 것을 알 수 있다.)
앞서 언급했던 Stefano의 블로그 글 중에서 인상적인 글귀를 하나 인용하면서 이번 글은 마칠까 한다.
위의 글귀를 보고 Matrix 영화가 생각난다면 오버일까? ^^
출처 : http://sink772.egloos.com/3490667
출처 : http://sink772.egloos.com/3490667
이미 많은 사람들이 알고있다시피, 지난주 월요일날 구글은 모바일 핸드셋용 플랫폼인 Android를 위한 소프트웨어 개발 툴킷(SDK)을 발표했 다. 그동안 소문으로만 무성하던 통칭 gPhone의 실체가 나타난 셈인데, 지금은 비록 그쪽 분야에서 다소 벗어난 일을 하고 있지만, 과거 수년간 모바일 업계에서 Java VM 개발 관련 일을 했던 나로서는 관심있게 지켜볼 수 밖에 없었고, 즉각 SDK를 다운받아 살펴보기 시작했다.
일단 이번에 발표한 것은 말 그대로 SDK, 즉 Android 플랫폼 상에서 돌아가는 애플리케이션을 작성하기 위한 에뮬레이터 및 각종 유틸리티 도구, 그리고 문서 등이며, Android 플랫폼 그 자체에 대한 것은 포함되어 있지 않다. 그리고 놀랍게도(!) 모든 애플리케이션은 Java 언어 기반으로 작성하도록 되어있으며, 실제로 핸드셋에 배포할 때는 Dalvik VM이라는 구글 자체의 VM 상에서 동작하도록 class 파일을 dex라는 형식으로 변환하여 배포하도록 되어있다.
여기까지만 보면 대다수의 사람들은 그다지 놀랍거나 새로운 것이 없다고 할 지도 모르겠다. SUN에서도 이미 JavaFX Mobile이라는 리눅스 OS 및 자바 애플리케이션 기반의 모바일 플랫폼을 발표했으니 말이다. 그리고 YouTube에 올라온 Android 데모를 본 사람들도 퀘이크가 되네 혹은 iPhone UI를 따라했네 등의 겉모습만 보고서 Android 플랫폼을 평가할 지도 모르겠다. 그러나 내부 구현이나 그들의 정책에 대해서 세심히 살펴보면 구글의 이번 행보가 앞으로 전세계 휴대폰 업계에 미칠 엄청난 파장에 대해서 생각하지 않을 수 없게 된다.
이번에 드러난 Android 플랫폼의 핵심은 바로 Dalvik VM이라 불리우는 런타임 환경이다. 애플리케이션 개발은 Java 언어를 사용하면서 왜 런타임 환경은 Java VM이 아닌 또다른 VM를 채용했을까라는 것이 이슈인데, Stefano Mazzocchi의 블로그 글에서 이에 대한 해답을 찾을 수 있다. 결론만 말하자면 SUN과의 라이센스 문제 때문인데, 작년말에 SUN이 PhoneME라 는 이름으로 Java ME 관련 코드를 오픈 소스화하긴 했지만, 실제로 Java VM을 핸드셋에 탑재하기 위해서는 SUN에 라이센스 비용을 꼬박꼬박 물어야 한다. 즉 생색은 있는 대로 다 내면서 실속 또한 챙기는 이중 전략인 셈인데, 이를 비껴가기 위해서 구글은 Dalvik VM이라는 카드를 꺼내든 것이다. 애플리케이션 개발 환경은 Java SE 관련이므로 그 유명한 Classpath 예외조항에 따라 라이센스 문제를 피할 수 있지만, Java ME 쪽은 예외조항이 없으므로 Java VM을 배제하고 또다른 VM을 탑재하는 식으로 처리를 한 것이다. 구글맵 등 이미 Java 언어 기반으로 모바일 애플리케이션을 배포하던 구글로서는 기존의 인프라를 그대로 살리고 싶어했을 것이고, 또 거의 모든 소스를 오픈하여 자유롭게 사용할 수 있도록 배포하려던 정책도 SUN과의 라이센스 문제 때문에 포기할 수는 없었을 것이다. 여러가지를 고심한 끝에 이와 같은 결정이 나온 것으로 보이며, 정말 영리한 결정이라는 생각이 든다.
굳이 Java 언어를 개발 환경으로 사용해야 하나, 혹은 C/C++ 기반의 native 개발 환경으로 갈 수도 있지 않나라는 생각을 할 수도 있을 것이다. 내 개인적인 생각으로 모바일 분야에서는 보안 문제, 배포 문제, 포팅 문제 등을 고려하면 C/C++ 기반의 native 기반보다는 VM 기반으로 가는 것이 맞다는 판단이며, VM 중에서도 현재 가장 많은 저변을 가지고 있는 Java VM 기반으로 가는 것이 현명하다는 생각이다. 비록 Java VM 그대로를 사용 못하고 변형된 것을 탑재해야 하지만... (이미 dex 파일 포맷 등 Dalvik VM 자체에 대해서 reverse engineering한 결과물들이 나오고 있는데, 대충 보면 몇가지를 제외하고는 Java class 파일 포맷과 상당히 유사하다는 것을 알 수 있다.)
앞서 언급했던 Stefano의 블로그 글 중에서 인상적인 글귀를 하나 인용하면서 이번 글은 마칠까 한다.
So, here we are: Apple makes the iPhone, incredibly sweet, slick and game-changing and yet incredibly locked. Google makes Android and not only unlocks development abilities on the mobile phone but also unlocks millions of potential Java mobile programmers from Sun's grip on it.
위의 글귀를 보고 Matrix 영화가 생각난다면 오버일까? ^^
출처 : http://sink772.egloos.com/3490667