2011년 7월 8일 금요일

J2ME phoneme, dalvik, apache harmony

  Dalvik은 안드로이드 프레임워크에 포함된 가상머신이다.

 웹상에서 apache harmony와 dalvik과의 관련성에 대한 여러 글을 볼수 있는데

 나는 apache harmony의 코드를 본적이 없어서 위의 주제에 대한

 확인을 해보지는 못했다.

 다만 sun 지금의 oracle사의 j2me 오픈소스 프로젝트인

 phoneme와 dalvik의 코드는 분석을 해보았으며 상당한 유사성을 발견하였다.

 두 프로젝트의 시작루틴은 다음과 같다.



왼쪽이 phoneme이고 오른쪽이 dalvik이다.

시작은 좀 다른듯 보이지만 phoneme의 경우 실제 시작은

위의 코드에서 보듯 ansiJavaMain 함수부터이다.


 코드가 잘 보일지 모르겠는데 자세히 보면 상당히 유사하다.

 변수명은 다르지만 선언된 구조체 JavaVM, JNIEnv, JavaVMInitArgs

 일단 이렇게 3개의 구조체의 이름이 동일하다는 것을 확인할수 있다.

typedef const struct JNIInvokeInterface *JavaVM;
typedef const struct JNINativeInterface *JNIEnv;

typedef struct JavaVMInitArgs {
  jint version;
  jinit nOptions;
  JavaVMOption *option;
  jboolean ignoreUnrecognized;
} JavaVMInitArgs;

JavaVM, JNIEnv, JavaVMInitArgs은 실제로 두 프로젝트 모두

위와 같은 코드로 되어 있다.

추가적으로 JNINativeInterface, JNIInvokeInterface 구조체를 비교해보자.




 역시나 왼쪽이 phoneme project, 오른쪽이 dalvik project이다.

 약간의 차이를 제외하고는 구조체가 거의 동일하다. 이정도면 우연히 일치했다고

 보기는 정말로 힘들어 보인다.

 기타 main에서 호출하는 함수의 이름과 전체적인 과정도 상당히 유사하나 이글의

 목적은 단순히 phoneme와 dalvik이 서로 관련이 있음을 알리는 목적이므로 이 정도에서

 충분하리라 본다. 궁금하신 분들은 직접 코드를 비교해 보시라.

 개인적인 생각으로는 코드의 유사성이 다음의 3가지 경우중 하나에서

 기인한게 아닐까 생각한다.

 1. dalvik이 직접적으로 phoneme의 코드를 참조했다.

 2. phoneme를 참조한 다른 오픈소스의 코드를 dalvik이 참조했다.

 3. dalvik과 phoneme가 공통적으로 참조한 다른 프로젝트가 존재한다.

 4. 기막힌 우연이다.

 4의 경우는 확률이 극히 낮으므로 제외하고 생각해볼때

 일단 2,3의 경우가 유력해 보인다. 1의 경우가 아니라고 생각하는 이유는 검색을

 해보아도 phoneme 프로젝트와 dalvik의 유사성과 관련한 글을 거의 찾기가 어렵기

 때문이다. (물론 1의 경우일 가능성도 없지는 않다. )

 3의 경우라면 그 다른 프로젝트가 apache harmony일수도 있으나

 phoneme project는 java 언어 및 jvm을 개발한 sun에서 시작한 오픈소스이며

 harmony는 sun jvm의 reference implementation이므로 좀 이치에 맞지 않아 보이고

 따라서 필자는 2의 경우로 생각하며 이 중간고리가 웹상의 논란거리가 되는

 프로젝트가 harmony 일수도 있다고 본다. 이를 확인해 보려면 harmony의 소스를

분석해 보아야만 하기에 일단은 여기에서 줄인다.

 ps. 추가적으로 phonme와 dalvik은 interpreter 부분의 코드를 제외하고는
      상당부분이 거의 동일하다고 보면된다. 이부분은 꽤 길고 어려우므로
      다음 글에 따로 정리한다.

댓글 없음:

댓글 쓰기