Zopfcode

かつてない好奇心をあなたに。

【翻訳】組み込みLinuxの時系列 (Embedded Linux timeline)

本記事はルーターハックAdvent Calendar 3日目の記事です。

今日は、昨日の記事で予告したように、組み込みLinuxの歴史について時系列でまとめられた記事 "Embedded Linux timeline" を翻訳してお届けする。

この記事は、イギリスはイングランドの Linux 開発者 Chris Simmonds 氏によって2012年に書かれたものである。以前ググっていたら偶然たどり着き、内容が濃厚なのでずっと記憶に残っていた。今回の Advent Calendar で歴史を振り返るにあたり、これを是非翻訳させてほしいと本人に依頼したところ了承が得られた。素晴らしい文章と、翻訳の許可をくださった Simmonds 氏に感謝する。

文章中の脚注はすべて訳注である。訳者の感想は末尾にある。誤訳の指摘は Twitter で私まで。

Embedded Linux timeline

2012年7月22日 ― Chris Simmonds

当初は組み込み向け OS として使われることを想定していなかった Linux が、このごろでは広い範囲のデバイスに搭載されていることに気づくだろう。Linux がどのようにして純粋なPC環境*1を飛び出して我々の技術へと浸透していったかを理解するために、筆者が特に重要なマイルストーンだと考えるものを時系列にまとめた。多くの点で詳細を欠いているはずなので、ぜひこれを読んだ皆さんからフィードバックやコメントを頂きたいと思っている。ページの下にコメントしてもらってもいいし、私にメールしてもらっても構わない。

まず、筆者の言う "embedded" (組み込み) の定義から始めることとしよう。これは、単一目的かつユーザー側でプログラムできないデバイス(Webカメラ、セットトップボックス、ロボットコントローラ)や、リソースが制限されたデバイス(PDA、スマートフォンからタブレットに至るまで)を合わせた多分に包括的なもので、共通する特徴は

  • 安く製造できる
  • 低消費電力である
  • (ほとんどの場合)PCではなく、Intel アーキテクチャでない
  • ユーザーからの入力がよくボタンやタッチ画面でなされる
  • RAMが少ない
  • 不揮発性ストレージを提供するフラッシュメモリがある

である。

さて、これらを整理したところで、時系列を書くことにしよう。

1991年

Linus が IBM PC 向けにオープンソースの Unix カーネル として Linux 0.1 をリリースした。

1995年

Linux がバージョン 1.2 になり、Alpha、i386、MIPS、 さらに SPARC アーキテクチャをサポートした。これは2つの意味で重要である; 他のアーキテクチャに移植できるほどソースコードが十分にモジュラーであることを意味し、また、当時 MIPS が低コストなデバイスで次第に人気を集めていたからである。

Bruce Perens が、Linux image を 1.44 MiB のフロッピーディスクに収め、ひいては Debian のインストールディスクやレスキューディスクを作ることを可能にする Busybox プロジェクトを立ち上げた。偶然にも組み込みデバイス向けに小さな Linux image を生成する用途にもぴったりだったため、現在でも非常に多くの組み込みデバイスの礎となっている。

1996年

組み込みデバイスで一般的なアーキテクチャである m68k と ppc が Linux 2.0 でサポートされた。

組み込み Linux に注力した初期の企業の1つである Timesys が、 Dr. Raj Rajkumar と Srini Vasan によって設立された。リアルタイム機能の実装が盛り上がった初めの時期である。悲しいかな、彼らはそれらを非公開のバイナリモジュールにしたため、 mainline のカーネルでそれらの一部たりとも日の目を浴びることはなく、今では(mainlineのリアルタイム実装に)完全に取って代わられてしまった。

1997年

Dave Cinege が Linux Router Project (LRP) を開始した。フロッピーディスク1枚で PC を家庭や中小企業向けのルーターにできる Linux を実現するため、LRP では Busybox を使った。一部の人からは、これが最初の真の組み込み Linux プロジェクトだといわれている。LRP は x86/PC を主眼においたが、 "Arlan Wireless Howto" を通じて Linksys WRT54G で動く Linux へ、そして多くの家庭用もしくは業務用ルーターで動く Linux へと繋がっていった。このきわ立った重要さについては David Täht 氏の記事を読むと良い。

1998年

Busybox のメンテナンスが LRP のために Dave Cinege に引き継がれた。 彼は多くの追加実装をし、モジュラー化されたビルド環境を作り、そして Busybox の目標を汎用な高レベルの組込みシステムへと向けた。

Kenneth Albanowski と D. Jeff Dionne が uClinux に着手した。uClinux は MMU (Memory Management Unit) を持たないシステムのための Linux である。まず最初のポートは Motorola MC68328 DragonBall プロセッサーになされ、 TRG SuperPilot Board を搭載する 3Com PalmPilot が最初にポートされた機器となった*2。それから uClinux は幅広いプロセッサーに移植され、Linux が動作するハードウェアの範囲を広げるのに一役買うこととなった。uClinux はさらに非常に小さな C ライブラリ uClibc や、 Buildroot というビルドツールも生み出した。

Corel NetWinder(後にRebel.comが部門を買収)が出荷された。NetWinder は ARM のハードウェアにおいて Linux を実装する起爆剤となった ARM ベースの PC (つまり真の「組み込み」ではない!)であり、WS (Web サーバー)、 LC (シンクライアント)、 DM (開発者向けマシン) といった機種別に販売された。後に OfficeServer という機種がネットワーク管理に使われた*3。 いまだにいくつかのオープンソースプロジェクトでは使用されているが、ハードウェアはとうに生産が終了している。 NetWinder は 275 MHz で動作する StrongARM SA-110 に加え、32 MiB RAM と 2 GiB HDDを搭載した。詳しくは http://www.netwinder.org/ を参照されたい。

インターネットラジオ受信機 Kerbango 100E が告知された。100E は 80 MHz で動作する PowerPC (MPC823) を搭載した。Kerbango は広告宣伝と著名な出資者により組み込み Linux の市民権を得ようとしたもので*4、後述する MontaVista の立ち上げを助けたりもしたが、商品として出荷されることはなかった。

1999年

ARM アーキテクチャ が Linux 2.2.0 でついに追加された。

David Woodhouse が Memory Technology Devices (MTD) レイヤーに着手した。MTD はフラッシュメモリにアクセスするフレームワークを構築し、後に続くフラッシュベースのファイルシステムの基礎となっている。フラッシュメモリは多くの組み込みデバイスにおけるキーコンポーネントである。

Jim Ready が MontaVista を起業した。MontaVista は Timesys と並び、実用的な組み込み OS として Linux を使うというアイデアを普及させた点で重要である。

Bryan Sparks が Lineo を起業した。Lineo は Timesys や MontaVista ほど長続きしなかったが、組み込み Linux に多大な貢献を遺した。

TiVo が同社にとって初の DVR (Digital video recorder) を3月に出荷した。TiVo はコンシューマー向けで初めて Linux を走らせた製品の1つである。初代製品は PowerPC 403、16 MiB のRAM、14 GiB のハードディスクを搭載した。

Axis が Webカメラ 2100 をリリースした。最初に Linux を動作させた商用製品の1つとして、Axis は2つの点で貢献した。まず NOR フラッシュメモリ向けの堅牢なファイルシステムを作り上げた。JFFS (Journaling Flash File System) と呼ばれるそれは、今日において非常に多くのデバイスで用いられる JFFS2 というファイルシステムへと進化していった。もう1つの貢献は、MMU を欠いた ETRAX プロセッサーを動作させるための uClinux に対するものだ。2100 は ETRAX-100 RISC CPU と、8 もしくは 16 MiB RAM、 2 MiB NOR フラッシュ、uClinux 2.0.33 を搭載した。http://www.axis.com/25years/milestones.htm (WebArchive) にこの製品への言及がある。

ソフトウェアコンサルタント Denx は、fadsboot (Dan Malek) と 8xxrom-0.3.0 (Magnus Damm) のコードをマージしつつ PPCBoot の実装を開始した。PPCBoot 0.41 は後の2000年7月に MPC 8xx ボード向けとしてリリースされた。PPCBoot は、今日では何万にもおよぶ組み込み基板のブートで用いられる U-Boot へと進化していった。

2000年

Timesys が、リアルタイム拡張付きの商用Linuxとしては初となる Linux/RT 1.0 をリリースした。

handhelds.org が6月に立ち上げられた。 handhelds.org (WebArchive) は Compaq iPAQ H3600 を起点として様々なポータブルデバイスに Linux を移植することを主眼に置いた。

当初ソフトウェアは以下のような構成だった:

  • Linux 2.4.0 (Russel M King と Nicolas Pitre による ARM/StrongARM のパッチを当てたもの)
  • XFree86 4.0a
  • タッチスクリーンドライバ h3650_ts.c
  • xterm、scribble、 xeyes のような X アプリケーションのサンプル

興味深い話として、かつて Compaq Cambridge Research Laboratory (CRL) にはネイティブコンパイルのための iPAQ のクラスタがあった。各マシンが 32 MiB の RAM とローカルディスクもしくは NFS によるネットワークストレージを持ち、デベロッパーは SSH でログインしてコードをビルドすることができた。http://handhelds.org/projects/skiffcluster.html (WebArchive)http://handhelds.org/cam.html (WebArchive) を参照されたい。

Ingo Molnar と Andrew Morton が Linux のリアルタイム動作を改善するための "voluntary preempt パッチ*5" に着手した。このパッチは、カーネル内の長い処理サイクルを短いチャンクに分割しつつ、割り込みハンドラが "need_resched" フラグを立てた場合にリスケジュールすることで割り込み処理の最悪レイテンシを減らすものだ。Mainline Linux コミュニティとの作業は、同時期に サンドボックス Linux を試みていた他のリアルタイムプロジェクトとは対照的で*6、結局このパッチは 2.6 でようやくマージされた。

Rick Lehrbaum が、その後長い間組み込み Linux で何が起きているかを知るリファレンスとなった http://www.linuxdevices.com/ (WebArchive) を立ち上げた。残念ながらこのサイトは2012年に閉じられてしまったが、今でも一部のコンテンツはアーカイブで閲覧することができる。

2001年

RedHat の支援のもとで、Mainline Linux に フラッシュストレージをもたらす JFFS2 が Linux 2.4.10 でお目見えした。

Robert Love がカーネルプリエンプションのパッチに着手した。これはおおまかには voluntary preempt パッチの補足であり*7、Linux のリアルタイム動作を改善する次なる一手となった。カーネルプリエンプションは MontaVista の MVL (MontaVista Linux) 4.0 に採用され、Linux 2.6 で標準となった。

Sharp が Linux 2.4.10 が動作する Zaurus SL-600D を発売した。206 MHz で動作する StrongARM SA-1110 に、64 MiB RAM、16 MiB NOR フラッシュを搭載していた。ちなみにこれは Developer Edition なので型番に 'D' が入っている。最初の一般向け Zaurus は 2002年に発売された SL5500 である。

Compaq の Project Mercury (WebArchive) は未来を見せるようだった。Jim Gettys とその他のメンバーが、GSM・CDMA・802.11b (Wi-Fi)・Bluetooth・VGA (640x480) カメラ・加速度センサー・1GiB IBM Microdrive を搭載した拡張スリーブ BackPAQ を iPAQ H3600 に取り付け、ハンドセットのプロトタイプを作り上げた。加速度センサーはデバイスの回転に応じて画面の向きを変えるために使われた。このデバイスをまだ見たことのない記者達と話す際、Jim はこれを "The Unobtainium*8" と呼んだ。研究開発のために数百台が生産されたが、量産されることはなかった。

5月、ハンドヘルドコンピュータ向けのディストリビューションである Familiar Linux が、 familiar.handhelds.org (WebArchive) でホストされるようになり観測しやすくなった。 v0.4 の時点で、 Familiar Linux はハンドヘルド向きの機能を多く搭載していた。アンチエイリアスのかかったフォントや BlackBox ウインドウマネージャ、小さなパッケージマネージャ ipkg といったものだ。また、Debian ARM port につながる多くの作業をこなした。GNOME Palmtop Environment (GPE) と呼ばれる最初の UI は、 Keith Packard が実装した Tiny-X サーバーと XFree86 の組み合わせに GTK+ を合わせたものがベースとなっていた。Familiar は後に Nokia Maemo や OpenEmbedded、ひいては Yocto につながる長い開発の流れの起点となった。

12月、uClibc のテスト用に組み込み Linux システムをビルドするための方法として Buildroot が uClinux/uClibc から現れた。Buildroot はその後もメンテナンスされ、今でも使用されている。

2002年

Linksys が無線ルーター WRT54G を発売した。これは Linux が動作する最初のルーターで、 Linux ベースの家庭用ルーターの産業を生み出した。オリジナルの WRT54G は 125 MHz で動作する Broadcom BCM4702 (MIPS32) に、16 MiB の RAM と 4 MiB フラッシュを搭載した。

Charles Manning が、Linux から NAND フラッシュメモリへのアクセスを可能にする YAFFS ファイルシステムを発表した。NAND は当時としては新しい技術であったが、後に NOR フラッシュをほとんど置き換えることになった。YAFFS version 2 (YAFFS2) は現在の Android デバイスで広く利用されている。

Open Palmtop Integrated Environment (OPIE) は Familiar Linux 向けに代替の UI を GPE の置き換えも含めて開発し始めた。OPIE は Trolltech の Qt/Embedded をベースとしており X を必要としなかった。OPIE は http://opie.sourceforge.net/ にある。

U-Boot (後の Das U-Boot) がリリースされた。ARM や Motorola Coldfire を含む PPC 以外のアーキテクチャをサポートするにあたって、PPCBoot 2.0.0 を改名したものが U-Boot である。

Embedded Linux Consortium が立ち上げられ、ELC Platform Specification (WebArchive) を発行した。ELCPS はデスクトップおよびサーバー向けの Linux ディストリビューションの標準規格 Linux Standard Base (LSB) に似たものを組み込み Linux 向けに作る試みだった。まったく前進することなく、ELCPS は2005年に Open Source Development Labs (OSDL, 現在の The Linux Foundation) に統合された。これはまさに組み込みエンジニアの発想力を抑えることなどできないことを表している。そう、君たちに言っているんだよ、Google Android チームの皆さん。

2003年

Linux 2.6 が12月にリリースされた。組み込みの目線でいうと、特筆すべき追加機能は voluntary preemption と preemptible kernel patch 両方でのリアルタイムサポートと、uClinux 由来の多くのコードの導入である。

Motorola が、東アジア*9で発売した A760 と後の2004年にアメリカで発売した A780 に Linux と Java を採用した。携帯電話の OS としての Linux の始まりである。A780 は 316 MHz で動作する ARM 925 (Intel PXA270) に、 48 MiB のフラッシュと QVGA (240x320) タッチスクリーンを搭載した。Linux の移植は MontaVista によって提供された。

OpenEmbedded Project が生まれ、Familiar Linux、 OpenZaurus、および OpenSIMpad で共通のビルドシステムとコードベースを構築した。OE は、Yocto や MontaVista Linux を含む多くの組み込みディストリビューションの基礎となっている。

モバイルプラットフォームのソフトウェア開発を手がけるイギリスのコンサルタント OpenedHand を Matthew Allum が立ち上げた。 Matthew はかつて handhelds.org で仕事をしており、特に QVGA (240x320) 以上の小さなディスプレイの効率的な利用について手がけていた。OpenedHand から生まれたものには、例えばシンプルなフルスクリーンの X11 ウインドウマネージャである Matchbox や UI ライブラリの Clutter がある。OpenedHand は Nokia 770 の開発で Nokia と、One Laptop Per Child (OLPC) XO-1 の開発で OLPC と協業した。少し後に、OpenedHand の従業員だった Richard Purdie が OpenEmbedded をベースに Poky Linux ('poky' は 'hockey' の韻で) を開発した。より詳しくは、こちらを参照。

クロスコンパイルのツールチェーンを作るのが、 Dan Kegel の crosstool スクリプトによって少し楽になった。Crosstool は Bill Gatliff の crossgcc FAQ とビルドスクリプトがベースになっている。crosstool ができるまでは、ツールチェーンのビルドというのはいつもプロジェクトの最初につまずかせる存在だった。後に crosstool は crosstool-NG に取って代わられた。

2005年

Ingo Molnar、Thomas Gleixner およびその他のメンバーが、Linux をハードリアルタイムに近づけるためのさらなる改善をもたらす PREEMPT_RT カーネルパッチに着手した。

Maemo が動作する 770 Internet Tablet を Nokia がリリースした。Maemo は Familiar Linux/GPE によるベースの上に間接的に実装され、OpenedHand 由来の技術をいくつか利用していた。770 は後に N9 へとつながる製品ラインナップの最初である。

2007年

業界標準の携帯電話向け Linux ベース OS を作るため LiMo Foundation が立ち上がった。LiMo は西*10では少ししか知られていないが、東南アジアでは多くの電話の基盤となり、特に日本では NTT DoCoMo がよく採用した。LiMo の創始者には Motorola、NEC、NTT DoCoMo、Panasonic、Samsung が含まれる。

2008年

最初の Android ハンドセット、 T-Mobile G1 (HTC Dream としても知られる) が10月に発売された。G1 は 528 MHz で動作する Qualcomm MSM7210A (ARM11) をはじめ、 256 MiB NAND フラッシュ、192 MiB RAM、3.2 inch タッチスクリーン (320x480) を搭載し、Android 1.0 と改造の加えられた Linux 2.6.25 と共にローンチされた。現在では、Android はこれまでに最も成功した Linux ディストリビューションとなっている。

BeagleBoard がローンチされた(当時のWebArchive)。BeagleBoard は費用対パフォーマンスで新しい標準を築いた $150 と低価格な開発ボードである。600 MHz で動作する ARM Cortex-A8 (正確には TI OMAP 3530)に、128 MiB RAM、256 MiB NAND フラッシュ、HDMI、 USB 2.0 ホストおよび OTG を搭載し、プロの開発者やホビイストの間で大変な人気となった。

OpenedHand は Intel に買収された。

2009年

Maemo 5が走る最初のハンドセット*11 N900 を Nokia が発売した。引き続いて N950 と N9 も発売されたが、この製品ラインナップを継続するプランはない。

2010年

Intel が OpenedHand の一事業として手に入れた Poky Linux を Yocto Project としてスピンオフさせ、所有権を The Linux Foundation に移管した。

カーネルと GCC の ARM ベース SoC のサポートを改善していくための非営利団体である Linaro が結成された。

Intel と Nokia が、各々の Linux (Moblin と Maemo) を1つのプロジェクトに統合し、名前を MeeGo とした。

2011年

2012年まで出荷はされなかったものの、Raspberry Pi がアナウンスされた。Raspberry Pi は多くの点で BeagleBoard に追随し、少しパフォーマンスを低くしただけにも関わらず $35 という遥かに低い価格に設定された。それにしても大変興味をそそられるのが、組み込みの業界以外からも注目を集め、加えてイギリスやその他の国でコンピューター教育のプラットフォームに採用されたことだ。

Tizen と呼ばれるプロジェクトが Limo、Moblin、Meego を内包することが発表された。Tizen は The Linux Foundation が運営しているが、主要なスポンサーは Intel と Samsung である。この記事で詳しい背景を読むことができる。

訳者感想

原文の記事が書かれたのは2012年 ― 実に6年前である。当時はまだ Tizen が熱を帯びていた頃だったが、今では 撤退を発表しているように状況は変化している。もっとも、この記事で一番注目してほしいのは1990年代初頭〜2000年代前半までの駆け上るような組み込み Linux の進化である。

uClinux が最初に動いた 3Com PalmPilot のような Palm PDA が一斉を風靡していた頃、私はまだ小学校にも上がっていなかった。子供向けのWebサイトが Mac OS のスクリーンショットとともに載った本を片手に、ISDN の回線で Macromedia Shockwave や Flash がふんだんに使われたサイトをよく閲覧していた。当時はまだ月刊 ASCII が刊行されており、末尾の付録には面白そうなフリーソフトが目白押しだった。そんな傍らで Palm アプリのゲームも紹介されており、意気揚々とファイルをコピーするも手元で動かせないとわかるなり肩を落としたものだった。

思い出話はいいとして、そうやって「我が家にやってきたコンピューター」と戯れている間に、世界ではこんなにもエキサイティングな開発が繰り広げられていたと知るのはもう何年も後になってからだった。

「もし、あと10年早く生まれていたら…。 もし、もっと早くに Linux を知っていたら…。」原文を読んでいくうちに否が応でも高まるテンションの中、私はこう思わざるを得なかった。

とはいえ、歴史の中で生まれた輝かしいソフトウェアたちは今日においても Linux の文化の中に息づいている。ルーターハック Advent Calendar でさんざん触れることになるであろう OpenWrt も、 Router Linux Project (LRP) を源流に、 Linksys WRT54G を含むたくさんのルーターで動く Linux のコードと Buildroot とが組み合わさったものである。

かつてのハッカーたちに敬意を表しつつ、これらを横断的に時系列としてまとめ上げた Chris Simmonds 氏には改めて感謝申し上げたい。

翻訳時の参考となったサイト

訳注

*1:IBM PCのこと。

*2:3com PalmPilot は古き良き Palm デバイスである。TRG SuperPilot Board は フラッシュメモリの拡張基板であり、ここに Palm OS やその他の OS を書き込むことができた。

*3:原文では OfficeServer というソフトを走らせたかのような表現だが、調べたところそういう名前の機種があったようだ。「翻訳時の参考となったサイト」を参照。

*4:legitimise の原意は "正当化" だが、前後のニュアンスから「市民権を得る」とした。

*5:Voluntary preemption はカーネルプリエンプションの一手法である。カーネルモードにいるプロセスは通常その処理を完了しカーネルモードから抜けるまで他のプロセスに処理を渡さないが、Voluntary preempt モードでは自ら(いわば、ボランティア的に)他のプロセスへ主導権を譲ることができる。

*6:ここの文章の意味するところは明確でない。なぜ "real-time projects" が "sand-box Linux" を試みるのか背景がよくわからない。 原文: Working with the mainline Linux community was in contrast to other contemporary real-time projects which attempted sand-box Linux.

*7:原文では "It is largely complimentary to the voluntary preempt patch ..." となっているが、察するに complimentary はスペルミスで complementary が正しいであろう。

*8:無理やり訳すならば「手に入れにくいニウム」。Weblio によれば架空の素材をそれっぽく呼ぶときに使う語のようだ。

*9:Wikipedia によると中国とのこと。

*10:欧米の事であろうと思われる。

*11:原文では "the first phone running Maemo Linux" とあるが、最初に Maemo が動作したのは 770 であるため Maemo 5 の間違いと思われる。