Android SDK Manager를 보면, API 10은 2.3.3이다. 그리고 그 다음 버전은 API 11은 3.0 허니컴이다. 하지만, 단말 중에 보면 Android 2.3.4 ~ 2.3.7 사이의 버전을 가진 단말들이 있다. 대표적으로는 꽤 오랫동안 OS 업데이트를 해준 갤럭시 S 인데, SKT용 갤럭시 S의 경우 2.3.6이 최신 버전이다.
얘네들은 뭘까? 몇개 되지 않으니 하나씩 찾아보자. 먼저 2.3.4는 API 10의 MR1이다. 안드로이드 개발자 사이트의 What is API Level?을 보면 2.3.4는 API 10에 포함되는 표로 나와있다.
2.3.5 ~ 2.3.7은 위키피디아의 안드로이드 버전 역사를 보면 유추해 볼 수 있다. 구글이 구글 사이트에 언급하지 않았거나 API 번호를 주지 않은 것들은 대체적으로 특정단말에서 발생하지만 치명적인 문제(네트워크나 구글 주요 서비스)를 수정한 것으로 보인다. 대신에 API 번호를 줄만큼 API가 변경되지 않았다고 판단한 것 같다. 참고로, 진저브레드(2.3.x) 버전에서만 이와같은 마이너 버전이 나와서 사람을 혼란스럽게 한 것은 아니다. 특히 허니컴(3.x)에서는 3.2.1 ~ 3.2.6까지 6번이나 마이너한 버전이 있다.
그럼 세번째 소숫점 자리는 마이너한 수정이라고만 생각하면 될까? 그럼 API 16인 4.1.2나 API 17인 4.2.2는 또 뭐지??!
내 생각은 이렇다. 모두 알다 시피 안드로이드는 오픈소스다. 소스가 공개되어 있고, 이를 기반으로 버전을 만들 수 있다. 많은 제조사들에서도 자사 단말을 위해 이를 수정/배포한다. 이중에서 레퍼런스 폰을 만드는 회사(삼성, HTC, LG)나 자사의 자회사(모토롤라)의 수정은 메인에 포함시켜야 했을거다. 2.3.5~2.3.7의 변경 내역을 보면 수정내용이 작기도 하지만 이 것은 버전을 그렇게 관리했기 때문일 것이고, 4.1.2나 4.2.2에도 API 버전이 부여된 것으로 보면 구글이 스스로 수정을 가한 경우에만 API 버전을 주는게 아닐까 추측해본다. 주도권은 자기들이 가지고 있겠다는 속내가 보인다.
구글은 오픈소스이므로 누구나 참조할 수 있지만, 실제 제조사들은 단말을 내보내기 전에 구글의 승인을 받고 있다. 그리고 구글의 승인을 받지 않은 커스텀 버전, 대표적으로 사이아노젠 모드같은 경우 처음에는 구글 마켓을 그대로 넣어서 바이너리를 배포했는데 구글의 지적(?)을 받아 최근에 발행되는 바이너리에는 구글 마켓 대신에 자체 마켓이 포함되어 있다.