Android와 Java는 도대체 무슨 관계인가?

4 분 소요

Intro - Java와 Android는 무엇이 같고 다른가?

  • 요즘에는 Java를 공부하고 있습니다.
  • 사람마다 다르겠지만, 저는 새로운 언어를 공부하면 이 언어의 특성 혹은 역사에 대해서 어느 정도는 살펴보면서 진행을 하는 편이에요. 뭐, 딱히 큰 의미가 있는 것은 아니지만, 그냥 재미있거든요.
  • 아무튼, 그래서 Java를 공부하고 있는데 대부분 Android와 비슷하다고는 나와 있는데 뭐가 비슷하고 뭐가 다른지에 대해서 한 번 짚고 넘어가는 것이 좋을 것 같아서 정리해보기로 했습니다.
  • 라고 생각하고 작성하기 시작했는데, 이를 이해하기 위해서는 오히려, 구글과 오라클간의 분쟁을 디짚어 보는 것이 더 효율적으로 느껴지더군요. 그래서 구글과 오라클의 분쟁을 중심으로 제가 이해한 내용을 정리했습니다.

구글과 오라클의 분쟁 원인은?

Sun Microsystems 2 Oracle

  • Java의 경우 원래는 Sun Microsystems 사에 의해서 만들어졌습니다(Sun은 Stanford University Network의 약자). Sun사는 Java, MySQL, NetBeans, Vitrual Box의 개발사 및 소유주였죠(개발 이후 해당 회사를 인수했다는 말이죠).
  • Sun 사가 워낙 Java로 유명하다 보니, 많은 사람들이 “소프트웨어 회사”정도로 알고 있지만, 사실은 SPARC CPU를 장착한 서버, 데스크탑을 판매 관리하는 하드웨어 회사였습니다. SPARC 아키텍쳐는 지금으로 따지면 IBM의 POWER CPU와 유사하게, “대용량 트랜잭션 처리”에 강점을 보였습니다. 다만, IBM의 메인 프레임보다는 별로고, MS의 PC보다는 좋은 정도의 포지셔닝을 가지고 있었죠.
  • 아무튼 뭐 다 옛날 얘기입니다. 썬의 주력사업이던 하드웨어 사업이 닥컴시대를 지나면서 무너지기 시작했고, 피보팅을 하지 않고 계속 하드웨어 쪽에서 발전하려던 썬사는 오라클에 팔리게 되죠.

안드로이드 SDK

  • 우선, 안드로이드는 모바일 운영체제입니다. Java, C, C++이 혼한되어서 만들어졌는데, 내부 말고 어플리케이션과 UI쪽은 주로 Java를 사용해서 만들어졌죠. 이 아이가 오픈소스로 풀려 있는데, 이것까지는 문제가 아닙니다.
  • 다만, SDK(Software Development Kit)라는 것이 있습니다. 개발자가 안드로이드용 어플리케이션을 만들려고 한다면 Android SDK를 이용해서 안드로이드와 본인의 어플리케이션을 연동시켜야 하죠(연동이라는 표현이 적합하지는 않습니다만). 그리고 보통은 이 SDK는 API로 제공됩니다.

SAME API

  • 문제는 여기서 발생합니다. Android SDK에 포함된 API에는 Java SE(Standard Edition)과 동일한 37개의 API가 존재했다는 것이죠.
    • JAVA SE는 일단은 그냥 “개인 및 소규모 기업에서 Java 개발 및 실행을 위해 필요한 것들”이라고 해석하면 됩니다. 이 Java SE가 오라클이라는 것은, 극단적으로 말해서 “오라클은 Java의 모든 사용권을 소유하고 있다”라고 말할 수 있는 것이죠. 실제로 오라클은 Java의 버전 혹은 사용기기에 따라 유료화 정책을 진행하고 있기도 합니다. 물론 버전에 따라 다르고 뭐 그렇기는 하지만요.
  • 아무튼, 안드로이드와 API와 Java SE의 API는 동일합니다. API는 “Application Programming Interface”의 약자로, 아주 간단히 말하면 “리모컨의 버튼 구조”정도로 해석하셔도 됩니다. 회사 A에서 새로운 리모컨을 만들었고 이 리모컨의 인터페이스를 설계했습니다. 그런데, 나중에 회사 B에서 리모컨을 만들었는데, 인터페이스를 회사 A의 것과 동일하게 만들었다고 하겠습니다. 이 때 회사 A가 회사 B에게 저작권 도용으로 고소했다. 대략 이런겁니다.
  • 더 자세하게 말하자면, 39개의 API이지만, 600개의 클래스명과 6000개의 메소드를 그대로 사용했습니다. 그냥 함수로 말하면, 함수는 보통 선언(declaration)과 정의(definition)으로 나눕니다. 아래와 같은 python 함수가 있다면, 이 함수를 사용할 때 부르는, 이름이 선언이고, 이 함수가 어떻게 동작하는지를 정의한 것이 정의부분이죠.
def function_name(argument): # declaration
    # defintion 
  • 안드로이드 SDK의 API는 구현은 달랐지만, 정의부분은 같았습니다. 즉, 해당 클래스를 사용할 때 Java와 똑같은 방식으로 사용했다는 이야기죠. 이거 별거 아닌 것 같지만, 제가 보기에는 좀 민간합니다. 이는 Java 개발자가 안드로이드 개발로 넘어간다고 할때 필요한 전환 비용(Switching Cost)를 상당히 줄여주거든요.
    • 이건 또 다시 극단적으로 단순히 말하자면, 미국 영어를 배운 사람이 영국 영어를 배우는 것과 비슷합니다. 너무 극단적으로 비유했나요.

결론 - 오라클 승소

  • 결론부터 말하자면 오라클이 이겼습니다. 이 소송은 2010년부터 2018년까지 이어졌는데, 자세한 법적인 내용은 제가 큰 관심이 없어서 넘어갑니다. 아무튼, 80억달러를 오라클이 구글에게 배상해야 하죠.
  • 이 배상금액은 대략 “구글이 자신의 라이센스를 무단으로 사용한 것이기 때문에, 만약 라이센스를 빌려갔다면 냈어야 하는 돈”정도로 해석하면 됩니다.
  • 다만, 저는 구글도 딱히 손해를 봤다고 생각하지는 않습니다. 오라클은 돈을 벌었고, 구글은 점유율을 얻었죠. 둘다 윈윈이라고 생각합니다.

의문의 승자, 마이크로소프트

  • 사람들이 구글의 안드로이드로 인해서 오라클만 이익을 봤다고 생각하지만, 사실 마이크로소프트도 상당한 이득을 봤습니다.
  • 이는 안드로이드에서 사용하고 있는 기술인 FAT(File Allocation Table), EAS(Exchange Active Sync)이 모두 마이크로소프트가 특허를 가진 기술이기 때문이죠.
  • 여기서, “왜 구글이 특허 사용료를 내는 것이 아니라, 제조사가 특허 사용료를 내야 한다”라는 사실이 재미있는데, 안드로이드가 탑재된 기기를 제조, 해야 ‘해당 기술의 실시’로 인정받기 때문이라고 합니다. 그리고 마이크로소프틑 이 로열티만으로 매년 2조원을 벌고 있죠.. 그리고 그 2조원의 대부분에는 S전자의 비율이 꽤나 클 것으로 생각되네요.

구글은 정말 몰랐을까?

  • 안드로이드 SDK의 API는 언제부터 Java SE의 API와 같았을까요? 저는 이것이 궁금합니다.
  • 안드로이드 운영체제는 2005년 구글에게 인수되었습니다(정확히는 회사인 Android Inc. 가 인수된 것이죠). 안드로이드 0.5버전은 2007년에 나왔습니다(그전에도 존재했지만, 정식공개라고 보기 어렵죠).
  • 보통 새로운 회사를 인수할 때, 인수자는 피인수회사에 대해서 아주 빡센 검토를 진행합니다. 당연히 ‘법률’, ‘저작권’ 부분은 아주 빡세게 잡고 들어가겠죠. 손해를 보면 안되니까요.
  • 여기서, 의문이 들죠. “Java API를 따라한 것은 구글이 인수하기 이전인가 이후인가?” 그리고, “만약 인수하기 전부터 그랬다면 구글은 몰랐던 것일까?”, “구글이 알고 있었다고 해도, 이를 방관하는 것이 이득이라고 판단했던 것은 아닐까?” 라는 연쇄적인 질문들이 듭니다.
  • 앞서 말한 것처럼 초기 개발 네트워크에서는 개발자의 수를 빠르게 흡수하는 것이 필요합니다. 일종의 마케팅 비용인 셈인데, 이 때 동일한 API를 제공한다면 이를 손쉽게 할 수 있죠.
  • 결론은 그런 겁니다. 만약, “저작권 침해적인 부분을 몰랐다면 구글의 법무팀에 문제가 있는 것”이죠. 저는 “저작권 침해를 알았지만 이를 방관했을 때의 이득이 크다고 판단하여 방관했다”라는 쪽이 맞다고 봅니다. 물론, 모르는 일이죠.

구글의 이후 행보

  • 구글은 2017년에 이미 Kotlin을 안드로이드 공식 언어로 추가했습니다. 오라클과의 분쟁이 끝나기 이전이지만, 이미 탈Java를 진행하고 있었다고 보는게 맞죠.
  • 그리고 크게 봤을 때, Java라는 언어 자체에 대한 분쟁은 점차 확장될 가능성이 크겠죠. 구글은 이를 인지하고 직접 본인들의 언어인 Go를 만들었습니다. 애플이 Swift를 만든 것과 같은 방향인 셈이죠.

Wrap-up

  • 참 재밌습니다. 언어들의 관계와 역사를 파악하다 보면, 언어에 대한 애정이 샘솟는 것을 알 수 있어요. 빠르게 Java도 공부하고 Golang도 공부하고 Kotlin도 공부해보고 싶네요. 아이참 재밌당.

댓글남기기