2010년 9월 17일 금요일

Ubuntu 10.04 에서 eclipse 가 auto-complete 기능 중 X window 에러로 죽을 때.

간단한 테스트 프로그램을 짜기 위해 이클립스를 켰는데 auto complete 창만 뜨면 이클립스가 종료되어 버렸다.
집에선 개발 환경만 마련해 두고 회사에서만 일한 폐해다...

에러 메세지는 X Window system error 라고 하는데...





The program 'Eclipse' received an X Window System error.


This probably reflects a bug in the program.
The error was 'RenderBadPicture (invalid Picture parameter)'.
(Details: serial 26945 error_code 175 request_code 153 minor_code 7)
(Note to programmers: normally, X errors are reported asynchronously;
that is, you will receive the error a while after causing it.
To debug your program, run it with the --sync command line
option to change this behavior. You can then get a meaningful
backtrace from your debugger if you break on the gdk_x_error() function


잠시 구글링 해 본 결과, eclipse.ini 파일에 다음 한 줄을 추가해 해결 가능하다고 한다.

-Dorg.eclipse.swt.browser.XULRunnerPath==/usr/lib/xulrunner-1.9.1.9/

경로는 본인의 시스템에 설치 되어 있는 xulrunner 의 경로를 적어야 한다.
xulrunner 는 XUL(Xml User Interface Language) application 의 back end 를 제공하는 runtime environment 라고 한다.

eclipse.ini 파일은 eclipse 실행 시의 옵션 등을 적어 둔 파일로, 이클립스 설치 디렉토리에 있다.
apt 등을 이용해 설치했다면 /usr/lib/eclipse/ 또는 /opt/eclipse/ 아래 위치해 있을 수 있다.


구글링 해서 찾아낸 해답 링크는 다음과 같다.
http://cmh-blog.blogspot.com/2010/04/eclipse-ubuntu-1004-crash-on-auto.html

2010년 9월 16일 목요일

안드로이드를 둘러싼 시각들과 오해.

최근 안드로이드는 망할 것이다, 구글은 사실 속이 검다 등의 안드로이드 비판적(비판인지 비난인지 애매한 경우도 있다)기사가 많이 나오고 있다.
하지만 사실 이는 오픈 소스 소프트웨어의 속성을 제대로 이해하지 못하고, 안드로이드의 특성을 제대로 이해하지 못한 부분도 크다.

결국 안드로이드를 비판하는 기사의 주장은 두가지로 나눌 수 있다.
1. 망할 것이다
2. 오픈소스라고는 하지만 구글의 이익에 따라 움직이며, 폐쇄적이다.

하지만 이 두가지 의견은 똑같은 하나의 속성에 대한 두 측면의 시각들이며, 그 시각들이 중간의 타협안을 찾아가기보다는 서로가 극을 바라봐서 한쪽 입장만을 강변하고 있는 측면이 크다.

먼저 두개의 의견이 어떤 내용인지 알아 보고 그 오해를 몇가지 이야기 해 보자.


1. 망할 것이다
안드로이드가 망할 것이라 예상하는 사람들의 주요 주장은 빠른 버전업과 제조사별 커스터마이징에 따른 호환성 문제. 그리고 허술한 보안, 마켓 관리에 따른 개발자의 수익 구조 문제이다.

망할지 망하지 않을지는 모르겠다. 지금이야 엄청난 인기를 얻고 있고, 대세에 가깝지만 미래야 누구도 모르는 것이니...
하지만, 이런 주장의 근거 들에는 오해가 많이 있다.

1.1. 호환성 문제.
최초에는 빠른 버전업에 의해서 호환성 문제가 발생할 거라는 의견이 많았고, 최근에는 제조사별 커스터마이징에 따른 호환성 문제를 주로 이야기 하고 있다.

버전업에 따른 호환성 문제는 전적으로 구글의 안드로이드 소스 관리에 달린 문제이다. 하지만 분명한 것은, 구글의 설계 실력 상, 그리고 지금까지 안드로이드 프로젝트 진행에서 드러난 설계 철학 상, 하위 호환은 지켜지는 방향으로 버전업이 이루어진다.
일부 호환성 버그가 있을 수는 있지만, 설계가 하위 호환성을 보장하는 한, 그리고 오픈 소스 프로젝트의 특성 상 버그는 굉장히 빠르게 수정될 수밖에 없다.

그리고, 호환성에 대해선 수비책이 있다.

먼저, 구글 안드로이드는 구글 안드로이드 라는 이름을 사용하는 안드로이드 기기라면 지켜야 하는 호환성 규칙을 문서화 해 두었다. 이를 분명히 지킨다면 안드로이드 sdk 를 이용해 개발된 모든 애플리케이션이 해당 기기에서 돌아갈 수 있다는 호환성의 requirement 를 서술한 문서이다.
이에 대한 부분은 잠시 후 구글의 규제와 이어진다.

다음으로, 유명한 CTS. 소프트웨어의 테스트. CTS 테스트는 해당 기기에 설치된 안드로이드 프레임웍에서 기타 애플리케이션 개발자가 자신의 앱을 개발하기 위해 사용하는 api 가 정상 동작하는지를 테스트 해서 해당 버전의 안드로이드를 위해 개발된 애플리케이션이 정상적으로 동작할 수 있을지를 가려낸다.

물론 CTS 가 완벽한 것은 아니다. 특히, 제조사의 커스터마이즈 ui 는 그 동작을 위해 프레임웍 단은 물론, 커널 단까지 수정하기 때문에 CTS 는 꼼수를 부려 통과하지만 프레임웍의 api 가 정상적으로 동작하지 않을 수 있다.
몇몇 개발자로부터는 특정 기기에서는 똑같은 api 를 사용해도 다른 기기 또는 안드로이드 sdk 에뮬레이터와 다른 동작을 하는 경우가 있다는 주장이 있다.
하지만 이는 구글의 호환성 문서에 적혀 있는 내용을 지키지 않았기 때문이며 CTS 를 꼼수로 통과 했기 때문이다.
CTS 를 완벽히 만들지 못하고 호환성 문서의 내용을 제대로 테스트 하지 못한 구글을 탓할 수는 있겠으나 원칙적으로 모든 호환성 검사는 불가능하며 CTS 의 정밀도 또한 지속적으로 개선되고 있다.

그럼 제조사들이 호환성을 엉망으로 만드는 현상은 어떻게 해야 할까? 구글에 보다 강도 높은 테스트를 촉구하는 것은 앞서 이야기 했듯 당연하지만, 제조사의 책임을 이야기 하고 싶다.
이건 명백한 해당 기기의 소프트웨어 품질 문제라고 볼 수 있다. 품질 낮은 상품은 어떻게 대해야 하는가?
블로그와 포럼 등을 이용해 해당 기기의 소프트웨어 품질 문제를 널리 알리고 제조사에 품질 개선을 요청하며, 최악의 경우 해당 제품을 구매하지 않으면 된다. 이는 자유시장주의의 가장 기본적 원칙 아닌가?

마지막으로, 애플리케이션 개발자는 자신의 애플리케이션이 정상적으로 돌아가기 위해 필요한 조건 - 안드로이드 버전 몇을 탑재하고 있는지, 카메라는 있는지, lcd 화면 크기는 어떤지와 같은 하드웨어/소프트웨어적 특성 - 을 정의 할 수 있다. 그리고, 이를 바탕으로 마켓은 마켓에 접속해 앱을 다운받는 기기의 특성에 따라 해당 앱을 숨겨 준다.
즉, 자신의 기기에서 돌아갈 수 없는 앱은 마켓에서 보이지도 않고, 다운을 받을 수도 없다.


1.2. 개발자의 수익 구조.
아이폰과 달리 안드로이드폰은 루팅을 거치지 않더라도 애플리케이션의 복사와 해적판 설치가 굉장히 쉽다. 때문에 개발자는 수익을 보장받기 어렵다는 이야기인데.
이는 아이폰과 안드로이드 폰의 철학 차이다.
흔히들 아이폰은 핸드폰이나 스마트폰도 아니고, 손안의 pc 도 아니라고 한다. 그저 아이폰이다.
하드웨어/소프트웨어로 이루어지는 기기의 기술적 구조와 사용자 사이의 추상화가 아주 강하게 이루어져 있고, 그 추상화는 아주 강하게 통제되기 때문에 폐쇄적이라는 비판도 받고는 한다.
루팅은 그 추상화를 깨는 행동이라 할 수 있다.

안드로이드 또한 기기와 사용자 사이의 추상화를 어느 정도 하고 있지만, 그 추상화는 강하지 않고, 일반 사용자에게 어느 정도의 접근 가능성을 열어 두고 있다.
이건 안드로이드의 철학과 아이폰의 철학 사이의 차이다. 뭐가 낫다 하기는 어렵다. 장단점이 있을 뿐이다.

때문에 안드로이드 애플리케이션은 아이폰에서의 수익구조를 그대로 가져갈 생각을 해서는 안된다. pc 에서의 수익구조를 가져갈 생각을 하는 것이 현명할 것이다. 즉, 복사 방지는 애플리케이션의 책임이라는 것이다.

구글은 이에 대한 지원 또한 내세웠다. 마켓 라이센스 서비스가 그것인데. 그에도 불구하고 불법 복사가 이루어지고 있다는 불만이 나왔으며, 구글 측은 라이센스 서비스를 쉽게 사용하는 예제를 주었고, 그 와중에 실제로는 좀 더 보안을 생각하라는, 유의점을 알려줬음에도 그를 지키지 않고 안이하게 라이센스 서비스를 사용했기 때문이라고 맞서고 있다.

어쨌건 불법 복사 방지를 위한 최소의 지원은 하겠지만, 애플리케이션의 보안 책임은 애플리케이션이 지라는 것이다.

구글에서는 안드로이드 마켓과 앱스토어의 차이에 대해 마켓은 말 그대로 마켓일 뿐이라는 이야기를 한 적 있다.
마켓은 최소한의 판매를 위한 장소를 제공할 뿐, 판매의 주체는 애플리케이션 개발자라는 것이다.

사족이 될 지도 모르겠지만. 구글도 이와 함께 이야기 하는 바이지만, 사실 영원한 보안은 없다. 지속적인 보안 강화와 깨뜨림이 반복될 뿐이다. iOS / android 에서 아무리 보안을 강화 하더라도 그에 대한 파해법은 나올 수 밖에 없다(iOS 는 버튼 하나로 루팅, 불법 복사가 가능하다). os 에서 어느 정도의 보안을 위한 대책 지원은 당연하겠으나, 최종 책임은 애플리케이션이 져야 한다.
그리고 안드로이드는 기존 pc에서 사용되는 애플리케이션의 보안 장치를 사용 할 수 있는 최소한의 api 와 환경을 지원한다.







2. 오픈소스라고는 하지만 구글의 이익에 따라 움직이며, 폐쇄적이다.
구글 안드로이드 폰을 출시하려면 구글의 인증을 받아야 하는데, 구글의 규제가 지나치고, 인증 조건으로 자사 이익을 넣고, 제조사들의 인증 처리를 나태하게 해 제조사들의 안드로이드 사용이 어렵다는 주장이다.

이에 대해선 먼저 안드로이드 프로젝트의 성격과 구글과의 관계를 알 필요가 있다.

안드로이드는 OHA 의 오픈 소스 소프트웨어 프로젝트이다. 정식 명칭은 Android Open source Software Project. 줄여서 AOSP. 오픈되어 세계의 개발자들의 함께 개발 중인 안드로이드 소스의 정식 프로젝트명이다.
구글의 것이 아니다. 구글은 OHA 의 주요 회원 중 하나일 뿐이다. 물론 사실상 안드로이드를 주체적으로 처리하고 있는 게 사실이다. 하지만 원칙적으로는 하나의 회원일 뿐이라는 것이다.


때문에, 안드로이드의 저작권을 어기지 않는 한, 누구나 안드로이드 소스를 사용해 상업적/비상업적 제품을 만들 수 있다. 특히 프레임웍단은 대부분 아파치2 라이센스를 사용하고 있기 때문에 자기 회사의 비밀 솔루션을 사용해도 문제가 없고, 어떤 부분을 어떻게 수정하든지 제조사의 자유다.
구글의 어떤 입김도 받을 필요가 없다는 이야기다.

하지만 이렇게 자기 마음대로 수정한 안드로이드 소스를 기반으로 한 플랫폼을 탑재한 기기를 판매할 경우, 사용자들은 그 기기의 소프트웨어 품질을 쉽사리 신뢰하기 어렵다(물론 해당 기기의 제조사가 얼마나 뛰어난 소프트웨어 기량을 가졌느냐에 달린 문제다. 실력에 자신 있다면야 뭐가 문제겠는가).
구체적으로는 제조사가 소프트웨어를 어떻게 수정했는지 알 수 없으니 앞서 언급한 애플리케이션 호환성을 보장 할 수 없겠다.

그리고, 안드로이드 오픈 소스 프로젝트 상에는 Homescreen, Contacts, Music 등의 기본적 애플리케이션이 들어 있지만 안드로이드 마켓, GMail 등과 같은 애플리케이션은 존재하지 않는다.

안드로이드 마켓, GMail 등의 주요 애플리케이션은 구글이 제작한 애플리케이션이다.
때문에 구글로부터 해당 애플리케이션을 사거나(팔지는 않는 것 같다) 따로 계약하지 않는 한 해당 애플리케이션은 사용 할 수 없다.

물론 대안은 있다. 안드로이드 애플리케이션은 안드로이드 마켓에서만 설치할 수 있도록 제한되지 않았고, GMail 등을 대체할 애플리케이션을 제조사에서 적당히 만들면 그만이다.

뭐가 문제인가? 제조사의 소프트웨어 역량이 자신 있다면.

하지만 현실적으로 안드로이드 개발의 대부분을 맡고 있고, 세계 최고의 소프트웨어 회사 중 하나인 구글에 비해 제조사의 소프트웨어 역량은 조금 빛이 바랠 수 있다.



구글의 속을 정확히는 모르겠지만, 구글의 그간 행보를 보면 구글의 최대 관심사는 '유저'다.
구글도 돈을 버는 회사일 뿐이고, 모든 행동은 돈을 위함이라고 보는 경우가 많은데. 일부분 맞는 말이다.
하지만, 소프트웨어를 주요 기량으로 삼는다면 유저 확보와 수익 구조 확립이라는 두개의 목표는 때로 유저 확보가 수익 구조 확립보다 주요시 된다는 점을 이해할 필요가 있다.
구글의 행보를 보면, 구글은 유저 확보를 수익 구조 확립보다 중요시하는 경향이 강하다.
먼저 최대한 유저의 사용성을 고려한 최고의 서비스/제품을 내놓아 유저를 확보하고, 이후 수익 구조를 찾아가는 방식이다.

안드로이드 또한 마찬가지다. 안드로이드로 돈을 벌 수 있을까? 안드로이드로 트래픽을 늘릴 수 있을까? 그건 두번째 문제다. 우선 사용자에게 뛰어난 사용 경험을 줄 수 있는 서비스를 만들어 사용자를 확보해야 한다. 트래픽/수익은 그 다음 문제다. 물론 어느 정도 트래픽/수익을 얻을 수 있다는 확신도 가지고 있는 듯 하다.

그러기 위해선 안드로이드 기기가 뛰어난 사용성을 갖는게 최우선 가치이다. 구글은 뛰어난 안드로이드 기기가 시장에 나갈수록 사용자를 확보 할 수 있다. 때문에 구글의 관심사는 사용성이 뛰어난 안드로이드 기기가 시장에 나가는 것이다.

이런 관점에서 보면 구글은 안드로이드가 모바일 시장을 독점하는 것이 목표가 아니다. 모바일 시장의 파이를 키워 보다 많은 사용자를 확보하는 게 목표이다.


때문에 구글은 제조사에 제안을 한다. 구글의 '이름'과 구글의 '애플리케이션'을 사용 할 수 있게 해주겠다. 조건은 자신들이 보기에 사용성이 뛰어난 안드로이드 기기를 만드는 것이다.
사용성이 뛰어난 안드로이드 기기 - 이 조건은 결국 안드로이드 호환성 문서와 CTS 통과다.
실제로, 구글의 호환성 문서는 소프트웨어적 제약 외에도 하드웨어적/성능적 제약 또한 포함한다(물론 하드웨어적 제약 등에 대해선 예외를 인정한다. 구글과의 협의 가능성을 열어 두고 있다).


이제, 사용자는 구글의 '이름'과 '애플리케이션'을 바탕으로 신뢰할 수 있고 사용성 뛰어난 안드로이드 기기를 사용할 수 있다.
제조사는 구글의 '이름'과 '애플리케이션'을 바탕으로 자신의 제품에 신뢰성과 사용성을 높일 수 있다.
구글은 모바일 시장의 파이를 키움으로써 잠재적 사용자를 늘릴 수 있다.



합리적인 계약 아닌가? 어디에도 강제는 없다. 자발적 계약이 있을 뿐이다.
실제로 빌립은 구글 인증을 하지 않은(구글 인증 조건에는 통화 기능이 들어가므로 mp3 를 만드는 빌립으로썬 선택의 여지가 없긴 했다) 안드로이드 기기를 내놓았다.


그럼에도 제조사가 불만을 내는 이유는, 인증 기준이 지나치게 엄격하다는 것인데.
이건 구글의 호환성 문서와 CTS 에 대한 주관적 평가가 들어갈 수 있으므로 어떻다고 하긴 사실 어려운 문제이다.
개인적으로는 구글의 안드로이드 호환성 문서는 충분히 합리적이라고 본다.

하지만 확실한 건, 구글 인증은 강제가 아니라 선택적 계약이라는 것이다.







3. 결론
결국 호환성/불법복제 등의 이야기와 구글 인증의 불합리성 이야기는 하나의 주제에 대한 양측의 시각이다.

통제를 할 것인가? 말 것인가?

물론 이는 신중하게 접근할 문제이다. 현재도 어느 정도의 통제는 이루어지고 있고, 양측의 한쪽 입장에서 보면 둘 다 불만일 것이다.
그리고, 불만 표시는 건강한 소프트웨어 개발에 큰 거름이 된다.

하지만, 최근 기사화 되고 있는 내용은 안드로이드의 특성을 제대로 알지 못하고 최소한의 사실에 근거하지 않은 채로 각자의 입장에서의 주장만을 내세워, 두 주장 사이의 합의를 할 수 없는 정도이다.

애초에 제목을 자극적으로 써서 조회수를 높이려는 기사도 많다.

건전한 비판을 할 필요는 절실하지만, 알아서 걸러 들을 일이다.

2010년 9월 14일 화요일

Hello, blogger.com

blogger.com 에 구글 계정으로 새로 만든 블로그 입니다.

공부하는 내용이나 일하는 이야기, 사는 이야기 등을 올릴 예정입니다.
당분간은 최근 일하고 있는 Android 관련 이야기가 올라올 것 같네요.