Sugar と XO ラップトップで、子供たち一人ずつに 1 台のラップトップを

Sugar のための仮想化、使用、開発について

One Laptop per Child (OLPC) は、世界中の子供たちにコンピューター技能を広めるために、ソフトウェアが付属した低コストのラップトップ(USD100) を開発するという使命を掲げた組織です。そのコンピューターの対象は子供たちであるため、今までにないユーザー・インターフェースとアプリケーションを提供して、子供が表現や学習用のツールを試せるようにしなければなりません。OLPCのオペレーティング・システムは Linux® カーネルの移植版ですが、Sugarという独特なインターフェースを備えています。この記事では、Sugar ヒューマン・インターフェースの概要、標準的なPC でQEMU を使って OLPC ラップトップを仮想化する方法、そして Sugar と OLPCの機能を紹介します。

M. Tim Jones (mtj@mtjones.com), Consultant Engineer, Emulex

M. Tim JonesM. Tim Jones は組み込みソフトウェアのエンジニアであり、『GNU/Linux Application Programming』や『AI Application Programming』(現在、第 2 版)、それに『BSD Sockets Programming from a Multilanguage Perspective』などの著者でもあります。技術的な経歴は静止軌道衛星用のカーネル開発から、組み込みシステム・アーキテクチャーやネットワーク・プロトコル開発まで、広範にわたっています。また、コロラド州ロングモン所在のEmulex Corp. の顧問エンジニアでもあります。


developerWorks 貢献著者レベル

2007年 4月 24日

OLPC の概要

マサチューセッツ工科大学メディア研究所から誕生した OLPC イニシアチブは、世界中の恵まれない子供たちの教育支援を目標にしています。これから説明するように、ラップトップの設計は、この目標を明確に意識して開発されています。このOLPC は Nicholas Negroponte 氏によって創設されました。OLPC は GNU/Linuxをコア・オペレーティング・システムとして使っているため、世界各国から多くのオープン・ソース開発者たちが参加しています。2007年2月には2 番目のベータ版マシンが採用され、世界に向けて発進されました。図 1 は、MikeMcGregor が撮ったこの2 番目のベータ版マシンの写真です (Creative Commons(http://creativecommons.org/licenses/by/2.5/) の使用許可により掲載)。

図 1. OLPC の XO ラップトップ
図 1. OLPC の XO ラップトップ

XO ラップトップのハードウェア

USD100 という価格、そして XO ラップトップは世界各地の著しく異なる環境で使用されるよう意図されているという事実を考えると、ラップトップの物理的設計は極めて重要です。具体的に言うと、耐久性と電力効率の良さを兼ね備えていることが必須となります。

このラップトップは耐湿性に優れている必要があり、ゴム膜でカバーされたキーボードとタッチパッドなどが採用されています。さらに耐衝撃性も求められるため、回転式メディアは使用されていません。大容量ストレージには、フラッシュ・メモリーが使用されています(1024MB の NAND フラッシュ)。

AMD Geode LX プロセッサーが抜擢された理由は、その機能が統合されていること(グラフィック・プロセッサー) と所要電力の低さ (433MHz で通常 1.3W) です。また、7.5インチのデュアル・モード薄膜トランジスター (TFT) ディスプレイ、解像度 640x480のビデオ・カメラ、Analog Devices ステレオ・サウンド・チップなどの重要な周辺機器も備わっています。その上、Marvelの 802.11b/g 対応無線 LAN チップセットまで組み込まれているため、情報の共有と連携のためにラップトップ間にメッシュ・ネットワークを構成することも可能です。

さらに、完全に密閉されたバッテリー・パックは 16.5 ワット時から 22 ワット時の動作を実現します(セル技術に依存)。バッテリーは消耗品のため、電力の管理が重要になってきます。充電/放電サイクルは最低でも2,000 回を要求されていますが、XO ラップトップの場合は太陽電池パネルや自動車バッテリーといった他の電源も使用できるようになっています。

XO ラップトップのソフトウェア

XO ラップトップでとりわけ興味深いのは、オペレーティング・システムとグラフィカル環境です。これらのコンポーネントは、OLPCイニシアチブが Red Hat Software と提携して開発しました。オペレーティング・システムを構成するのはLinux 2.6 カーネルと GNU ソフトウェアですが、グラフィカル・インターフェースはSugar と呼ばれています。Sugar は子供向けに簡略化されたグラフィカル・インターフェースで、XOラップトップが提供する小さな画面です。

アプリケーションの開発にしても同じく革新的で、アプリケーション (XO ラップトップではアクティビティーと呼ばれます)は GTK+ を使用した Python プログラムです。XO ラップトップ向けの Sugar とPython のプログラミングについては、この記事の後半で説明します。

基本設計

設計者たちは XO ラップトップの対象者を熟慮して、最終的に 11 の設計原則を定義しました。彼らは多ければ多いほどいいという前提ではなく、学習というコンテキストでの子供たちのニーズにラップトップを合わせています(電力を消耗するビデオ・ゲームというコンテキストではありません)。中核となる設計原則には、シンプルで使いやすく、信頼性が高いことが含まれます。また、興味深い原則としては復元可能性も挙げられます。この原則は作業のバックアップだけでなく、子供たちが直観的な方法で既知のシステム状態に戻せるようにするという点も網羅しています。つまり、子供たちがXO ラップトップについての理解の範囲を広げられるようにすることで、さまざまな可能性を調べるための実験を可能にしているのです。中核的設計原則についての詳細は、「参考文献」セクションを参照してください。

このように、XO ラップトップの設計はその物理的設計からユーザー・インターフェースに至るまで画期的なものになっています。


XO ラップトップの仮想化

XO ラップトップを入手できる可能性はほんのわずかですが (最低 100 万台注文するのであれば話は別ですが)、QEMUPC エミュレーターを使用して XO ラップトップを試してみることはできます。QEMUは、PC をまるごと (プロセッサー、ディスプレイ、ネットワーク、ディスクなど)をエミュレートするオープン・ソースのエミュレーターです。この QEMU を使用すれば、OLPCの XO イメージを別のオペレーティング・システム (GNU/Linux、Microsoft®Windows®、または Mac OS® X など) でブートできるというわけです。

最初のステップとして、使用する特定のホストに対応した QEMU パッケージをダウンロードしてください(QEMU のダウンロード情報については、「参考文献」セクションを参照)。QEMU をダウンロードしてインストールしたら、次は OLPCの XO イメージをダウンロードします。最新のイメージは、Red Hat から入手できます(「参考文献」セクションにリンクを記載)。

ホスト・オペレーティング・システムに QEMU と OLPC の XO イメージをインストールしたら、以下のコマンドでOLPC ラップトップをブートします。

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

-L . オプションは、BIOS、VGA BIOS、そしてキーマップのディレクトリーを指定します。-hdaオプションが指定するのはブートするイメージです。このイメージには、Linuxカーネルのイメージとルート・ファイル・システムだけでなく、Linux の起動に使用されるブート・セクターも含まれます。最後の-M pc オプションは、エミュレート対象のマシンを指定します (この例では、標準PC)。

上記のコマンドを実行すると、ウィンドウにブート・プロセスが表示されます。最初に目にするのは、ローダーの画面です(この例では、図 2 に示すように GRUB の画面が表示されます)。

図 2. OLPC イメージによる GNU GRUB ブート画面
図 2. OLPC イメージによる GNU GRUB ブート画面

この画面では、OLPC for qemu stdout target を選択してください。すると、通常のLinux カーネル・ブート・プロセスが開始します (図 3 を参照)。

図 3. OLPC イメージによる Linux カーネル・ブート・メッセージ
図 3. OLPC イメージによる Linux カーネル・ブート・メッセージ

カーネル・メッセージの出力に伴って、ブート・プロセスの時間も表示されます。これを見ると、エミュレートされているにしてはかなり高速であることがわかるはずです。このプロセスが完了すれば、Sugarユーザー・インターフェースの完成です。


初めて目にする Sugar

Sugar は、XO ラップトップが提供する新たなユーザー・インターフェースです。画面サイズが最小であることから、従来のウィンドウ・スタイルのインターフェースではなく、フレームが選ばれています。まずは、OLPCラップトップのブート後に表示される Sugar デスクトップ (図 4) を見てください。この図には、Sugarにとって重要な 5 つのセクションが示されています。Sugar のインターフェースの編成では、フレームの内側だけでなく、四方を囲む枠にもそれぞれ特定の意味があります。

図 4. ホーム (Home) モードを表示する Sugar デスクトップ
図 4. ホーム (Home) モードを表示する Sugar デスクトップ

フレームの内側は、カレント (Current) ビューと呼ばれます。このビューは、図4 のようにホーム (Home) モードとなるか、または現行のアクティビティーとなります。上記の図では、多数のアクティビティーが開始されています。

フレームの上側はプレイス (Places) として定義されています。上記の図では使用されていませんが、実動ラップトップではここに重要な多数のアイコンが配置されます。左上隅にある4 つのアイコンはズーム・ボタンで、ユーザーはこれらのボタンを使ってデスクトップをActivity、Home、Group、Neighborhood ビューの間で切り替えられます。アクティブなプログラムは、ここでも使用できるようになります(上記の図にはありません)。

フレームの左側はオブジェクト (Objects) として定義されています。これは、最近のオペレーティング・システムでのクリップボードに相当します。

フレームの右側はピープル (People) と呼ばれます。ここに含まれるのは、ユーザーとのアクティビティーに現在関わっている他のラップトップです。

最後にフレームの下側ですが、ここはアクション (Actions) と呼ばれます。これはアクティビティーのランチャーだと思ってください。図 4 には多数のアクティビティーが示されていますが、いずれかをクリックすると対応するアクティビティーが開始します。例えば、Sugarの Web ブラウザー (Mozilla ベース) を開始した場合、図 5 のような表示になります。アクション・セクションには、他のユーザーからの通知や招待も表示されます。一例として、別のXO ラップトップのユーザーがアクティビティーでの協力を求めると、そのユーザーからの招待がここに表示されます。

図 5. Sugar での Web のブラウズ
図 5. Sugar での Web のブラウズ

XO ラップトップでネットワークを構成するには追加ステップがいくつか必要になるのでご注意ください。次のセクションでは、これらの追加ステップについて説明します。QEMUディストリビューションにパッケージされている QEMU ドキュメントに記載されているように、ホスト・オペレーティング・システム(OpenVPN など) で VPN ソリューションを実行するというネットワーク・オプションもあります。詳細は、「参考文献」セクションを参照してください。


Sugar を使用した開発

これで、XO ラップトップ・イメージはブートできたので、今度は開発の視点からSuger の詳細なナビゲート方法をいくつか説明します。まず、QEMU ウィンドウにカーソルが置かれると、このウィンドウでマウスとキーボードの操作がアクティブになり、すべてのイベントがここに送信されます。Sugarからホストに移るには、Ctrl-Alt キーの組み合わせを使います。Sugar に戻るには、QEMU エミュレーター・ウィンドウの任意の場所をクリックすればいいだけです。これ以外のキー・シーケンスのいくつかを表1 に記載します。

表 1. Sugar のコントロール・キー・シーケンス
シーケンス動作
Ctrl-Altホスト・オペレーティング・システムに戻ります。
Ctrl-Alt-F1XO Linux にログインします。
Ctrl-Alt-F3Sugar デスクトップに戻ります。
Alt-0開発者のコンソールを表示します。

開発者のコンソールは、実際にはタブで制御された 4 つの異なるウィンドウの集まりです。図6 に、端末ウィンドウにナビゲートしたコンソールを示します。これは通常のLinux 端末なので、コードの開発には vi などのコマンドを使用できます。

図 6. 端末ウィンドウが表示された開発者のコンソール
図 6. 端末ウィンドウが表示された開発者のコンソール

この端末ウィンドウは、単純な bash シェルです。このウィンドウで、ネットワークを有効にできます(リスト 1 を参照)。

リスト 1. 端末ウィンドウでインターネット・プロトコル (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 デスクトップで使えるようにインストールしてみましょう。まずは開発者のコンソール端末ウィンドウからルートとしてログインし、activitiesディレクトリーにナビゲートします (リスト 2 を参照)。

リスト 2. 開発ディレクトリーへ移動する
[olpc@xo-12-34-56 /]$ su -
-bash-3.1# cd /usr/share/activities
-bash-3.1#

このディレクトリーで ls コマンドを実行すると、Sugar アプリケーションのPython ソースが含まれる数々のディレクトリーが表示されます。これから作成するアクティビティーもこのディレクトリーに配置するので、必要な2 つのディレクトリーを作成します (リスト 3 を参照)。

リスト 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 という名前の標準ファイルです。このファイルは上記に示すように、既存のアクティビティーからコピーしてください。次に、アクティビティーの実装と記述に使用する4 つのファイルを作成します。最初に作成するのはアクティビティー・ソース・ファイルで、これはPython スクリプトです。リスト 4 に示すように、TestActivity.py という名前のこのファイルはTestActivity.activity ディレクトリーに配置されます。上記の Python アクティビティーでは2 つのメソッドを作成しています。最初に作成しているメソッド、click は、ボタンがクリックされると呼び出されるコールバック関数です。次の__init__ 関数はバンドルが開始されると呼び出され、GTK を使って作成したボタンを現行のビューに追加します。

リスト 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 という名前のマニフェスト・ファイルです。このファイルには、1行でアクティビティー (TestActivity.py) を構成するソース・ファイルを含めます。ディレクトリー(TestActivity.activity) で ls コマンドを実行すると、リスト 5 に示すリストが出力されます。

リスト 5. 開発ディレクトリーの内容を確認する
-bash-3.1# ls
MANIFEST  TestActivity.py  activity  setup.py
-bash-3.1# cat MANIFEST
TestActivity.py
-bash-3.1#

今度は activity サブディレクトリーに進み、アイコンと情報ファイルを追加します。このアイコン・ファイルで、アクティビティーに使用する画像を定義します。このSVG ファイル (activity-TestActivity.svg) をリスト 6 に示します。

リスト 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) です。このファイルはリスト7 に示すように、アクティビティー・バンドルを記述します。

リスト 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 レベルには 3 つのファイルと1 つのディレクトリー、そして activity サブディレクトリーには 2 つのファイルがあるはずです(リスト 8 を参照)。

リスト 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 デスクトップが表示されたら、アクション・フレーム(デスクトップの下端) にあるアクティビティーをクリックします。するとアイコンが、2つの小さな四角として対角線上に配置されます。マウスをこのアイコンに重ねると、TestActivityというメニュー・バーが表示されます。アイコンをクリックすると、アクティビティーがフレームの現行ビューにロードされるのがわかります(アイコンがホーム・フレームに表示されます)。そのすぐ後にアクティビティーが開始し、フレーム全体が大きなGTK ボタンに変わります。このボタンをクリックするとフレームが点滅します(ボタンが押されたことを示します)。この時点で開発者のコンソールに進んでTestActivity ログを見ると、ボタンのクリックによって出力されたメッセージを調べることができます。

アクティビティーを終了するには、マウスのカーソルをフレームのいずれかの隅に重ねます。するとフレームの周囲が再表示されます。フレームの上側にあるTestActivity アイコンにマウスのカーソルを合わせるとメニュー・バーが表示されるので、Closeという名前の項目を押してください。これで、アクティビティーは停止します。これはそれほど面白い動作ではありませんが、Pythonと GTK を使えばこれよりももっと面白い動作を実現できることとは確かです。


この先の展開

XO ラップトップは現在も開発の真っ最中ですが、オペレーティング・システムとSugar インターフェースは安定しており、使用できる状態です。OLPC イニシアチブが維持している活発なウィキ・サイトには、豊富なドキュメントと技術詳細が掲載されています。プロジェクトへの参加方法を含め、この興味深いプロジェクトの詳細について学ぶには、これらのウィキ・ページが絶好の情報源となります。

参考文献

学ぶために

  • OLPC のメイン・ページに、このプロジェクト、その歴史と目標、そして進展に関する情報が記載されています。
  • OLPC のハードウェア仕様についての詳細は、ウィキの Hardware specification を調べてください。ハードウェア設計の現状だけでなく、XO に適用された革新的技術についても説明しています。
  • XO ラップトップと Sugar インターフェースには一連の中核的設計原則が定義されています。このページでは、これらの原則と適用法方法を詳しく説明しています。
  • まだ完成していませんが、Sugar アクティビティーの開発環境が開発されているところです。Develop と呼ばれるこの開発環境は、XO ラップトップ (アクティビティーを開発するためのアクティビティー)を対象としたPython 統合開発環境 (IDE) です。
  • Sugar のグラフィック環境は GUI のツールキット、PyGTK で作成されています。
  • Sugar インターフェースについてさらに詳しく調べるには、その設計と使用方法を分かりやすく紹介しているこのウィキ・ページにアクセスしてください。
  • developerWorks Linux ゾーンには、Linux 開発者用の資料が豊富に揃っています。
  • developerWorks technical events and Webcasts で最新情報を入手してください。

製品や技術を入手するために

  • QEMU はオープン・ソースのプロセッサー・エミュレーターで、プロセッサー、ディスプレイ、ネットワーク、ディスクなどの周辺機器を含め、PC全体をエミュレートします。XO ラップトップをエミュレートするには、このパッケージをダウンロードしてインストールしてください。
  • OLPC の XO イメージは、この Red Hat のサイトからダウンロードできます。イメージには、Linux カーネルとルート・ファイル・システムだけでなく、GRUBと LILOが使用する通常のブート・セクターも含まれています。
  • OpenVPN を使用すれば、エミュレートされたオペレーティング・システムで、基礎なるホスト・オペレーティング・システムのネットワーク・ハードウェアを使用できます。
  • Sugar のアクティビティーは、Python オブジェクト指向スクリプト言語で作成されています。
  • developerWorks から直接ダウンロードできる IBM トライアル・ソフトウェアを使用して、Linux で次の開発プロジェクトを構築してください。

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux, Open source
ArticleID=245807
ArticleTitle=Sugar と XO ラップトップで、子供たち一人ずつに 1 台のラップトップを
publish-date=04242007