IBM®
메인 컨텐츠로 가기
    Korea [국가변경]    이용약관
 
 
   
        제품    서비스 & 솔루션    고객지원 & 다운로드    회원 서비스    
메인 컨텐츠로 가기

한국 developerWorks  >  리눅스 | 오픈 소스  >

Sugar, XO 랩톱, One Laptop per Child (한글)

Sugar용 가상화, 사용, 개발

developerWorks
문서 옵션

JavaScript가 필요한 문서 옵션은 디스플레이되지 않습니다.

영어원문

영어원문


제안 및 의견
피드백

난이도 : 중급

M. Tim Jones, Consultant Engineer, Emulex

2007 년 8 월 07 일

One Laptop per Child (OLPC)는 전 세계 어린이들에게 컴퓨터를 보급하기 위해 소프트웨어를 비롯한 저렴한 랩톱(USD100)을 개발하는 기구입니다. 이 장치는 아이들을 대상으로 하기 때문에, 아이들이 표현과 교육을 위한 툴을 경험할 수 있도록 고급스러운 사용자 인터페이스와 애플리케이션을 제공해야 합니다. OLPC용 OS는 리눅스® 커널의 포트이지만, Sugar라고 하는 고유의 인터페이스도 갖고 있습니다. 이 글에서, Sugar 휴먼 인터페이스, QEMU를 사용하여 표준 PC 상에서 OLPC 랩톱을 가상화 하는 방법, Sugar와 OLPC 기능을 설명합니다.

OLPC 소개

OLPC 이니셔티브는 Massachusetts Institute of Technology Media Lab에서 시작되었다. 목표는 전 세계 문명의 혜택을 받지 못한 아이들을 교육하는 것이다. 여러분도 곧 알게 되겠지만, 랩톱의 디자인은 이러한 뚜렷한 목표 하에 개발되었다.

Walter Bender 인터뷰, OLPC 비전
20분 동안 진행되는 팟캐스트에서 OLPC 소프트웨어 및 콘텐트 회장 Walter Bender과의 인터뷰 내용을 제공합니다. 개발도상국 아이들에게 랩톱을 제공하게 될 이니셔티브에 대해 이야기 합니다. 비전, 직면 과제, 진행 상황 등의 내용을 실었습니다.

OLPC는 Nicholas Negroponte가 세웠다. OLPC가 코어 OS로서 GNU/Linux를 사용하기 때문에, 여기에는 전 세계 수 많은 오픈 소스 개발자들이 참여했다. 2007년 2월, 두 번째 베타 머신이 배포되었다. 그림 1은 Mike McGregor가 제공한 두 번째 베타 머신 모습이다. (Creative Commons License).


그림 1. OLPC XO 랩톱
그림 1. OLPC XO 랩톱

XO 랩톱 하드웨어

소셜 북마크

mar.gar.in mar.gar.in
digg Digg
del.icio.us del.icio.us
Slashdot Slashdot

USD100라는 가격과 XO 랩톱이 전 세계 완전히 다른 환경에서 사용된다는 사실을 고려해 보면, 랩톱의 물리적인 디자인은 매우 중요하다. 특히, 내구성과 전력 효율성이 있어야 한다.

고무 키보드와 터치패드를 포함하여, 습기에 대한 내구성이 있어야 한다. 또한, 충격에도 강해야 한다. 바로 이것 때문에 급회전 식의 미디어가 존재하지 않는다. 대용량 저장을 위해 플래시 장치를 사용한다. (1024MB NAND 플래시)

AMD Geode LX 프로세서는 기능 통합(그래픽 프로세서)와 낮은 전력 요구량(433MHz에서 일반적으로 1.3W이다.) 때문에 선택되었다. 7.5-인치 듀얼 모드 박막 트랜지스터(TFT) 디스플레이, 640x480 해상도 비디오 카메라, Analog Devices 스테레오 사운드 칩, 802.11b/g 호환 무선 Ethernet 칩셋(Marvel) 같은 중요한 주변 장치들도 포함되었다. 이 무선 장치는 정보 공유와 협동을 위해 랩톱들 간 네트워킹도 가능하다.

마지막으로, 철저하게 봉합된 배터리 팩은 16.5부터 22 사이의 Watt-Hours를 제공한다. 배터리는 소모성 제품이기 때문에, 전력 관리가 중요하다. 최소한 2,000회의 충전/방전 사이클이 필요하다. XO 랩톱은 또한 태양열 패널 또는 차량 배터리 같은 기타 전원도 사용한다.

XO 랩톱 소프트웨어

XO 랩톱에서 가장 흥미로운 것은 OS와 그래픽 환경이다. OLPC는 Red Hat Software와 제휴하여 그러한 컴포넌트를 개발했다. Linux 2.6 커널과 GNU 소프트웨어가 OS를 구성하고, 그래픽 인터페이스는 Sugar라고 한다. 아이들에 맞게, XO 랩톱의 작은 스크린에 맞춰 설계된 단순한 그래픽 인터페이스이다.

애플리케이션 개발 역시 혁신적이다. 애플리케이션 또는 XO 랩톱 용어로 액티비티(activities)는 GTK+를 사용하는 Python 프로그램이다. 이 글 후반부에서 Sugar와 XO 랩톱용 Python 프로그래밍에 대해 설명하겠다.

기본 디자인

디자이너는 XO 랩톱의 사용자들을 생각하고, 11 개의 디자인 원리를 정의했다. "많을수록 좋다(more is better)" 식의 접근 방식 보다는 아이들 교육이라는 정황 속에서 랩톱을 고안했다. (비디오 게임용 랩톱이 아니다.) 주요 디자인 원리에는 단순함, 가용성, 신뢰성 등이 포함된다. 복원력(Recoverability) 디자인 원리들 중 하나이다. 작업의 백업뿐만 아니라, 아이들이 시스템 상태를 알 수 있게 해주는 매력적인 방식을 제공한다. 이로써 아이들은 XO 랩톱을 더욱 잘 이해할 수 있게 된다. 핵심 디자인 원리에 대한 자세한 내용은 참고자료 섹션을 참조하라.

여러분도 보다시피, XO 랩톱의 디자인은 물리적 디자인부터 사용자 인터페이스까지 혁신적이다.

XO 랩톱 가상화

XO 랩톱을 얻을 기회는 희박하지만(최소한 백만 개를 주문해야 한다.), QEMU PC 에뮬레이터를 사용하여 XO 랩톱을 경험할 수 있다. QEMU는 오픈 소스 에뮬레이터로서 전체 PC(프로세서, 디스플레이, 네트워크, 디스크)를 에뮬레이트 한다. QEMU를 사용하여, 또 다른 OS(GNU/Linux, Microsoft® Windows®, Mac OS® X)에 OLPC XO 이미지를 부팅할 수 있다.

첫 번째 단계는 특정 호스트용 QEMU 패키지를 다운로드 하는 것이다. (참고자료) QEMU를 다운로드 및 설치한 후에, 다음 단계는 OLPC XO 이미지를 다운로드 하는 것이다. Red Hat에서 최신 이미지를 사용할 수 있다. (참고자료)

QEMU와 OLPC XO 이미지를 호스트 OS에 설치한 후에, 다음 명령어로 OLPC 랩톱을 부팅한다.

# ./qemu -L . -hda olpc.img -M pc
            

-L . 옵션은 BIOS, VGA BIOS, keymap용 디렉토리를 지정한다. -hda 옵션은 부팅 할 이미지를 지정한다. 이 이미지에는 리눅스 커널 이미지와 루트 파일 시스템뿐만 아니라, 리눅스를 시작하는데 사용되는 부트 섹터가 포함되어 있다. 마지막으로, -M pc 옵션은 에뮬레이트 할 머신을 지정한다. (이 경우, 표준 PC이다.)

명령어를 실행한 후에, 부트 프로세스를 보여주는 창이 디스플레이 된다. 여러분이 보게 될 첫 번째 것은 로더(loader) 스크린이다. (이 경우, 그림 2의 GRUB이다.)


그림 2. OLPC 이미지의 GNU GRUB 부트 스크린
그림 2. OLPC 이미지의 GNU GRUB 부트 스크린

OLPC for qemu stdout target을 선택한다. 전형적인 리눅스 커널 부트 프로세스가 실행된다. (그림 3)


그림 3. OLPC 이미지의 리눅스 커널 부트 메시지
그림 3. OLPC 이미지의 리눅스 커널 부트 메시지

커널 메시지 외에도, 부트 프로세스 시간도 보인다. 에뮬레이트라는 것을 고려할 때 매우 빠르다. 이 프로세스가 종료되면, Sugar 사용자 인터페이스로 끝난다.




위로


Sugar의 첫인상

Sugar는 XO 랩톱에서 제공하는 고급 사용자 인터페이스이다. 스크린 크기는 최소로 되어있고, 프레임은 전통적인 윈도우 스타일의 인터페이스로 되어있다. OLPC 랩톱이 부팅된 후에 Sugar 데스크탑이 나타난다. (그림 4) 이 그림에서, Sugar에 중요한 다섯 가지 섹션들이 있다. 프레임 내부 외에도, 이 프레임의 각 사이드는 인터페이스 구성에 있어서 특별한 의미를 지닌다.


그림 4. Home 모드를 보여주는 Sugar 데스크탑
그림 4. Home 모드를 보여주는 Sugar 데스크탑

이 프레임 내부를 Current 뷰라고 한다. Home 모드(그림 4) 또는 커런트 액티비티(current activity)이다. 많은 액티비티들이 시작되었음을 알 수 있다.

이 프레임의 상단은 Places로서 정의되고, 여기에서는 사용되지 않지만 실행 랩톱에서는 중요한 많은 아이콘들이 포함되어 있다. 좌측 상단 코너에 있는 네 개의 아이콘들은 Activity, Home, Group, Neighborhood 뷰들로 데스크탑을 이동할 수 있는 줌 버튼이다. 활성 프로그램들을 여기에서 사용할 수 있다. (현재는 아무것도 없다.)

이 프레임의 좌측은 Objects로서 정의되고, 일반 OS의 클립보드에 해당한다.

프레임의 우측은 People이라고 한다. 현재 액티비티에 개입된 다른 랩톱들이 포함된다.

마지막으로, 이 프레임의 밑 부분은 Actions 라고 한다. 액티비티용 런처(launcher)로 생각하면 된다. 많은 액티비티들이 그림 4에 나타나 있다. 이들을 클릭하면 액티비티를 시작할 수 있다. 예를 들어, Sugar 웹 브라우저(Mozilla 기반)를 시작하면, 그림 5처럼 보인다. Actions 섹션에도 다른 사용자들로부터 온 공지나 초대가 포함되어 있다. 예를 들어, 또 다른 XO 랩톱 사용자가 하나의 액티비티에서 협업을 원하면, 초대가 나타난다.


그림 5. Sugar에서의 웹 브라우징
그림 5. Sugar에서의 웹 브라우징

XO 랩톱과의 네트워킹을 원할 경우, 두 가지 이상의 추가 단계를 거쳐야 한다. 다음 섹션에서 설명하도록 하겠다. QEMU 배포판에 포함된 QEMU 문서를 참조하라. 한 가지 옵션은 호스트 OS에서 VPN 솔루션을 실행하는 것이다. (OpenVPN) 자세한 내용은 참고자료 섹션을 참조하라.




위로


Sugar에서 개발하기

XO 랩톱 이미지가 부팅되었으니, 개발의 측면에서 Sugar를 살펴보도록 하자. 먼저, QEMU 윈도우로 되어있는 상태에서, 이것은 마우스와 키보드는 물론, 모든 이벤트들이 여기를 향하고 있다. Sugar에서 호스트로 가고 싶다면 Ctrl-Alt 키를 활용한다. 다시 Sugar로 가려면, QEMU 에뮬레이터 윈도우 아무데나 클릭하면 된다. 다른 키 시퀀스 일부는 테이블 1을 참조하라.


표 1. Sugar용 컨트롤 키 시퀀스
시퀀스액션
Ctrl-Alt호스트 OS로 돌아가기
Ctrl-Alt-F1XO 리눅스 로그인
Ctrl-Alt-F3Sugar 데스크탑으로 돌아가기
Alt-0개발자 콘솔 보기

개발자 콘솔은 실제로 탭으로 관리되는 네 개의 다른 윈도우 컬렉션이다. 그림 6은 터미널 윈도우로 진행한 콘솔 모습이다. 이것은 정식 리눅스 터미널이기 때문에, vi 같은 명령어는 여기에서도 코드 개발에 사용된다.


그림 6. 터미널 윈도우에서의 개발자 콘솔
그림 6. 터미널 윈도우에서의 개발자 콘솔

터미널 윈도우는 단순한 bash shell이다. 여기에서 네트워킹도 가능하다. (Listing 1)


Listing 1. 터미널 윈도우에서 Internet Protocol (IP) 네트워킹 실행하기
                
[olpc@xo-12-34-56 /]$ su -
-bash-3.1# ifup eth0

Determining IP information for eth0... done.
-bash-3.1# ifconfig
eth0      Link encap:Ethernet  HWaddr 34.59.00.12.34.56
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500 Metric:1
          RX packets:4 errors:0 dropped:0 overruns:0 frame:0
          TX packets:28 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1350 (1.3KiB)   TX bytes:7866 (7.6KiB)
          Interrupt:11 Base address:0xc100

lo        Link encap:Local Loopback
          inet addr:127.0.0.1 Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16346  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)




위로


액티비티 생성 및 설치

Sugar를 이해했고 개발자 콘솔을 설치하는 방법을 알았으니, 이제는 간단한 액티비티(Sugar 애플리케이션)을 작성한 다음 이것을 설치하여 Sugar 데스크탑에서 사용해 보자. 먼저, 루트로서 개발자 콘솔 터미널 윈도우에서 액티비티 디렉토리로 가야 한다. (Listing 2)


Listing 2. 개발 디렉토리로 가기
                
[olpc@xo-12-34-56 /]$ su -
-bash-3.1# cd /usr/share/activities
-bash-3.1#

이 디렉토리에서 ls 명령어를 실행하면, Sugar 애플리케이션용 Python 소스를 포함하고 있는 많은 디렉토리를 볼 수 있다. 이곳에 액티비티를 둘 것이기 때문에 필요한 두 개의 디렉토리를 만든다. (Listing 3)


Listing 3. 액티비티 개발 디렉토리 만들기
                
-bash-3.1# mkdir TestActivity.activity
-bash-3.1# cd TestActivity.activity
-bash-3.1# mkdir activity
-bash-3.1# cp ../Web.activity/setup.py .
            

셋업 할 때, setup.py라고 하는 표준 파일이 필요하다. 기존 액티비티에서 이를 복사한다. 그런 다음, 액티비티를 실행하고 설명하는데 사용되는 네 개의 파일을 만든다. 첫 번째는 액티비티 소스 파일로서, Python 스크립트이다. Listing 4에 나타나 있으며, 이름은 TestActivity.py이다. 이 파일은 TestActivity.activity 디렉토리에 위치해 있다. 이 Python 액티비티는 두 개의 메소드를 만든다. 먼저, click은 버튼이 클릭될 때 호출되는 콜백 함수이다. __init__ 함수는 번들이 시작될 때 호출된다. 이 함수는 GTK를 사용하여 버튼을 만들고 이를 현재 뷰에 추가한다.


Listing 4. 새로운 액티비티용 소스
                
# Source for TestActivity.py
import logging
from sugar.activity import activity
import sys, os
import gtk

class TestActivity(activity.Activity):

	def click(self, widget, data=None):
		logging.info('Button clicked')

	def __init__(self, handle):
		activity.Activity.__init__(self, handle)

		self.button1 = gtk.Button('Button1')
		self.button1.connect("clicked", self.click, None)

		self.add(self,button1)
		self.button1.show()

MANIFEST라고 하는 선언 파일(manifest file)을 만든다. 여기에는 액티비티를 구성하고 있는 소스 파일이 포함된다. (TestActivity.py) 이 디렉토리(TestActivity.activity)에서 ls 명령어를 실행하면, Listing 5와 같은 아웃풋을 볼 수 있다.


Listing 5. 개발 디렉토리의 콘텐트 검사하기
                
-bash-3.1# ls
MANIFEST  TestActivity.py  activity  setup.py
-bash-3.1# cat MANIFEST
TestActivity.py
-bash-3.1# 

액티비티 하위 디렉토리로 가서 아이콘과 정보 파일을 추가한다. 아이콘 파일은 액티비티에 사용되는 이미지를 정의한다. 이것은 SVG 파일이고, Listing 6에 나타나 있다. (activity-TestActivity.svg).


Listing 6. 액티비티 아이콘 파일용 소스
                
<xml version="1.0" encoding="UTF-8"?>
<DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
  <ENTITY fill_color "#FFFFFF">
  <ENTITY stroke_color "#000000">
]>
<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50">
  <rect x="6" y="19" width="10" height="10" 
   style="fill:&fill_color;;stroke:&stroke_color;;stroke-width:2"/>
  <rect x="21" y="5" width="10" height="10" 
   style="fill:&fill_color;;stroke:&stroke_color;;stroke-width:2"/>
<svg>

마지막으로, 액티비티 정보 파일(activity.info)을 만들어야 한다. 이 파일은 액티비티 번들을 설명한다. (Listing 7)


Listing 7. 액티비티 정보 파일(activity.info)
                
[Activity]
name = TestActivity
service_name = com.test.TestActivity
class = TestActivity.TestActivity
activity-version = 1
icon = activity-TestActivity
show_launcher = yes

파일 생성을 검사하려면, TestActivity.activity 하위 디렉토리에서 ls 명령어를 실행한다. TestActivity.activity 레벨에 세 개의 파일과 한 개의 디렉토리가 있어야 하고, 액티비티 하위 디렉토리에 두 개의 파일이 있어야 한다. (Listing 8)


Listing 8. 개발 디렉토리 검사하기
                
-bash-3.1# ls
MANIFEST  TestActivity.py  activity  setup.py

activity:
activity-TestActivity.svg  activity.info

파일이 생성되었으니, 액티비티 번들을 구현할 수 있다. 이를 위해, 번들 빌더를 사용하는데, 이것은 setup.py 파일에서 제공된다. 다음 명령어는 공유 할 액티비티를 설치 및 만든다.

-bash-3.1# ./setup.py dev
-bash-3.1# ./setup.py dist
            

Sugar를 재시작 한 후에, 현재 XO 랩톱에 액티비티를 사용할 수 있다. .xo 파일(Java Archive(JAR) 같은 압축 파일)을 설치하려면 다음 명령어를 실행한다.

-bash-3.1# sugar-install-bundle TestActivity-0.xo
            

액티비티를 사용하려면, Sugar 데스크탑으로 간다. 개발자 콘솔의 우측 상단 코너에 있는 X를 클릭하면 된다. Sugar 데스크탑이 보이면, Action 프레임에 있는 액티비티(데스크탑의 밑에 있음)를 클릭한다. 이 이이콘은 사선으로 된 두 개의 작은 사각형으로 나타난다. 이 아이콘 위에 마우스 커서를 대면, TestActivity를 의미하는 메뉴 바가 나타난다. 이 아이콘을 클릭하면, 액티비티가 프레임의 현재 뷰에 로딩되었다는 것을 볼 수 있다. (아이콘은 Home 프레임에 디스플레이 된다.) 얼마가 지난 후에, 액티비티는 시작되고, 전체 프레임은 하나의 큰 GTK 버튼이 된다. 이 버튼을 클릭하면 프레임이 나타난다. 개발자 콘솔로 가서 TestActivity 로그를 보고, 버튼 클릭을 통해 방출된 메시지를 본다.

액티비티를 종료하려면, 프레임의 코너에 마우스 커서를 갖다 댄다. 이렇게 하면 프레임이 다시 보인다. 프레임 상단으로 가서, TestActivity 아이콘 위에 마우스 커서를 배치하면 메뉴 바가 나타난다. 이제 Close라고 하는 아이템을 누르면 액티비티가 중지한다. 그렇게 재미있는 것은 아니지만, Python과 GTK를 활용할 수 있다.




위로


결론

XO 랩톱은 활발히 개발 중이지만, OS와 Sugar 인터페이스는 충분히 안정적이다. OLPC 이니셔티브는 wiki를 통해서 많은 문서와 기술 자료들을 관리하고 있다. wiki 페이지에서 자세한 내용들을 참조하기 바란다.



참고자료

교육

제품 및 기술 얻기
  • QEMU: 오픈 소스 프로세서 에뮬레이터.

  • 레드햇 사이트: OLPC XO 이미지 다운로드.

  • OpenVPN: OS 에뮬레이트.

  • Python 객체 지향 스크립팅 언어로 작성된 Sugar용 액티비티.

  • SEK for Linux 주문, 2개의 DVD로 구성된 리눅스용 최신 IBM 시험판 소프트웨어(DB2®, Lotus®, Rational®, Tivoli®, WebSphere®)

  • IBM 시험판 소프트웨어: developerWorks에서 다운로드 하여 차기 리눅스 개발 프로젝트에 활용해보라.


토론


필자소개

M. Tim Jones

M. Tim Jones는 임베디드 소프트웨어 아키텍트이자 GNU/Linux Application Programming, AI Application Programming, BSD Sockets Programming from a Multilanguage Perspective등을 저술한 작가이다. 정지 우주선용 커널 개발부터 임베디드 시스템 아키텍처와 네트워킹 프로토콜 개발에 이르기까지 다양한 엔지니어링 경력이 있다. 콜로라도 롱몬트에 위치한 Emulex Corp.의 컨설턴트 엔지니어이다.




기사에 대한 평가


보다 나은 서비스를 제공하기 위함이오니 잠시 짬을 내어 이 양식을 제출하여 주십시오.



아니오잘 모르겠음
 


 


12345
 



위로


Linux is a registered trademark of Linus Torvalds in the United States, other countries, or both. Microsoft and Windows are registered trademarks of Microsoft Corporation in the United States, other countries, or both. 기타 회사, 제품, 및 서비스명은 다른 상표나 서비스 마크일 수 있습니다.

developerWorks 콘텐트를 다른 사이트에 전재하기:
developerWorks 콘텐트에 대한 저작권은 IBM에 있습니다. IBM의 서면 허가나 원본 저자의 허락이 없이는 전재를 금합니다. 저희 콘텐트를 전재하시려면 IBM developerWorks 담당자 에게 문의하십시오.
    IBM 소개 개인정보 보호정책 문의