SkyOS

**SkyOS**（スカイオーエス）は、Robert Szeleneyらによって1996年から開発された（が、後に開発中断となった）、x86コンピュータ・アーキテクチャ向けの、グラフィカルなデスクトップ環境の、有償でプロプライエタリなオペレーティングシステム。2009年1月30日以降、開発は中断している。

## 歴史
SkyOSは Robert Szeleney とボランティアの仲間により10年以上にわたって研究・開発されてきた。

Szeleneyと数人の友人は大学生時代に "Sky Operating System" と名付けた実験的OSの開発を開始した。その後、友人たちは徐々にプロジェクトから距離を置くようになったが、Szeleney は空いた時間にこのOSの開発を続けた。

Szeleney はプロのプログラマであり、OS設計に関する知識もすでに十分身につけた。しかし SkyOS を勉強用に開発し続け、オープンソースライセンスで4つのバージョンをリリースした。

2004年、それなりに人気を勝ち得たころ、SzeleneyはSkyOSのソース公開を止め、5番目のバージョンの開発にとりかかった。同年初め、Szeleneyは有償でベータ版をリリースし、それによって開発資金を得ようとしたが、実際購入した人はごく少数だった。そのころ、GUIの見た目を決定するため、コミュニティによるコンテストが実施され、大きな注目を集めた。実際多大な注目が集まり、SkyOSコミュニティはその年末には3倍に人口が膨れ上がった。ベータ版のテスターは数百人に増え、Szeleneyによる月2回のリリースをダウンロードするようになった。

その間、SkyOSには多数の変更が加えられた。ソースレベルでも大きく変わったため、5番目のバージョンという呼称 (SkyOS 5.0) をやめ、単に "SkyOS" と呼ぶようになった。プロジェクト全体によりプロフェッショナルな方向に向かい、Szeleneyは "Djinnworks" という名で起業することまで考えた。しかし、2004年をピークとしてSkyOSのコミュニティは縮小していった。

2009年1月30日、SkyOSの開発は中断している。開発者は今後どの方向に向かうのが適切かを思案中である。すなわち、
* オープンソース化する。
* フリーウェア化する。
* まだ定義されていないニッチ市場に特化する。
* 開発をやめる。
のいずれかである。

デバイスドライバがサポートする周辺機器が少ないという問題があり、NetBSDやLinuxを利用するという実験も試みられている。

## テクノロジー
### カーネル
SkyOSのカーネルは独自のモジュール化されたプリエンプティブ・マルチタスクカーネルであり、プロセスとスレッドの分離、メモリ管理、ページング、カーネルデバッグ機能、低レベルロックプリミティブ、リアルタイムPIC/APICタイマなどを備える。モノリシックカーネルだが、デバイスドライバは拡張APIを使って動的にカーネル空間にロードできる。

SkyOSカーネル独自の特徴は次の通りである。
* カーネルモードでVESAをサポートしており、電源を入れると即座にグラフィカルなディスプレイが利用可能である。
* アーキテクチャ仮想化層があり、他のアーキテクチャに容易に移植可能である。
* 最新CPUをサポート。マルチコア、SMP、ハイパースレッディングなどx86の主な拡張をサポート。
* ATAPI、ATA/SATAサポート（SATAは一部の主要チップセットのみサポート）。
* 各種バス規格サポート（USBなど）

一般にLinuxやBSD系OSのカーネルから派生したものだという誤解があるが、Szeleneyが一から何年もかけて書いたもので、自前でないコードは存在しない。

### SkyGI
SkyGIとはSkyOSのAPIである。QtやSwingといったGUIツールキットのコンセプトに近い。SkyGIの基本原則は "view" である。それぞれのGUIオブジェクトは基本の "view" オブジェクトから派生している。したがって似たような属性は似たような振る舞いをする。

SkyOSは国際化と地域化も組み込みでサポートしており、サードパーティの開発者が容易に多言語対応のアプリケーションを開発できる。アクセシビリティにも考慮し、最新のキーボード・ナビゲーションをサポートしている。

ネイティブのコントロール群には 'theme' ファイルを置くことでテーマを与えることができ、Windows XP のMSSTYLESに近い。

#### コンポーネント
SkyOSのGUIは一般的なGUIのデスクトップメタファーとほとんど変わらない。しかし他のGUIとは異なるSkyOS独自のコンポーネントもある。

**Panel**は機能的にはWindowsのタスクバー、またはmacOSのdockに相当する。プログラムの起動、アプリケーションのウィンドウ間の切り替えなどを担当し、各種情報も表示する。プラグインを追加することで機能を追加できる。例えば既存のプラグインとして、クエリ方式の高速アプリケーション起動、昼夜インジケータを気象情報を示すよう拡張したものなどがある。

**Notifier**はユーザーに注意を促すための要素であり、アプリケーションのクラッシュを知らせたり、ハードウェアの追加/除去を知らせたりする。アプリケーションでもこれを使うことができる。

**Viewer**はSkyOSのファイルブラウザである。複数の表示方式をサポートし、サムネイル表示やメタデータに基づく情報を表示でき、ファイルの検索機能も豊富である。

### SkyFS
**SkyFS**はOpenBFS（BeOSのファイルシステムのオープン版）からフォークしたファイルシステムである。次のような特徴がある。
* 64ビットのデータ構造
* ジャーナリング
* メタデータサポート。ACLもそれによりサポート。
* メタデータ検索機能
* POSIX式のファイルパーミッション

フォークして以降、大きな修正は行われていない。マジックIDはSkyFSとBFSのパーティションを区別するため変更してある。また、各パーティションの先頭部分にブートローダー用の領域が必ず確保される。これら以外はOpenBFSと同じである。

SkyOSは、FAT32/16/12やISO9660のファイルシステムからも起動可能である。

#### 高速ファイル検索
SkyOSはSQLベースのインデックス付与機構を持ち、WinFSやSpotlightのようなメタデータおよび全文の高速検索が可能である。

仮想フォルダの概念があり、それを検索機能と組み合わせると検索用クエリをセーブしておいて、後で実行するといった使い方が可能である。クエリとは例えば次のような書式である（全ての .txt ファイルのうち、今日更新されたもの）。

`name = *.txt && last_modified >= %today%`

検索するために上のような書式を覚える必要はなく、GUIを使ってクエリを作ることができるし、キーボードを使った検索もデフォルトでサポートしている。

## 開発
いくつかのAPIと同時にPOSIX互換APIもサポートしているが、SkyOSはベータ版で頻繁にAPI周りにバイナリ非互換が発生するため、アプリケーションの開発とリリースは今のところ難しい。SkyOS向けにアプリケーションをリリースしたければ、SkyOSのリリースごとのAPIの変化に追随する必要がある。APIをいつ固定するかについてSzeleneyは計画を明らかにしていない。

SkyOSの実行ファイルはELF形式で、GNUコンパイラコレクションを使ってコンパイルできる。一般にクロスコンパイル方式でSkyOS用の実行ファイルを作成する。しかし、GCC自体もSkyOSに移植済みでよく保守されているので、SkyOS上でアプリケーションを開発することも不可能ではない。

公式のチャンネルからアプリケーションを配布したければ、SkyOS公式サイトにある **Software Store** を利用すればよい。

SkyOS自体の改良は突然行われる。スケジュールは大まかにしか文書化されていない。この点はコミュニティでも懸案となっているが、そのために民主的なプロジェクトよりも開発ペースが早いことは事実である。

### ネイティブAPI
SkyOSのネイティブAPIは公式にはC++のみをプログラミング言語としている。PerlとPythonは移植されているが、それらのVMからネイティブAPIを使うバインディングは用意されていない。CUIベースの.NETアプリケーションはMono経由で動作可能だが、やはりネイティブAPIへのバインディングは存在しない。Windows Forms を使っている場合はそもそも動作不可能である。

**Desktop Communication Service** はオブジェクト指向のプロセス間通信フレームワークであり、SkyOSで広く使われている。コマンドまたはAPIを使ってSkyOSのカーネルプロセスやユーザプロセスと通信できる。

このメッセージング・モデルでは、識別子文字列で表される「インタフェース」に人間が読める形のメッセージを送る。

例えば、次のようなメッセージを "Notify.Media.Player.Control" に送ると、SkyOSのメディアプレーヤーが次の曲を再生する。

MessageType STRING "Next Song"


SkyOSは、周辺機器の接続、ソフトウェアのインストール成功、バッテリー充電レベルの変化、新たな気象情報といった数百種類のイベントに対応したメッセージを発信する。各アプリケーションやドライバは適切なインタフェースを購読することで、メッセージを受け取ることができる。

**Integrated Streaming System** (ISS) はLinuxにおけるサウンドサーバの考え方に似たメディア相互作用のためのC++用API群である。このAPIではメディア再生をコーデックから完全に独立させて抽象化している。

デフォルト動作でよければ、基本機能は10行未満のコーディングで実現できる。

### アプリケーションの移植
GNUツールチェーンでコンパイルされるよう書かれたCUIアプリケーションはほとんど修正なしでSkyOSに移植できる。Apache、GCC、Samba、CUPS、Bash といった主なアプリケーションがツールチェーンを使って移植された。

以下のアプリケーションはネイティブAPIを使って移植され、SkyOSと共に保守されている。
* Mozilla Firefox
* Mozilla Thunderbird
* Blender
* Pixel
* Nvu
* SDL

GTK+とGTK+ベースのアプリケーションも移植されていたが、最近のAPI変更で使えなくなっている。

## 状況
### サードパーティによるサポート
それほど有名なOSではないため、サードパーティの開発者はほとんどいない。そのため、サポートできるハードウェアが限られており、全てはSzeleneyが開発にかけられる時間と資金にかかっている。

また、同じ理由でSkyOS上のアプリケーションの品揃えも限られている。ウェブブラウザや電子メールクライアントはサポートしているが、オフィススイートやゲームなどは揃っていない。

### セキュリティと安定性
APIには各種パーミッションの設定があるが、実際にはパーミッションを設定してもシステムはそれに従わずに動作している。開発中のOSであるため、意図的にこのようになっているという。

SkyOSの通信プロトコル部分は独自設計であり、実際の環境で大々的に評価されたことがない。今のところ、SkyOSの動作しているマシンへの侵入が試みられたという話はない。

「パスワード付きフォルダ」という機能があり、ファイルシステムレベルで実装されているため、アプリケーションから通常のAPIでファイルにアクセスする場合、必ずユーザーがパスワードを入力する必要がある。しかし、パスワード付きもパスワードなしも、ファイルは全て同じ形でディスクに格納されているため、その構造を知っていれば通常のAPIを使わずにファイルにアクセスすることは可能である。

SkyOSの安定性は徐々に改善してきているが、実際はユーザーによって異なる。ハードウェア構成が正しければほとんどシステムクラッシュは起きないが、サポートしていないハードウェアの場合は頻繁にクラッシュし、ブートすらできないこともある。包括的なハードウェアサポート状況の一覧は、システムが頻繁に修正されるため存在していない。

### 自由ソフトウェアとの関係
かつてオープンソースだったことから、SkyOSは自由ソフトウェアに関する多くの議論を巻き起こした。

しばしば、SkyOSはGPLに違反していると非難されてきた。すなわち、OS開発は非常に複雑な作業であり、Szeleneyはこれまでの間に自由ソフトウェアからコードを盗用しているに違いないという主張である。実際にはSzeleneyはオープンソース開発者側に貢献している。ライセンス上要求されていない場合でも、SzeleneyはSkyOS用にオープンソースに修正を加えたとき、それを全て公開している。

一部のベータテスタはSzeleneyがSkyOSの開発を完全にやめてしまった場合、彼らの投資が失われることを懸念しており、それと関連してSkyOSをオープンソース化すべきだという主張がなされることがある。実際、Szeleneyは開発を中断した際に開発をやめてしまう可能性に言及している。

## 脚注・出典

## 外部リンク
* SkyOS.org — 公式サイト
* SkyOS Developers Interview TechIMO
* Walking Through SkyOS 5.0 Beta Slashdot
* Thunderbird and Firefox Ported to SkyOS Slashdot
* SkyOS, The 7th Beta and Robert Szeleney OSNews.com