雑種路線でいこう

ぼちぼち再開しようか

ゼロ年代のソフトウェアにみる垂直統合と最適化の構造要因

いわゆるデジタル家電ではコンポーネントがモジュール化されたことで垂直統合型ではなく水平分業型の産業構造が形成されたという議論がある。アナログ時代は微調整が必要で日本が得意な擦り合わせ型が活きたが、デジタル化するとその辺の職人芸が活きないのだと。しかし情報家電の普及したゼロ年代に実際に起こったことは、これまで自己責任で水平分業だったPCの要素技術を活かしつつも、もっと取っ付きやすく小廻りの効くよう換骨奪胎する新たな垂直統合の幕開けでもあった。
確かに90年代は割と垂直統合から水平分業化への10年だった。覇者IBMが大規模なリストラに踏み切り、名門DECがPC互換機ベンチャーコンパックに買収された。ISDNやらATMは破れてTCP/IPが覇権を握り、交換機メーカーは軒並み衰退してCISCOが台頭し、パソコン通信はWebに取って代わられた。Appleを除くとPCのOSはWindowsに染まった。普及と大量生産と利活用の好循環で部品の単価は下がってPCは爆発的に普及した。90年代初頭はPC-98が顕在でNEC富士通も自社アーキテクチャのパソコンのために自前で独自のASICを起こしていたが、90年代後半から急激に台湾メーカーへのOEMに切り替え、一時は3倍近くあったパソコンの内外価格差が解消した。
ところがゼロ年代に入って新たな垂直統合が生まれてくる。i-modeが端緒となったモバイル・インターネット、Appleの復活とiPodiPhoneの躍進、GoogleAmazonが牽引したクラウドコンピューティング、これらは90年代の水平分業化でコモディティ化した部品を活用しつつ、ソフトウェア・コンポーネントを上から下までフルスタックで再実装することで、別次元のスケーラビリティとユーザー体験を実現した。この背景に何の構造変化があったのだろうか。
ひとつにムーアの法則に倣ったハードウェアの性能向上とソフトウェアの大規模化がある。半導体の集積度が上がったことでチップ単体に収まる論理回路の複雑さが人間組織の設計能力を上回ってしまい、ノード単位でみればパソコンとスパコンの区別がなくなった。一方でリーク電流や消費電力の問題からクロック周波数は頭打ちとなり、半導体の規模が向上してもソフトの実行速度は必ずしも上がらなくなった。端末はバッテリーで駆動される機器が増え、ソフトは実効性能だけでなく対象費電力性能も求められるようになった。
ソフトウェアの大規模化には80年代から多くの企業が手こずっている。オブジェクト指向コンポーネント・モデル、並列処理など様々な手法が提案されたが簡単には普及しなかった。わたしが月刊ASCIIを読み始めた1990年前後、世の中はDOSからWindows、そしてOS/2UNIXへと進歩するとまことしやかに語られていた。WindowsOS/2への中継ぎに過ぎず、Intel x86やM680x0といったCISCRISCVLIWへの中継ぎに過ぎないと考えられていた。Appleを追われたJobsがNeXTを創設して素晴らしい開発環境を提供したがワークステーションとしては価格の割に遅すぎた。AppleはSystem 7に続く次世代OSを開発していたが、なかなかモノにならなかった。工学的に正しい姿を追求しようにもメモリ価格が高すぎたのだ。
ところが1990年代末から風景が一変する。メモリ価格は原価低減のペースを超えて急激に下がり、MPUの性能も劇的に向上してソフトウェアの大規模化を許容した。処理の性能と容量が向上したことで従来アナログや論理回路に処理せざるを得なかった音声や映像の処理がデジタル化・ソフトウェア化された。
ソフトウェアの大規模化によって従来の組込ソフトウェアにみられる家内制手工業的な手法が行き詰まった。製品からメカトロやエレキの割合が減ってソフトの割合が高まった。ところが急激に人材とスキルの構成を入れ替えることは難しく、汎用ソフトウェア・コンポーネントの調達と開発の外注で補った。
2003年頃からMPUの周波数が頭打ちとなった。これまで集積度の向上に任せてパイプラインの段数を深くしていったMPUが、リーク電流による電力消費の伸びが予想以上でクロックを理論限界と比べて低いところに抑えざるを得なくなった。結果として大規模化したソフトウェアを実行速度・消費電力の両面から効率的に動かす必要に迫られた。ソフトウェアの大規模化は起動時間の延長を招き、待機状態の活用による再起動の抑止が図られた。
ブロードバンドの普及による家庭へのネット常時接続の普及も端末ソフトウェアの構成に影響を与えた。ダイヤルアップ接続では限られていたウイルス・ワームへの感染リスクが飛躍的に高まり、ソフトウェアに求められるセキュリティ対策や信頼性の水準が飛躍的に高まった。待機状態の活用で平均連続稼動時間が長くなり、メモリリークによる不具合が顕在化するケースが増えた。こういった構造変化の中で、大規模かつ信頼性が高く効率的なソフトウェアが強く求められるようになった。
ソフトウェアは安全かつ効率的に実行されるよう厳しくテストされ、動作や消費電力に対してチューニングされなければならない。機能をプログラミング言語で記述すること自体よりも、様々な環境下で適切に動作するかテストし、効率的に実行されるよう最適化する「擦り合わせ」に要する工数の割合が高まった。こうした動きに対して90年代からゼロ年代にかけて米国企業はこれまで外注に出していた部分を内製に切り替え*1、ソフトウェアのラインナップを集約し、ライフサイクル管理を徹底することで乗り切った。
90年代にかけて規模の経済を通じて参入障壁と競争優位性として機能したハードウェアやソフトウェアのエコシステムが、ゼロ年代には新たな競争環境で配慮すべきコンフィギュレーションの多様性や後方互換性として新技術導入の足枷となった。そして過去の資産を切り捨てやすいAppleGoogleが新技術を積極的に導入して競争力を高めた。動作環境を絞り込める垂直統合モデルの方が、ソフトウェア規模に対して幾何級数的に増えた試験や最適化の工数を押さえ込みやすかったのではないか。
アップルが90年代全般、マイクロソフトが90年代末からゼロ年代にかけて大幅に開発工程や製品戦略を見直すことでソフトウェア大規模化に対処したのと同時期、日本の携帯電話や情報家電の組込ソフトウェアも同様の課題に見舞われた。これまでTRON規格に準じた独自OSだったi-modeケータイはSymbianLinuxに、テレビやHDレコーダのOSはLinuxに、カーナビはWindows CELinuxに切り替わった。
ところがソフトウェア複雑化に対する適応は汎用品の導入と共通化の推進に留まり、製品リリースやラインナップ、エンジニアリングに踏み込めなかったのではないか。企業グループによって部分的にはプラットフォーム共通化に成功したものの、ハード・ソフト・製品戦略にまたがった擦り合わせは限定的な段階に留まっている。
例えばハードウェアの提供を1年1機種に絞り込み、それぞれに対して同様に最新版のOSを提供するAppleに対して、各社の携帯電話もHDレコーダも半年単位で数機種がリリースされ、ソフトウェアの分岐もバラバラに管理されているように見受けられる。同じ日本でも家庭用ゲーム機のファームウェアではiPhone同様のプラットフォーム固定化・新旧ハードウェアに対する共通のファームウェア更新が実践されており、必ずしもメーカー自身がソフトウェアの分岐に対して無頓着という訳ではなさそうだ。
(つづく)

*1:同時にテスティングなど労働集約型の工程を外部に切り出したり、インターフェースが割と固定しているコンポーネントの開発・最適化・メンテナンスをオフショア化する等のコスト削減策も並行して行われた