타이젠, 리눅스 기반 오픈소스 플랫폼

타이젠(Tizen)[1]은 전 세계가 주목하고 있는 리눅스 기반 범용 오픈소스 플랫폼이다. 타이젠은 리눅스 재단(Linux Foundation)[2] 프로젝트 중 하나로 등록되어 있으며 삼성전자와 인텔의 주도 하에 활발하게 개발이 진행되고 있다. 이 연재에서는 앞으로 약 10회에 걸쳐 타이젠을 다양한 측면에서 살펴보겠으며, 빠르게 발전하고 있는 타이젠의 최신 정보를 반영할 예정이다.
연재차례
1. 타이젠, 리눅스 기반 오픈소스 플랫폼
2. 타이젠 플랫폼의 이해 3. 타이젠 개발자 컨퍼런스 2013 4. 타이젠 SDK
5. 타이젠 웹 애플리케이션 개발
6. 타이젠 웹 애플리케이션 개발
7. 타이젠 네이티브 애플리케이션 개발
8. 타이젠 네이티브 애플리케이션 개발
9. 타이젠 플랫폼 개발
10. 타이젠 포팅
  서주영  seojuyung2@gmail.com
EFL 오픈소스 공식 개발자로 활동하고 있으며 현재 삼성전자 소프트웨어 센터에 재직 중이다. 긍정의 힘을 믿으며 사랑스러운 아내와 귀여운 딸과 함께 행복하게 사는 것이 인생의 목표이다. 프로그래밍을 할 때 기쁨을 느끼며 개발자가 천직이라 생각하는 만년 개발자이다. EFL 및 타이젠 관련 정보를 공유하는 개인 블로그 seoz.egloos.com을 운영하고 있다. 결혼 전까지 모터사이클에 미쳐있던 라이더이기도 하다.

타이젠 등장
출근 길에 휴대폰을 집에 놓고 와서 당황했던 기억이 있는가? 회의 중에 휴대폰 벨이 울려 민망했던 적이 있는가?
휴대폰을 비롯한 각종 스마트 기기는 우리 생활 깊숙이 들어와 있다. 이제 이들 없이 생활하는 것은 상상할 수도 없다. 길을 가던 중 메일을 확인하고 미국에 있는 친구의 페이스북 타임라인을 보며 집에 있는 에어컨을 원격에서 조절한다. 우리 손에는 다양한 모바일 기기가 들려있고 이 모바일 기기는 냉장고, 에어컨, TV 등 다양한 스마트 기기와 연결되어 있다. 최근에는 구글 글래스나 스마트 워치와 같이 다양한 스펙트럼의 스마트 기기가 등장하고 있다.
이렇게 스마트 기기가 다양한 만큼 이들을 돌아가게 하는 다양한 플랫폼이 존재한다. 그 중 우리의 관심을 끄는 것은 스마트폰, 태블릿 등을 위한 모바일 플랫폼이다. 현재 모바일 플랫폼은 안드로이드(Android)와 iOS라는 절대 강자가 시장의 대부분을 차지하고 있으며 특히 안드로이드의 시장 점유율은 최근 70%를 상회해 당분간 독주가 예상된다.(그림1 참고) 그 외에도 블랙베리(BlackBerry), 바다(bada), 심비안(Symbian), 윈도우폰(Windows Phone) 등이 있지만, 안드로이드와 iOS를 넘어서기에 역부족이다. 이렇게 제3의 모바일 플랫폼 시장은 춘추전국시대를 맞이하고 있는데 이에 도전하는 신규 플랫폼이 등장해 사람들의 눈길을 끌고 있다. 바로 타이젠, 파이어폭스OS, 우분투 모바일이 그 주인공이다. 이들은 모두 오픈소스를 표방하며 춘추전국시대의 지각변동을 예고하고 있다.
제3의 모바일 플랫폼 전쟁에 출사표를 던진 신규 플랫폼 중 삼성전자, 인텔, SK텔레콤, 도코모 등 제조사, 통신사가 공동으로 개발하고 있는 타이젠이 이목을 끌고 있다. 스마트폰 점유율 1위 기업인 삼성전자가 적극적으로 참여하고 있는데다 크로스 카테고리(Cross-Category)를 모토로 스마트폰뿐만 아니라 넷북, 태블릿, 차량용 인포테인먼트(IVI), TV 등 다양한 스마트 기기를 지원할 예정이기 때문이다. 지난 2월 스페인 바르셀로나에서 열린 모바일월드콩그레스(MWC) 2013에서 타이젠 협회(Tizen Association)[3]는 올 하반기에 타이젠폰을 출시할 예정이라고 했다. 특히 다른 신규 경쟁 플랫폼이 저가 시장을 노린 것에 비해 타이젠은 고사양으로 무장한 제품을 준비 중인 것으로 알려졌다.
이 연재에서는 앞으로 약 10회에 걸쳐 타이젠의 이모저모에 대해 알아볼 예정이다. 타이젠은 개발속도가 굉장히 빠르므로 연재를 진행하는 도중 내용이 변경될 수 있으며 가급적 최신 정보를 반영하도록 하겠다.
타이젠이란


그림 1.
2012년 4분기 스마트폰 플랫폼 통계 자료 (출처 : IDC 통계 자료)

그림 2.
타이젠의 크로스 카테고리 전략 (출처 : 2012 리눅스 코리아 포럼 타이젠 소개 자료)
타이젠은 리눅스 재단(Linux Foundation) 주관으로 삼성과 인텔 등 다양한 회사가 개발에 참여하고 있는 리눅스 기반 오픈소스 플랫폼이다. 스마트폰, 넷북, 태블릿, 자동차 인포테인먼트, TV 등 다양한 기기에 탑재할 수 있어 크로스 카테고리 플랫폼이라고 불린다. W3C/HTML5와 같은 다양한 표준을 준수하며 HTML5 기반의 웹 애플리케이션 및 C++ 기반의 네이티브(native) 애플리케이션을 지원한다.
타이젠 기술운영그룹(Technical Steering Group, TSG)이 타이젠 오픈소스의 의사 결정 및 커뮤니티 운영, 타이젠 플랫폼 배포를 담당한다. 또한, 삼성, 인텔, 화웨이, KT, SK텔레콤, 도코모, 오렌지, 파나소닉, 스프린트, 후지쯔, NEC, 보다폰 등 다양한 제조사 및 통신사로 구성된 타이젠 협회(Tizen Association)는 타이젠의 상품화를 주도하며 요구 사항 수집, 서비스 모델 정립, 마케팅 및 교육 등을 담당한다.

그림 3.
W3C, HTML5, CSS3 로고
(출처 : 2012 리눅스 코리아 포럼 타이젠 소개 자료)

그림 4.
타이젠 협회(출처 : 타이젠 협회 웹사이트)
타이젠 역사
타이젠은 어느 날 혜성과 같이 나타난 플랫폼이 아니다. 리모(LiMo), 미고(MeeGo) 등 기존에 존재하던 리눅스 기반 모바일 플랫폼 개발 경험과 삼성전자의 바다 플랫폼, 그리고 다양한 오픈소스 기술에 HTML5, CSS3등의 웹 기술까지 접목된 기술의 집약체다.
타이젠의 전신은 리눅스 기반의 오픈소스 모바일 플랫폼인 리모이며 리모는 삼성전자가 리모 재단에 기증한 삼성리눅스플랫폼(SLP)에 기반을 두고 있다. 타이젠이라는 이름은 2011년 9월 인텔이 이 프로젝트에 합류하면서 사용되기 시작하였다. 인텔은 타이젠에 합류하기 전 노키아와 함께 미고 플랫폼을 개발하고 있었으나 노키아가 마이크로소프트와 손을 잡고 윈도우폰 개발에 전념함에 따라 뒤늦게 타이젠 프로젝트에 합류한 것으로 알려져 있다. 이후 화웨이, 도코모 등 다양한 제조사, 통신사가 타이젠 플랫폼 개발 및 상품화에 참여하였다. 리모에 태생을 둔 타이젠은 현재 리눅스 재단의 주관으로 운영되고 있다.

표1과 같이 2011년 인텔의 합류와 함께 공식 출범한 이래 2012년 4월 1.0 정식 버전, 2013년 2월 2.0 정식 버전이 나오면서 빠른 속도로 개발이 진행되고 있다.
타이젠은 1.0 버전에서 웹 애플리케이션을 시작으로 2.0 버전부터는 네이티브 애플리케이션 및 하이브리드(hybrid) 애플리케이션 개발을 지원하기 시작했다. 1.0 버전에서는 데비안 패키징을 사용하다 2.0 버전에서는 RPM 패키징을 사용하였으며 빌드 시스템은 SBS -> OBS -> OBS, GBS를 사용하는 식으로 빠르게 변경되었다.
타이젠 1.0은 코드명으로 Larkspur를 2.0은 Magnolia를 사용했는데 Larkspur는 “참제비고깔”, Magnolia는 “목련”을 의미한다. 1.0, 2.0의 코드 명이 L, M으로 시작하는 꽃말을 사용한 까닭에 3.0의 코드명을 예상해보는 것도 흥미로울 것이다. 그리고 2012년에 이어 2013년에도 미국 샌프란시스코에서 타이젠 개발자 컨퍼런스가 개최될 예정이다.
타이젠 특징
<개방형>
타이젠의 가장 중요한 특징 중 하나는 개방형 오픈소스라는 것이다. 타이젠은 다양한 오픈소스 및 직접 개발된 코드로 이루어져 있으며 타이젠의 소스코드가 모두 공개되어 있다. 누구나 타이젠 프로젝트에 참여할 수 있고 라이선스를 준수한다면 소스코드를 수정 후 재배포할 수 있다. 기기 별로 제공되는 대부분의 기존 플랫폼이 폐쇄적이었던 것에 비해 타이젠의 개방성은 많은 개발자들의 참여를 이끌었다. 실례로 일반 개발자들이 갤럭시 S3, 갤럭시 S2, 넥서스, N9 등의 기기에 타이젠을 포팅했다는 소식이 들려오고 있다. 제조사의 경우 자신의 요구 사항에 맞추어 타이젠을 수정하여 제품을 생산할 수 있다.
타이젠이 사용하는 오픈소스는 리눅스, WebKit, GStreamer, EFL(Enlightenment Foundation Libraries), Smack(Simplified Mandatory Access Control Kernel) 등 굉장히 다양하며 이들 오픈소스의 지원이 없이는 타이젠도 없었을 것이다. 타이젠이 오픈소스의 혜택을 받은 만큼 여러 오픈소스에도 영향을 미치고 있다. 리눅스 커널, WebKit, EFL 등 여러 오픈소스의 메인테이너가 타이젠 프로젝트에 참여하고 있으며 타이젠에서 개발된 코드는 해당 오픈소스에도 반영되는 식으로 공헌이 이루어지고 있다.
<다양한 종류의 애플리케이션 지원>
타이젠은 HTML5 및 자바스크립트, CSS3를 기반으로 하는 웹 애플리케이션뿐만 아니라 C++을 기반으로 하는 네이티브 애플리케이션, 그리고 이 둘을 융합시킨 하이브리드 애플리케이션을 모두 지원한다.
C++ 기반의 네이티브 애플리케이션은 기존의 바다 플랫폼 API와 상당 수준 호환이 가능하며 변환 도구를 이용해 바다 애플리케이션을 타이젠 애플리케이션으로 쉽게 변환이 가능하다. 이를 통해 기존에 존재하는 바다 애플리케이션을 타이젠에 흡수하여 초기 애플리케이션 부족 현상을 극복할 것으로 기대한다.
이렇게 타이젠이 지원하는 다양한 애플리케이션은 타이젠 IDE 및 에뮬레이터, 웹 시뮬레이터 등의 도구를 이용하여 GUI 환경에서 손쉽게 개발할 수 있다.
<높은 HTML5 호환성>
타이젠은 HTML5, CSS5 등 W3C 표준 웹 기술을 최대한 지원하고 있다. 특히 HTML5 호환성 테스트 측정 사이트인 html5test.com의 측정 결과에 의하면 500점 만점에 492점(+보너스 16점)을 받아 모든 상용화 및 개발 중인 브라우저 대비 가장 좋은 HTML5 호환성을 보여주고 있다. HTML5 호환성이 높다는 말은 웹 애플리케이션에서도 많은 기능을 제공한다는 의미로 해석할 수 있다. 높은 HTML5 호환성은 웹 애플리케이션 개발자의 자유도를 높여주고 네이티브 애플리케이션과의 기능 격차를 줄여준다.
<디바이스 API 지원>
기존의 W3C 및 여러 표준 단체에서 지원하지 못하는 기능을 위해 다양한 디바이스 API도 지원하고 있어, 애플리케이션 개발에 불편함이 없도록 하고 있다. 디바이스 API로는 블루투스, PIM(Personal Information Management), NFC(Near Field Communication), 알람, 메시징, 전원 제어 등이 있다.
타이젠은 WebGL도 제공하고 있어 웹 애플리케이션을 이용하면서도 GL의 성능을 활용할 수 있다. 이는 게임과 같이 성능에 민감한 애플리케이션 개발 등에 사용할 수 있다. 지난 2012년 타이젠 개발자 컨퍼런스에서는 수준 높은 WebGL 애플리케이션 데모를 통해 많은 개발자의 관심을 끌었다.
<크로스 카테고리>
타이젠은 스마트폰, 넷북, 태블릿, 자동차 인포테인먼트, TV 그리고 더 나아가 냉장고, 에어컨, 카메라 등 다양한 기기에서 사용될 수 있다. 기존의 사용자들이 기기 별로 독립된 사용자 경험을 하였지만 타이젠을 통하여 향상되고 통일된 사용자 경험을 할 수 있다. 또한, 서비스 제공자는 높아지는 사용자의 요구 사항을 충족하기 위해 이들 기기 사이의 연동을 통하여 사용자를 만족하게 할 수 있다. 개발자는 기기 별 애플리케이션 호환을 통하여 유연하고 효율적인 개발이 가능하게 되었다. 또한, 타이젠은 개방형이기 때문에 누구나 참여하여 새로운 기기에 타이젠을 활용할 수 있다. 이를 통해 컨버전스 시대를 맞이하는 시기에 소비자와 생산자의 긍정적인 시너지 효과를 불러일으킬 것으로 기대한다. 기존에도 다양한 기기를 지원하는 크로스 카테고리 플랫폼이 있었지만 이를 성공적으로 이끌기는 쉽지 않았다. 하지만 타이젠은 개방형이라는 특징을 가지고 있는데다 다양한 기기를 생산하고 있는 제조사들이 모였다는 사실만으로도 기존 플랫폼이 봉착했던 문제를 미려하게 풀 수 있으리라 기대가 된다.

그림 5.
html5test.com의 호환성 테스트 점수
(출처 : 자체 제작)
<크로스 아키텍처>
타이젠은 X86과 ARM 아키텍처를 모두 지원한다. 현재는 타이젠 에뮬레이터는 X86을 지원하고 테스트용 단말은 ARM을 지원한다. 크로스 아키텍처 구조는 추후에 다양한 기기에 타이젠을 포팅하는데 유용할 거라 기대한다.
<라이선스>
타이젠은 다양한 오픈소스를 사용하고 있기 때문에 복잡한 라이선스 정책의 영향을 받는다. 각 모듈에 따라서 GPLv2, LGPL, Apache, BSD, Flora 라이선스 등의 라이선스 정책에 따르며 SDK의 경우 타이젠 SDK 라이선스라는 별도의 라이선스 정책에 따른다.
<보안>
타이젠은 다음 버전부터 리눅스 커널 단에서 지원하는 Smack을 적용하여 인가되지 않은 데이터나 프로세스 접근을 막아 보안을 강화할 예정이다.

그림 6.
타이젠 아키텍처 (출처 : 타이젠 개발자 사이트 문서)
표 2.
타이젠 코어 프레임워크에 사용된 오픈소스

아키텍처
타이젠의 전반적인 아키텍처는 그림6과 같다.
타이젠은 리눅스 커널 및 디바이스 드라이버에서부터 애플리케이션 프레임워크, 멀티미디어 프레임워크, 웹 프레임워크, 네이티브 프레임워크까지 다양한 프레임워크 및 모듈을 포함하고 있다. 이들 대부분은 오픈소스로 구성되어 있으며 일반적인 리눅스 시스템에 사용되는 모듈뿐만 아니라 모바일에 특화된 위치 기반 서비스(Location Based Service, LBS), 텔레포니(telephony)와 같은 모듈도 포함하고 있다.
<리눅스 커널>
타이젠 아키텍처의 가장 하위 단은 리눅스 커널 및 디바이스 드라이버로 구성되어 있으며 최적화된 타이젠 단말 지원을 위해 커널의 성능 향상 및 개선 작업이 이루어졌다.
<코어 프레임워크>
코어 프레임워크는 웹 프레임워크 및 네이티브 프레임워크에서 공통으로 필요로 하는 기본적인 기능을 제공한다. 코어 프레임워크에서 사용하는 일부 오픈소스는 표2와 같다. 이 외에도 다양한 오픈소스가 사용되었다.
<웹 프레임워크>
웹 애플리케이션을 위한 웹 프레임워크가 있으며 최신 웹 기술을 지원한다. HTML5 API, 비디오, 오디오, 폼, 2D 캔버스, WebGL, CSS3, 웹소켓, 웹 워커 등과 같이 W3C 및 다양한 표준화 단체에서 정의한 표준을 지원한다. 그리고 표준에서 제공하지 못하는 부족한 부분을 채우기 위해 블루투스, NFC, 알람, 메시징 등의 다양한 디바이스 API를 제공하고 있다. 또한 웹 애플리케이션 실행, 라이프 사이클 관리, 접근 제어 등의 역할을 하는 Web Runtime도 제공하고 있다.
<네이티브 프레임워크>
C++ 네이티브 애플리케이션을 위한 네이티브 프레임워크가 있으며 이는 기존의 바다 플랫폼에 해당한다. 1만여 개가 넘는 API를 제공하며 Base, Io, App, Security, Graphics, Ui, Net, Messaging, Social, Locations, Web 등 네이티브 애플리케이션에서 필요로 하는 다양한 기능을 지원한다.
타이젠 SDK
타이젠은 개발자를 위하여 SDK(소프트웨어개발키트, Software Development Kit)를 제공한다. 타이젠에서 개발을 시작하려는 개발자는 반드시 타이젠 SDK를 설치하도록 하자. 타이젠 SDK는 타이젠 공식 웹사이트의 SDK 다운로드 페이지[4] 에서 다운로드 받을 수 있으며 쉽게 설치가 가능하다.
SDK는 웹 및 네이티브 애플리케이션, 그리고 타이젠 플랫폼 개발을 위해 필요한 여러 도구 및 문서를 포함한다. 이클립스로 구성된 통합개발환경(Integrated Development Environment, IDE), 가상으로 타이젠을 실행시킬 수 있는 에뮬레이터(Emulator), 빌드 및 개발을 위한 툴체인(Toolchain), 동적 분석기, 유닛 테스트, 그리고 샘플 코드 및 문서 등으로 구성되어 있다. 타이젠 SDK는 윈도우, 리눅스, 맥 OS X에서 설치 및 사용 가능하며 32비트 및 64비트 시스템을 지원한다. 리눅스는 우분투 배포판을 공식적으로 지원한다.

그림 7.
그림7. 타이젠 IDE (출처 : 자체 제작)

그림 8.
타이젠 에뮬레이터 (출처 : 자체 제작)

그림 9.
타이젠 웹 시뮬레이터 (출처 : 자체 제작)

그림 10.
타이젠 SDK 설치 옵션 (출처 : 자체 제작)
그림7과 같이 이클립스 기반으로 구성된 타이젠 IDE를 이용하여 손쉽게 웹 및 네이티브 애플리케이션 프로젝트를 생성할 수 있고, GUI 빌더를 통해 GUI 애플리케이션을 간단히 구성할 수 있다. 타이젠 기기가 없는 경우에도 개발이 가능하도록 그림8과 같은 에뮬레이터를 지원하며, 마치 실제 기기를 실행하는 것과 같이 타이젠을 실행하고 애플리케이션을 설치 및 구동할 수 있다. 하드웨어가 가상화를 지원하는 경우 빠른 속도로 에뮬레이터를 사용할 수 있다. 웹 애플리케이션 개발의 경우 에뮬레이터뿐만 아니라 그림9와 같은 시뮬레이터를 제공하여 개발의 속도를 높였다. 웹 시뮬레이터는 구글 크롬 기반으로 실행되며 에뮬레이터를 띄울 필요 없이 간단하고 빠르게 웹 애플리케이션을 실행하고 디버깅할 수 있다.
타이젠 SDK를 설치할 때 그림10과 같이 플랫폼 개발 옵션을 선택하면 타이젠 IDE에서 애플리케이션뿐만 아니라 타이젠 플랫폼도 개발할 수 있다. 이를 위해 타이젠 IDE에서 타이젠 플랫폼 프로젝트를 생성하면 기본 템플릿 코드를 활용할 수도 있고 이미 존재하는 GIT에서 프로젝트를 불러들일 수도 있다.
타이젠 SDK는 다양한 웹, 네이티브 애플리케이션 샘플을 제공한다. 타이젠 IDE에서 몇 번의 클릭만으로 샘플 애플리케이션을 만들고 빌드하여 에뮬레이터 및 시뮬레이터, 테스트용 단말에서 애플리케이션을 실행할 수 있다.
그리고 타이젠 SDK를 설치하면 타이젠 IDE를 사용하지 않아도 커맨드라인에서 애플리케이션 및 플랫폼 개발이 가능하도록 GBS(Git Build System)나 SDB(Smart Development Bridge)와 같은 도구를 제공한다. GBS는 GIT을 기준으로 커맨드라인에서 빌드와 패키지 생성을 할 수 있는 도구이고 SDB는 에뮬레이터 및 테스트용 단말과 같은 기기와의 연결을 도와주는 도구이다. SDB를 이용하여 기기에 터미널로 연결해 명령을 내릴 수도 있다.
타이젠 테스트용 단말
타이젠은 여러 차례에 걸쳐 테스트용 단말을 배포했다. 아직까지 상용 단말이 출시되지 않은 까닭에 현재 타이젠을 실제 하드웨어에서 실행하려면 테스트용 단말을 이용해야 한다. 테스트용 단말은 레퍼런스 디바이스(Reference Device)라고 불리며 RD-210 및 RD-PQ 두 종류가 있다. RD-210은 갤럭시 S2 기반의 엑시노스 4210 SoC를 사용하며 RD-PQ는 갤럭시 S3 기반의 엑시노스 4412 SoC를 사용한다. 그림11과 같이 RD-210의 경우 투박한 모습을 하고 있으며 2012년 타이젠 개발자 컨퍼런스에서 최초 배포되었다. RD-PQ의 경우 갤럭시 S3와 외관이 매우 유사하며 타이젠 2.0 정식 버전 공개 이후에 배포되고 있다. 타이젠 테스트용 단말은 아직 배포 수량이 많지 않지만, 올해는 다양한 개발자 행사를 비롯하여 웹사이트를 통해서도 배포할 계획이 있다고 하니 관심 있는 독자는 참고하기 바란다.
커뮤니티
타이젠은 일반적인 오픈소스와 마찬가지로 질문/답변, 논의, 버그 리포팅, 정보공유 등을 할 수 있는 커뮤니티[5]를 제공하고 있다. 커뮤니티야말로 오픈소스의 심장이라고 볼 수 있는데, 타이젠 커뮤니티는 시간이 지날수록 많은 사람이 참여하고 있어 점점 활발하게 운영되고 있다. 커뮤니티에 참여할 때는 반드시 타이젠 웹사이트에 명시된 커뮤니티 가이드라인을 숙지해야 한다. 타이젠 커뮤니티는 아래와 같이 구성되어 있다.
<메일링 리스트>
메일링 리스트는 다수 사용자에게 메일을 전송하는 서비스로 오픈소스 프로젝트에서 의사소통으로 사용되는 중요한 수단이다. 메일링 리스트를 구독하는 다수의 사용자에게 질문을 하고 답변을 얻을 수 있다. 타이젠은 공지, 애플리케이션 개발, 컴플라이언스, 일반, IVI, 제품 개발, 커밋 등 다양한 종류의 메일링 리스트[6]를 제공한다.
IRC(Internet Relay Chat)는 오픈소스에서 흔히 사용하는 채팅 프로토콜이다. 타이젠은 Freenode의IRC 서비스를 이용하고 있으며 IRC 클라이언트 프로그램을 이용해 irc.freenode.net 서버의 6667번 포트로 접속해 #tizen 채널에 들어오면 여러 사람이 대화를 나누는 것을 볼 수 있다. 물론 여러분도 실시간으로 질문 및 답변을 할 수 있다. 하지만 타이젠의 경우 다른 오픈소스에 비해서 아직 IRC가 많이 활성화되어 있지는 않다. IRC는 다양한 종류의 IRC 클라이언트 프로그램을 사용하여 접속할 수 있으며 필자는 리눅스 용은 xchat, 안드로이드 휴대폰은 AndChat 프로그램을 추천한다.
<포럼>
타이젠은 공식 웹사이트에서 질문 및 답변을 위한 포럼[7]을 운영한다. 일반, 웹 애플리케이션 개발, 네이티브 애플리케이션 개발, SDK 및 IDE를 위한 네 가지 종류의 포럼이 운영되고 있으며 사용자가 직접 질문 및 답변을 할 수 있다. 포럼은 비교적 활성화되어 있으며 다른 사람들이 겪고 있는 고민을 나누고 경험을 공유할 수 있는 소중한 곳으로 자주 방문하길 권장한다.
<위키>
타이젠 위키 페이지[8]는 타이젠과 관련된 정보를 정리해놓는 백과사전 역할을 한다. 수많은 정보가 위키 페이지에 집약되어 있다.
<버그 리포팅 및 이슈 관리>
사용자가 주는 버그 리포팅은 오픈소스를 발전시키는데 큰 역할을 한다. 타이젠은 버그 리포팅 및 이슈 관리를 위해 JIRA[9]를 사용한다.
타이젠은 개방형 오픈소스이기 때문에 누구나 프로젝트에 참여하고 공헌할 수 있다. 타이젠은 코드 수정 및 패치 관리를 위해 Gerrit[10]을 사용한다. 여러분도 Gerrit을 이용하여 타이젠 플랫폼 개발에 참여할 수 있다.

그림 11.
타이젠 테스트용 단말 RD-210(좌) 및 RD-PQ(우)
(출처 : 자체 촬영)

그림 12.
타이젠 메일링 리스트 통계 자료(출처 : 타이젠 웹사이트 커뮤니티 통계)

 

 

타이젠은 누구나 쉽게 만들고 지속적으로 관리할 수 있는 단순한 프로그램을 지칭하는 것이 아니다. 커널에서부터 그래픽 라이브러리, 웹(Web) 프레임워크, 네이티브(Native) 프레임워크, 그리고 일부 애플리케이션까지 모든 것을 아우르는 커다란 플랫폼이다. 이런 플랫폼을 구성하기 위해 타이젠은 수많은 오픈소스 프로젝트를 사용하고 있으며 타이젠에 특화된 자체 제작 프로젝트도 다수 있다.
타이젠에서 사용하는 오픈소스 프로젝트의 경우 수정 사항을 다시 해당 오픈소스 프로젝트에 반영을 하는 등 기존 오픈소스 생태계 발전에도 기여하고 있다. 타이젠에 특화된 자체 제작 프로젝트의 경우 오픈소스화하여 아파치 라이선스로 공개를 하고 있어 누구든지 개발에 참여할 수 있다.
이번 호에서는 이렇게 타이젠의 근간이 되는 다양한 프로젝트를 큰 카테고리로 나누어보고 핵심이 되는 모듈을 살펴보겠다. 타이젠을 이용하여 애플리케이션을 개발하는 개발자뿐 아니라 타이젠 프로젝트 자체에 관심이 있는 플랫폼 개발자는 이번 연재를 관심 있게 읽을 것이라 기대한다.
타이젠은 삼성전자와 인텔의 주도 하에 활발히 개발이 진행되고 있으며 본 연재는 빠르게 발전하는 타이젠 최신 정보를 반영하고 있다.
이번 호는 지난 7월 3일에 공개가 된 타이젠 2.2 베타[1] 버전을 기반으로 하며 현재 타이젠에서 제공하는 모바일 프로파일 및 IVI 프로파일 중 모바일 프로파일에 중점을 두고 설명한다.
타이젠 소스코드
타이젠은 오픈소스이기 때문에 플랫폼 자체의 소스코드가 공개되어 있다. 타이젠의 각 구성요소를 소개하기에 앞서 앞으로 소개할 각 모듈의 소스코드를 확인하는 방법을 설명하겠다. 타이젠 소스코드는 Git[2]이라는 분산 버전 관리 시스템을 사용하여 관리된다. 소스코드는 git clone 명령을 이용하여 직접 다운로드 받을 수도 있지만, 타이젠 git-web[3] 사이트를 이용하여 쉽게 웹에서 확인할 수도 있다.
타이젠 git-web 사이트에 접속하면 그림 1과 같이 다양한 컴포넌트의 git 저장소 목록을 볼 수 있다. 이 중 app-core[4] 모듈의 소스코드를 살펴보자. 그림 2와 같이 git 로그와 태그 목록, 브랜치 목록이 있는데, 최근 업데이트된 tizen_2.2 브랜치의 트리[5]를 살펴보자. 그림 3 및 그림 4와 같이 app-core 모듈의 tizen_2.2 브랜치의 내용을 웹 상에서 확인할 수 있다. 같은 방법으로 앞으로 소개할 타이젠 모듈의 소스코드도 직접 살펴보기 바란다.
Linux, WebKit, EFL, GStreamer, U-Boot, FFMPEG, WebCL, Cairo, BlueZ, QEMU, GCC, ConnMan, NFC, PulseAudio, Smack, Wayland, oFono, X, wpa_supplicant, Dbus, glibc, OpenGL, Geoclue, libsoup, …
표 1. 타이젠에서 사용하고 있는 오픈소스 프로젝트
app-core, WRT(Web Runtime), system-server, sensor-fw, app-service, slp-pkgmgr, libslp-pm, msg-service, email-service, telephony-daemon, audio-session-manager, contacts-service, slp-calendar, accounts-svc, sync-fw, cert-svc, secure-storage, nfc-manager, …
표 2. 타이젠에서 자체적으로 개발한 프로젝트

그림 1. 타이젠 Git Web(출처 : 자체 제작)

그림 2. app-core Git Web(출처 : 자체 제작)
타이젠 아키텍처
타이젠 아키텍처를 개괄적으로 살펴보면 크게 커널, 코어 프레임워크, 웹 프레임워크, 네이티브 프레임워크, 그리고 애플리케이션 층으로 구성되어 있는 것을 확인할 수 있다. 이 중 타이젠 플랫폼 자체에 해당하는 커널 및 다양한 프레임워크는 수많은 서브시스템 및 모듈로 구성되어 있다. 모바일 프로파일에서는 웹 프레임워크와 네이티브 프레임워크가 모두 제공되는 것과 달리 IVI 프로파일에서는 네이티브 프레임워크를 사용하지 않고 웹 프레임워크만 사용한다.
<리눅스 커널>
타이젠 리눅스 커널은 3.0 버전에 기반하고 있으며 CMA/IOMMU와 같은 3.4의 기능을 일부 적용하였다. 프레임버퍼 대신 DRM/GEM, DMABUF를 사용하여 그래픽 메모리를 최적화하였다. 그 외에도 eMMC 4.5를 지원하며 V4L2(코덱, 카메라)를 지원한다. 또한 인가되지 않은 데이터 및 프로세스의 접근을 제어하는 Smack(Simplified Mandatory Access Control Kernel)을 적용하여 보안을 더욱 강화하였다.
<코어 프레임워크>
코어 프레임워크는 웹 프레임워크 및 네이티브 프레임워크에서 공통으로 필요로 하는 기본적인 기능을 제공하며 수많은 오픈소스와 자체 제작 모듈로 구성되어 있다. 타이젠에서는 코어 프레임워크를 쉽게 이용하기 위하여 코어 프레임워크의 각 모듈을 감싸주는 Core API를 제공하고 있다. 하지만 Core API가 모든 코어 프레임워크의 모듈을 지원하는 것은 아니며 서드파티 개발자에게는 공개되지 않아 제조사 및 타이젠 플랫폼 개발자만 Core API를 직접 사용할 수 있다.

그림 3. app-core tizen_2.2 브랜치 Git Web(출처 : 자체 제작)
<웹 프레임워크>
웹 애플리케이션을 위한 프레임워크이며 다양한 최신 웹 기술을 지원한다. HTML5 API, 비디오, 오디오, 폼, 2D 캔버스, WebGL, CSS3, 웹소켓, 웹 워커 등과 같이 W3C 및 여러 표준화 단체에서 정의한 표준을 지원한다.
그리고 표준에서 제공하지 못하는 부족한 부분을 채우기 위해 블루투스, NFC, 알람, 메시징 등의 다양한 디바이스 API를 제공하고 있다. 또한 웹 애플리케이션 실행, 라이프 사이클 관리, 접근 제어 등의 역할을 하는 Web Runtime도 제공하고 있다. 웹 프레임워크 중 UI 프레임워크는 jQuery 모바일을 사용하고 있다.
<네이티브 프레임워크>
C++ 네이티브 애플리케이션 개발을 위한 프레임워크로 타이젠 2.0에 도입되었다. 네이티브 프레임워크는 기존의 바다 플랫폼에 해당하며 1만여 개가 넘는 API를 제공한다. Base, Io, App, Security, Graphics, Ui, Net, Messaging, Social, Locations, Web 및 백그라운드 서비스, 이미지 및 얼굴 인식, TTS/STT 등 네이티브 애플리케이션에서 필요로 하는 다양한 기능을 지원한다.

그림 4. app-core tizen_2.2 브랜치 Git Web(출처 : 자체 제작)

그림 5. 타이젠 아키텍처 모바일 프로파일(출처 : 타이젠개발자컨퍼런스 2013)
타이젠 애플리케이션 유형
타이젠 애플리케이션은 사용하는 프레임워크에 따라 다음과 같이 분류할 수 있다.
<코어 애플리케이션>
코어 프레임워크에서 제공하는 Core API를 사용한 C 혹은 C++ 애플리케이션이다.
GUI(Graphics User Interface) 애플리케이션의 경우 EFL(Enlightenment Foundation Libraries) 툴킷을 사용한다. 성능이 좋고 메모리 및 전력 소모 면에서 우수하지만 Core API 문서가 공식적으로 공개되어 있지 않고 타이젠 IDE에서의 지원이 미약하다. 타이젠 2.2 베타 버전부터 타이젠 IDE의 플랫폼 프로젝트 메뉴에서 EFL 애플리케이션 템플릿을 지원한다.
<웹 애플리케이션>
HTML5/W3C API, JavaScript, CSS 및 디바이스 API와 같은 웹 프레임워크를 사용한 애플리케이션이며 일반 애플리케이션과 같이 기기에 설치할 수 있다.
API가 서드파티 개발자에게 공개되어 있다. 개발이 상대적으로 쉬워 진입 장벽이 낮다는 장점이 있다. 기기나 플랫폼 간의 이식성이 뛰어나며 타이젠은 HTML5 호환성 지원이 매우 우수하기 때문에 타이젠의 웹 애플리케이션은 다른 플랫폼보다 다양한 HTML5 기능을 사용할 수 있다.
타이젠IDE에서 웹 애플리케이션을 위해 UI 빌더, 웹 인스펙터, 시뮬레이터 등 강력한 개발 도구를 지원한다. IDE 상에서 다양한 샘플 애플리케이션을 지원하며 문서화가 잘 되어 있다. 단 일반적으로 네이티브 애플리케이션 보다 성능 면에서 단점을 보인다.

그림 6. 타이젠 아키텍처 IVI 프로파일(출처 : 타이젠개발자컨퍼런스 2013)
<네이티브 애플리케이션>
C++ 기반의 네이티브 프레임워크를 사용한 애플리케이션이다. API가 서드파티 개발자에게 공개되어 있다. 성능 및 메모리 사용량 면에서 웹 애플리케이션보다 우수하며 기존에 작성된 C 나 C++ 라이브러리를 그대로 사용할 수 있어 C나 C++ 기반의 프로젝트를 타이젠으로 포팅하기 용이하다. 애플리케이션 바이너리 하위 호환성(ABC, app binary compatibility)을 지원하고 API 레퍼런스나 개발자 가이드, 샘플 코드 등의 문서화가 잘 되어 있다.
하지만 웹 애플리케이션 대비 플랫폼 간 호환성이 떨어진다는 단점이 있다. 네이티브 애플리케이션은 크게 UI 애플리케이션과 서비스 애플리케이션으로 나뉜다. UI 애플리케이션은 눈에 보이는 GUI가 있으며 포그라운드(foreground) 혹은 백그라운드(background) 상태로 실행될 수 있다. 서비스 애플리케이션은 눈에 보이는 GUI가 없으며 백그라운드로 실행된다.
<하이브리드 애플리케이션>
웹 프레임워크와 네이티브 프레임워크를 같이 사용한 애플리케이션이다.
일반적으로 화면 구성을 위해 웹 프레임워크를 사용하고 백그라운드 서비스를 위해 네이티브 프레임워크를 사용하는 애플리케이션이 하이브리드 애플리케이션에 해당한다. 이 외에도 웹 애플리케이션을 플러그인 형식으로 실행하거나 네이티브 애플리케이션에서 웹 컨트롤을 사용하는 등 다양한 종류의 하이브리드 애플리케이션이 있을 수 있다.
이렇게 타이젠은 4가지 유형의 애플리케이션이 있을 수 있다. 웹 프레임워크, 네이티브 프레임워크, 코어 프레임워크 내의 일부 모듈에 대해서 살펴본다.
웹 프레임워크
웹 프레임워크 내에 그림 8과 같이 다양한 모듈이 포함되어 있다. 여기서는 그 중 WRT 모듈을 살펴본다.
WRT는 웹 프레임워크의 일부로다음과 같이 웹 애플리케이션의 패키지, 실행 및 라이프 사이클 관리 등의 역할을 한다.
– 설치 및 업데이트와 같은 패키지 관리
– 실행, 정지, 복귀 등과 같은 라이프사이클 관리
– API/네트워크 접근 및 샌드박싱(sandboxing)과 같은 런타임 보안
타이젠 1.0과 비교했을 때, 크게 달라진 점은 다음과 같다.
– 모든 자원이 원격에 있는 호스티드(hosted) 웹 앱 지원
– 설치, 업데이트 흐름 개선
– WebKit2/EFL 기반
– 런칭 속도 개선
– 자원 암호화/복호화
– 권한 기반 API 보안
– 웹 다이나믹 박스 지원
네이티브 프레임워크
그림 9와 같이 네이티브 프레임워크 내에 다양한 모듈이 포함되어 있다. 여기서는 애플리케이션 프레임워크와 UI 및 그래픽스 프레임워크에 대해 알아본다.
<애플리케이션 프레임워크>
네이티브 프레임워크 내에 있는 애플리케이션 프레임워크는 다음과 같이 애플리케이션 설치부터 라이프 사이클 관리 등의 기능을 제공한다. 네이티브 애플리케이션이라면 기본적으로 이 애플리케이션 프레임워크를 사용하게 된다.
– 패키지 설치, 제거, 업그레이드
– 애플리케이션 모델
– 애플리케이션 라이프 사이클 관리
– 애플리케이션을 위한 시스템 이벤트 처리
– 애플리케이션 설정 관리
UI 및 그래픽스 프레임워크에서는 애플리케이션 제작 편의를 위해 다양한 컨트롤과 컨테이너를 제공한다. 여러 효과와 애니메이션을 가진 2D, 3D 그래픽을 지원하고 테마를 커스터마이즈(customize)할 수 있는 기능을 제공한다.
코어 프레임워크
<웹킷(WebKit)>
웹킷은 웹페이지를 렌더링하거나 웹 애플리케이션을 렌더링하는데 사용되는 레이아웃 엔진이다. 웹킷은 웹브라우저를 만드는 기반이 되는 모듈이다. 웹킷은 애플의 사파리 브라우저, 구글의 크롬 브라우저 등 다양한 브라우저에서 사용되고 있다.
타이젠 1.0에서는 웹킷을 사용했으나 타이젠 2.0에서부터 웹킷2를 사용하기 시작했다. 웹킷2는 non-blocking API를 이용하여 웹 프로세스와 UI 프로세스를 분리하여 UI의 반응성, 안정성, 보안 등을 개선하였다. 웹킷은 사파리, 모바일 사파리, 크롬(크로미움), 안드로이드 브라우저, 아마존 실크, 돌핀, 블랙베리, Qt웹킷, 웹킷GTK+, EFL, WebKitWinCE와 같이 다양한 포트(port)가 존재하는데 타이젠에서는 EFL 포트를 사용한다.
최근에는 구글이 웹킷을 포크(fork)하여 블링크(blink)를 만들어 화제가 되기도 했다.

그림 7. 코어 프레임워크(출처 : 타이젠개발자컨퍼런스 2013)

그림 8. 웹 프레임워크(출처 : 타이젠개발자컨퍼런스 2013)

그림 9. 네이티브 프레임워크(출처 : 타이젠개발자컨퍼런스 2013)

그림 10. 타이젠 IDE에서 제공하는 코어 애플리케이션 템플릿(출처 : 자체 제작)
<텔레포니(Telephony) 프레임워크>
텔레포니 프레임워크는 음성 통화, 메시지, 심(SIM), 연락처, 2G/3G/LTE 네트워크 서비스 등을 담당한다. 플러그인 구조로 되어 있어 제조사의 요구 사항에 맞게 변경이 용이하다. 텔레포니 프레임워크는 크게 텔레포니 라이브러리, 플러그인, 서버로 구성되어 있으며 애플리케이션은 DBus를 이용해 텔레포니 API(TAPI)와 통신을 한다.
BlueZ는 리눅스 커널 2.4.6부터 사용되는 블루투스를 위한 모듈로 모든 종류의 블루투스 프로토콜과 레이어를 지원한다.
<입력 서비스 프레임워크>
입력 서비스 프레임워크는 텍스트 입력과 관련된 서비스를 수행한다. 기본 기능으로는 다국어 텍스트 입력 및 물리 키보드가 없는 기기의 텍스트 입력을 담당한다. SCIM(Smart Common Input Method) 1.4.7을 기반으로 하고 있으며 클라이언트/서버 구조 및 플러그인 방식으로 구현 되어 있다.

그림 11. 하이브리드 애플리케이션(출처 : 타이젠개발자컨퍼런스 2013)

그림 12. Web Runtime 구조(출처 : 타이젠개발자컨퍼런스 2013)

그림 13. 네이티브 애플리케이션 프레임워크가 제공하는 라이프 사이클(출처 : 타이젠개발자컨퍼런스 2013)
타이젠은 윈도우 전환 및 애니메이션, 콤포지팅(compositing)을 위하여 Enlightenment 윈도우 매니저를 사용하고 있다. 윈도우 매니저는 데스크톱 윈도우 상에 존재하는 모든 윈도우들을 관장하는 필수 애플리케이션이다.
윈도우가 나타나거나 사라질 때 또는 활성 윈도우 간의 전이가 존재할 때 애니메이션 효과를 적용하며, 스크린 공간 상 각각의 윈도우에 적절한 위치를 지정해 윈도우가 화면 범위를 완전히 벗어나는 경우를 방지해주는 역할을 수행한다. 뿐만 아니라 작업표시줄, 데스크톱아이콘, 바탕화면 등의 기능도 제공한다.
Enlightenment 윈도우 매니저는 내부적으로 EFL(Enlightenment Foundation Libraries) 툴킷을 사용한다. EFL은 GUI 툴킷 라이브러리로 GUI 애플리케이션 개발에 필요한 기본 기능 및 유용한 기능을 제공한다. 타 GUI 툴킷 라이브러리 대비 가벼우면서 높은 성능을 보장한다는 이점을 지닌다. 타이젠에서 코어 애플리케이션을 개발하는데 사용된다.
GStreamer는 파이프라인 기반의 멀티미디어 프레임워크이다. 단순한 오디오 재생, 오디오 및 비디오 재생, 녹음, 스트리밍, 편집을 포함하여 미디어를 처리하는 프로그램을 만드는 기능을 제공한다.
SQLite는 가벼운 데이터 베이스 시스템이다.
일반적인 클라이언트/서버 모델의 데이터 베이스 시스템과 달리 SQLite는 독립적인 서버 프로세스가 필요 없으며, 파일 하나에 데이터 베이스 내용을 저장한다. 애플리케이션에서는 단순히 함수 호출만으로 SQLite의 데이터 베이스 기능을 사용할 수 있다.
타이젠은 이 외에도 X11 윈도우 시스템, ConnMan, PulseAudio, Geoclue 등 다양한 모듈로 구성되어 있다. 지금까지 타이젠 플랫폼 내에 사용되는 다양한 프레임워크 및 모듈에 대해서 알아봤다.

그림 14. 네이티브 프레임워크에서 제공하는 다양한 컨트롤(출처 : 타이젠개발자컨퍼런스 2013)

그림 15. 웹킷과 웹킷2 구조 비교(출처 : 타이젠개발자컨퍼런스 2013)

그림 16. 입력 서비스 프레임워크 아키텍처(출처 : 타이젠개발자컨퍼런스 2013)

그림 17. 데스크톱에서 실행한 Enlightenment 윈도우 매니저(출처 : 자체 제작)
타이젠 앱챌린지 소식
이번 호를 마치기 전에 타이젠 앱챌린지 소식을 전한다.
지난 7월 9일 타이젠 공식 블로그를 통하여 타이젠 앱챌린지 소식[6]이 공개되었다. 총 상금 약 46억원(404만달러)이 걸린 이번 앱챌린지는 지금부터 오는 11월 1일까지 접수를 받는다.
9개 카테고리에 54개에 달하는 상이 개발자들의 참여를 기다리고 있다. 심사위원단이 심사를 하게 되며 선정된 개발자에게는 3만 달러부터 20만 달러까지 상금이 지급된다. 10위 안에 든 HTML5 애플리케이션의 경우 별도로 5만 달러를 지급한다. 타이젠 애플리케이션을 개발할 예정이라면 앱챌린지에 꼭 참여하도록 하자.

그림 18. 타이젠 앱챌린지 로고(출처 : 타이젠 공식 웹사이트)

오픈소스 타이젠
타이젠은 플랫폼 자체의 소스코드가 공개되어 있다. 누구나 타이젠에 들어있는 모듈의 소스코드를 열람할 수 있다. 하지만 일반적으로 단지 소스코드가 공개되어 있다고 해서 오픈소스라고 하지 않는다. 라이선스를 준수하는 한 해당 코드를 응용 및 재배포가 가능해야 하며 공개된 장소에서 프로젝트의 방향성과 미래를 논할 수 있어야 한다.
오픈소스 이니셔티브(Open Source Initiative) 단체에서는 약 10개 항목으로 오픈소스를 정의하고 있는데[참고1], 타이젠은 리눅스 재단 주관 프로젝트인 만큼 이러한 오픈소스의 의미를 충실히 따르는 오픈소스다.
그림 1.  OSI 로고(출처: 위키피디아)

필자는 오픈소스의 핵심을 두 가지로 꼽는다. 첫 번째는 소스코드 공개이며 두 번째는 투명한 커뮤니티이다. 소스코드 공개는 해당 오픈소스의 소스코드 및 개발 과정이 공개되어 있어야 함을 의미한다. 투명한 커뮤니티란 해당 프로젝트가 어떻게 진행되고 있는지 미래의 방향성이 무엇인지 공개가 되어 있어야 함을 의미한다. 이번 호에서는 타이젠 소스코드 및 타이젠 커뮤니티를 모두 다룬다.
타이젠 플랫폼 개발 웹사이트
타이젠 플랫폼 개발에 참여하려면 일단 타이젠 플랫폼 개발 웹사이트[참고2]에 접속하자. 타이젠 플랫폼 개발 웹사이트에는 타이젠 소스코드 링크, 스냅샷 링크, 코드 리뷰 시스템 링크, 개발 문서 링크 등 플랫폼 개발에 필요한 다양한 링크가 있다.
또한 타이젠 웹사이트는 영어, 프랑스어, 일본어, 한국어 등을 지원하기 때문에 국내 개발자들은 한국어로 된 컨텐츠를 접할 수 있다.
그림 2.  타이젠 플랫폼 개발 웹사이트(출처: 타이젠 웹사이트)

소스코드
타이젠 플랫폼 개발 웹사이트에서 소스코드 링크[참고3]를 클릭해보자. 해당 웹 페이지에는 타이젠에 사용되고 있는 모든 소스코드의 저장소 링크가 있다. 저장소 목록이 많기 때문에 페이지를 읽는 시간이 오래 소요될 정도로 타이젠에는 많은 모듈이 있다.
타이젠은 분산 버전 관리 시스템인 Git[참고4]을 이용해 소스코드를 관리한다. 각 저장소는 1.0_post, 2.0alpha, tizen_2.0, tizen_2.1, tizen_2.2, tizen 등의 브랜치(branch)가 있으며 해당 브랜치를 선택(checkout)하는 것만으로 원하는 배포 버전의 소스코드를 쉽게 확인할 수 있다. tizen 브랜치는 타이젠 3.0의 기반이 될 브랜치다. 그림4는 WRT(웹런타임) 저장소의 브랜치 목록을 나타낸다.
앞서 설명한 타이젠 소스코드 링크 페이지는 git-web 도구를 이용해 웹에서 git을 살펴보는 기능을 제공한다. 이는 타이젠 연재 4호 ‘타이젠 플랫폼의 이해(2013년 8월호)’에서 다룬 적이 있다. 이번 호에서는 직접 자신의 우분투(리눅스 배포판 중 하나) PC에 소스코드를 다운로드 받아본다.
그림 3.  타이젠 소스코드 목록(출처: 타이젠 웹사이트)

그림 4.  WRT git branch(출처: 자체 제작)

타이젠 계정 생성
타이젠 플랫폼 개발을 위해서 가장 먼저 할 일은 타이젠 웹사이트의 계정을 생성하는 것이다. 이 계정을 통해 소스코드를 PC에 다운로드 받을 수 있고, 게릿(Gerrit) 시스템에 패치를 올릴 수 있으며, 포럼에도 참여할 수 있다.
그림5와 같이 타이젠 웹사이트 오른쪽 상단의 계정 신청 링크[참고5]를 클릭해 간단히 회원 가입을 한다.
개발 환경 구축
타이젠 웹사이트 계정을 생성하고 나면 본격적으로 개발 환경을 구축할 수 있다. 가장 먼저 할 일은 게릿 시스템에 계정을 등록하는 일이다. 게릿은 구글에서 만든 코드 리뷰 도구이다.
타이젠은 패치를 보내고 코드 리뷰를 받기 위해 게릿 시스템을 사용한다. 우선 게릿 사이트[참고6]에 접속하여 설정 페이지에서 이름 및 이메일을 등록한다. 등록한 이메일로 인증 메일이 전송되면 이를 확인하여 인증 과정을 진행한다.
그림 5.  타이젠 웹사이트 회원 가입(출처: 타이젠 웹사이트)

다음은 SSH 공개 키를 게릿 시스템에 등록해야 한다. 만약 자신의 PC에 SSH 공개 키가 이미 있는 경우라면 게릿 시스템 설정 페이지에 SSH 공개 키를 등록하면 된다.
SSH 공개 키가 없는 경우 표1과 같이 커맨드라인에서 ssh-keygen 명령어를 이용해 공개 키 및 개인 키를 생성한다. 그리고 생성한 공개 키(기본 위치는 홈 디렉터리 내 .ssh/id_rsa.pub 파일)의 내용을 게릿 웹사이트 SSH 공개 키 등록란에 등록한다.
표 1. SSH 키 생성
$ ssh-keygen

다음은 PC 상에 타이젠을 위한 SSH 설정을 한다. 표2와 같이 홈디렉터리의 .ssh 안에 config 파일에 타이젠 사이트 및 사용자 이름, 포트 번호 등을 기입한다. {계정이름} 부분에 자신의 타이젠 웹사이트 계정을 입력한다.
표 2. SSH 설정
$ vi ~/.ssh/config
Host tizen
  Hostname review.tizen.org
  User {계정이름}
  Port 29418

이제 추가적인 개발 도구를 설치할 차례다. 우분투 12.04 사용자라면 표2와 같이 패키지 저장소 이름을 추가하고 gbs 및 mic 도구를 설치한다. GBS(Git Build System)는 Git에 기반한 빌드 시스템으로 타이젠에서 소스코드를 컴파일하고 패키지를 만들 때 사용하는 도구다.
MIC(MIC Image Creator)는 타이젠 플랫폼 이미지를 생성하는 도구다. 추후에 사용할 수 있으니 미리 설치해두자.
표 3. 타이젠 도구 패키지 저장소 추가
$ sudo vi /etc/apt/sources.list
deb
http://download.tizen.org/tools/latest-release/Ubuntu_12.04 /
$ sudo apt-get update
$ sudo apt-get install gbs misc

소스코드 다운로드
개발 환경까지 구축했다면 이제 원하는 소스코드를 다운로드 받아 보자. 여기서는 예제로 WRT 및 app-core, 네이티브 UIFW을 다운로드 받아보겠다. 표4와 같이 자신의 타이젠 계정 및 원하는 패키지의 저장소 주소를 입력해서 git clone 명령어를 실행하자.
앞서 설명한 SSH config 파일을 설정한 경우 표5와 같이 간단히 git clone을 실행할 수 있다. 만약 git이 설치되지 않은 경우 표6과 같이 git을 미리 설치하고 기본적인 설정을 해준다. 프록시를 사용하는 네트워크 환경이라면 적절한 프록시 설정을 해줘야 한다. 이 부분은 타이젠 웹사이트의 개발 환경 구축 페이지를 참조하기 바란다.
소스코드를 다운받은 후 원하는 브랜치로 이동(checkout)해서 소스코드를 살펴본다. WRT를 예로 들면, 가장 최근에 작업 중인 브랜치는 tizen이기 때문에 표7과 같이 tizen 브랜치로 이동해서 파일 및 로그를 살펴본다.(그림6)
그림 6.  WRT git 로그(출처: 자체 제작)

표 4. 타이젠 소스코드 다운로드
$ git clone ssh://{계정}@review.tizen.org:2941 8/{저장소 주소}
예) git clone ssh://seoz@review.tizen.org:2941 8/platform/framework/web/wrt
예) git clone ssh://seoz@review.tizen.org:2941 8/platform/core/appfw/app-core
예) git clone ssh://seoz@review.tizen.org:2941 8/platform/framework/native/uifw

표 5. 타이젠 소스코드 다운로드(SSH config가 설정된 경우)
$ git clone tizen:{저장소 주소}
예) git clone tizen:/platform/framework/web/wrt
예) git clone tizen:/platform/core/appfw/app-core
예) git clone tizen:/platform/framework/native/uifw

표 6. Git 설치 및 설정
$ sudo apt-get install git
$ git config –global user.name “{이름}”
예) git config–global user.name “Daniel Juyung Seo”
$ git config –global user.email {이메일}
예) git config–global user.email
seojuyung2@gmail.com

표 7. WRT git 둘러보기
$ cd wrt
$ git checkout tizen
$ ls
$ git log

그런데 타이젠에는 각 모듈별로 다양한 카테고리에 저장소가 있다.
예를 들어 WRT만 해도 framework/web/wrt.git, platform/framework/w eb/wrt.git, profile/ivi/wrt.git과 같이 세 개의 저장소가 있는데 이 중 어느 저장소를 사용해야 할지는 메일링 리스트나 IRC에 질문을 하거나 해당 모듈 리뷰어에게 직접 질문을 할 수도 있다. 각 모듈별 리뷰어는 타이젠 웹사이트의 리뷰어 명단[참고8] 페이지에 기술되어 있다.
소스코드 수정
자, 이제 소스코드를 받았으니 직접 코드를 수정해서 컨트리뷰션을 해보자. 누구나 직접 타이젠의 코드를 수정하고 반영할 수 있다는 사실만으로 흥미로운 일이다.
여기서는 예제로 필자가 커미터로 활동하고 있는 오픈소스 EFL의 elementary 라이브러리를 수정해보겠다.
elementary는 타이젠의 코어 프레임워크 내 UIFW에 사용되는 위젯 라이브러리다. 코드 수정에 앞서 git의 commit hook을 설정해야 한다. Git 저장소가 있는 디렉터리에서(예: wrt 혹은 elementary 등) 표8의 명령어를 입력하면 자동으로 commit hook을 다운로드 받는다. {계정}이라고 되어 있는 부분에 자신의 계정을 입력하자.
표 8. Git commit hook 다운로드
gitdir=$(git rev-parse –git-dir); scp-p -P 29418
{계정}@review.tizen.org:hooks/commit-msg ${gitdir}/hooks/
예) gitdir=$(git rev-parse –git-dir); scp -p -P 29418
seoz@review.tizen.org:hooks/commit-msg ${gitdir}/hooks/

이제 코드를 수정한 후 로컬에서 git commit 명령어를 이용해 커밋을 만들자. 커밋을 할 때 –signoff 옵션을 추가해야 한다. 코드를 수정했다면 gbs 도구를 이용해 컴파일 후, 테스트 기기나 에뮬레이터에 설치해서 테스트할 수 있다.
우선 표9와 같이 홈 디렉터리에 .gbs.conf라는 파일을 만들고 내용을 입력한다.
여기서는 타이젠 2.2 기반으로 작업을 하는 예를 보여준다.
표 9. .gbs.conf 설정 파일 수정
$ vi .gbs.conf
[general]
tmpdir=/var/tmp/
profile = profile.tizen2.2
work_dir=.
[repo.tizen2.2]
url =
http://download.tizen.org/releases/2.2/tizen-2.2/
[profile.tizen2.2]
repos=repo.tizen2.2

그리고 표10과 같이 소스코드를 수정한 git에서 gbs build 명령을 내리면 PC에서 해당 모듈을 컴파일해서 rpm 패키지를 만들게 된다. 이 때 -A 인자는 아키텍처를 의미하며 테스트 기기용으로 컴파일하는 경우 armv7l을, 에뮬레이터용으로 컴파일하는 경우는 i586을 입력하자.
표 10. gbs로 컴파일 하기
$ gbs build -A armv7l –include-all

gbs 명령 실행 종료 후 소스코드를 컴파일한 결과물의 위치를 알려준다.
이곳에 있는 rpm을 테스트 기기나 에뮬레이터에 설치해서 테스트를 하면 된다.
표11은 sdb 도구를 이용해 테스트 기기에 rpm 패키지를 설치하고 기기를 재부팅하는 과정을 보여준다.
표 11. rpm 설치 후 테스트 기기 재부팅
$ sdb push elementary*.rpm /tmp
$ sdb root on
$ sdb shell rpm -Uvh /tmp/elementary*.rpm
$ sdb sync
$ sdb reboot

패치 보내기
소스코드를 수정하고 컴파일한 후 테스트까지 마쳤다면 작업한 코드를 타이젠 오픈소스에 보내보자. 이 때 게릿 시스템을 사용하게 된다. 표12와 같이 git push를 하게 되면 게릿 시스템으로 소스코드가 전송이 되고 자동으로 리뷰어가 추가된다.
그림 7.  게릿에 올린 패치(출처: 타이젠 웹사이트)

여기서 마지막의 tizen은 브랜치 이름을 의미하는 것으로 tizen 브랜치는 일반적으로 타이젠 3.0 개발 브랜치를 의미하지만, 각 모듈 별로 사용하는 브랜치 이름이 다를 수 있으므로 작업에 앞서 브랜치 이름을 먼저 확인하자. git push를 하게 되면 그림7과 같이 게릿 웹사이트에서 자신의 패치를 확인할 수 있다.
표 12. git push를 이용한 패치 보내기
$ git push origin HEAD:refs/for/tizen

전체 소스코드 다운로드
Repo 도구를 이용하면 타이젠 플랫폼 전체 소스코드를 다운로드 받을 수 있다. 우선 표13과 같이 repo 도구를 설치한다.  이제 표14와 같이 repo init 및 repo sync 명령어를 이용해 타이젠 3.0의 기반이 되는 tizen 브랜치를 다운로드 받아 보자.
역시 SSH config 파일을 설정한 경우라면 계정 정보나 포트 번호 없이 명령어를 더 간단히 입력할 수 있다.
표 13. repo 도구 설치하기
$ mkdir ~/bin/
$ PATH=~/bin:$PATH
$ curl
http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ sudochmoda+x ~/bin/repo

표 14. tizen 브랜치 다운로드
$ repo init -u ssh://{계정}@review.tizen.org:2 9418/scm/manifest -b tizen
예) repo init -u ssh://seoz@review.tizen.org:2 9418/scm/manifest -b tizen
예) repo init -u tizen:/scm/manifest -b tizen
$ repo sync

타이젠 커뮤니티
타이젠은 오픈소스 프로젝트로서 갖춰야 할 기본적인 의사소통 도구를 제공하고 있으며 이는 타이젠의 커뮤니티 페이지[참고9]에 기술되어 있다.
타이젠 플랫폼 개발에 참여하려면 커뮤니티 참여는 필수적이다. 참고로 타이젠 웹사이트에 커뮤니티 가이드라인[참고10]이 제시되어 있어 무분별한 커뮤니티 사용을 방지하고 있으니 반드시 가이드라인을 먼저 읽어보도록 하자.
그림 8.  메일링 리스트 목록(출처: 타이젠 웹사이트)

타이젠 커뮤니티는 이미 연재 1호 ‘타이젠, 리눅스 기반 오픈소스 플랫폼(2013년 5월호)’에서 소개한 적이 있으니 이번 호에서는 실제로 커뮤니티 활동을 하는 방법을 설명한다.
메일링 리스트
타이젠은 공개적인 의사소통을 위한 채널로 메일링 리스트를 제공한다. 메일링 리스트는 다수 사용자에게 메일을 보내는 서비스로 질의응답 및 의사결정 등에 대한 이야기가 주로 다뤄진다. 타이젠은 공지, 일반, 컴플라이언스, 개발, 애플리케이션 개발, 제품 개발 등 다양한 주제의 메일링 리스트를 제공하고 있다. 타이젠 메일링 리스트 목록은 그림8[참고11] 웹 페이지에서 확인할 수 있다.
필자는 이 중 최근 가장 활발하게 운영되고 있는 개발(Dev) 메일링 리스트를 구독하기를 권한다. 개발 메일링 리스트는 타이젠 개발과 관련된 일반적인 이야기를 나누는 메일링 리스트이며 하루에도 수십 개의 메일이 오고 간다.
그림8의 메일링 리스트 목록에서 Dev 링크를 클릭하면 그림9와 같은 개발 메일링 리스트 가입 페이지[참고12]로 접속된다. 이메일 주소, 이름, 임의의 비밀번호를 입력하면 기입한 메일 주소로 확인 메일이 온다. 확인 메일의 링크를 클릭하면 인증이 완료되며 이제부터 타이젠 개발 메일링 리스트로 오는 모든 메일을 실시간으로 받아볼 수 있으며 대화에도 참여할 수 있다. 메일링 리스트에 메일을 보내려면 우선 구독을 해야 하며, 개발 메일링 리스트의 경우 주소로 메일을 보내면 자동으로 메일링 리스트를 구독하는 모든 사람에게 메일이 전송된다.
다른 사람이 보낸 메일에 답장을 보내려면 단순히 메일의 답장 쓰기 기능을 이용하면 되는데, 이 때 반드시 전체 답장(Reply to All) 기능을 사용하기 바란다. 앞서 설명한 개발 메일링 리스트 외에 일반(General), 공지(Announcement) 등의 메일링 리스트에 가입해두는 것도 도움이 된다. 만약 수많은 메일이 부담이 된다면 메일 다이제스트(Digest) 기능을 활용하는 것도 방법이다.
그림9의 메일링 리스트 가입 페이지에 다이제스트로 수신하기를 ‘Yes’로 선택하면 여러 메일을 하나로 묶어서 보내준다.
그림 9.  개발 메일링 리스트 가입 페이지(출처: 타이젠 웹사이트)

IRC
메일링 리스트는 공개적으로 의사 결정을 하고 질의응답을 나누는 중요한 의사소통 통로지만, 다른 사람의 답장을 받아야 다시 답변을 보낼 수 있어 실시간 의사소통으로는 부족한 단점이 있다. 이에, 대부분의 오픈소스는 IRC(Internet Relay Chat) 채팅 기능을 제공하고 있으며 타이젠도 마찬가지로 IRC 채널을 제공한다. IRC 클라이언트는 리눅스 사용자라면 xChat을 추천하고 안드로이드 휴대폰 사용자라면 AndChat을 추천한다.
그림11은 리눅스에서 xChat IRC 클라이언트를 이용해 타이젠 IRC 채널에 접속해 있는 모습이다. 표15와 같이 xChat 프로그램을 설치하고 실행하자. 프리노드 서버(irc.freenode.net)의 6667번 포트(혹은 8001 등의 포트도 가능)로 접속해 #tizen 채널로 접속하자.
참고로 프리노드는웹챗[참고13] 기능을 제공하고 있어서 IRC 클라이언트 설치 없이 바로 웹으로도 IRC에 접속할 수 있다.
표 15. xChat IRC 클라이언트 설치 및 실행
$ sudo apt-get install xchat
$ xchat

그림 10.  개발 메일링 리스트 아카이브(출처: 타이젠 웹사이트)

그림 11.  타이젠 IRC 사용 장면(출처: 자체 제작)

위키 페이지
타이젠은 그림12와 같이 수많은 사람들이 참여하는 공동 편집 백과사전인 위키 페이지[참고14]를 제공한다. 누구나 참여해 타이젠 관련 정보를 업데이트할 수 있으며, 위키 페이지에는 타이젠 관련 정보들이 잘 정리되어 있다.
위키 페이지를 업데이트하는 것도 타이젠에 공헌하는 행위로 볼 수 있다. 타이젠 계정을 이용해 로그인 후 문서를 수정해보자.
사진 12.  타이젠 위키 페이지(출처: 타이젠 웹사이트)

포럼
포럼은 우리에게 익숙한 게시판 형태의 질의응답 장소다. 그림13과 같이 일반 지원, 웹 애플리케이션 개발, 네이티브 애플리케이션 개발, SDK 및 IDE와 관련된 포럼이 있으며, 수많은 질의응답이 이루어지고 있다.
포럼에 올라오는 질문 및 답변을 읽는 것만으로도 타이젠 공부가 될 수 있고, 답변을 다는 행위도 역시 타이젠에 공헌하는 행위로 간주된다.
사진 13.  타이젠 포럼(출처: 타이젠 웹사이트)

이슈 관리 시스템
타이젠은 이슈 관리 시스템으로 지라(Jira)[참고16]를 사용한다. 사이트에 접속해 타이젠 계정으로 로그인을 한 후 버그를 신고할 수 있다. 그림14와 같이 지라 사이트에는 다양한 이슈가 올라오고 있으며 제기된 문제들이 해결되는 모습을 공개적으로 확인할 수 있다.
그림 14.  타이젠 이슈 관리 시스템(출처: 타이젠 웹사이트)

필자는 지라 사이트에 이슈를 등록하는 것도 타이젠 플랫폼 발전을 위한 공헌 활동이라 생각한다. 메일링 리스트, IRC, 위키 페이지, 포럼, 이슈 관리 시스템 등 타이젠 커뮤니티에 참여할 수 있는 방법은 다양하고 여기서 도움도 받을 수 있다.
모두 중요한 도구지만 필자는 오픈소스에 참여하고 싶은 사람이라면 적어도 메일링 리스트나 IRC에서 활동해보길 권한다. 여기에 올라오는 글을 읽는 것만으로도 타이젠에 대한 공부가 될 것이다.
특히 메일링 리스트에 여러분만의 아이디어를 제시하고 피드백을 받게 된다면 개발자로서 짜릿한 경험이 될 것이다.

 

 

Original Link:

http://www.embeddedworld.co.kr/atl/view.asp?a_id=6122

http://www.embeddedworld.co.kr/atl/view.asp?a_id=6362

http://www.embeddedworld.co.kr/atl/view.asp?a_id=7038

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s