フリー (自由) OS

(2004.10.11ページを分離、新規作成。)

(2005.10.16更新、2006.6.15更新。)

PCで動くフリーのOSをいろいろ試してみる。PCで動く、ということで、多くの組み込みOSは対象から除く。試せないし。

OS開発の方向性

(この節、2006.6.15更新。)

ちょっと探すだけでいろいろなOSがあって少し驚いた。しかし、習作というか作るのが目的であればいさ知らず、実用を目指す場合には、Linuxや*BSDとの違いをどう出すか。

どのようなAPIを実装するか

(2007.11.28更新。)

アプリケーションとの関係では、どのようなAPIを実装するか、が大きいと思います。POSIX (Single UNIX Specification)、既存の特定のOSとの互換、あるいは独自か。

フリーのUNIXは、Linux, *BSDがすでに成熟していて、この方面は、もっぱらOS内部での違いを出す方向になると思います。

既存OSのクローンは、既存のアプリケーションを動かしたいという動機です。

CPUやハードウェアのアーキテクチャが違う場合はソフトウェアでエミュレーションするしかありません。例えばMSX、あるいはX68000など。また、ソース互換にしてもあまりうれしくありません。そのOS用のアプリケーションを動かすだけなら、例えばWindowsアプリケーションを動かすWineなど、エミュレータで足りることも多い。

この路線は、OS/2やBeOSなど、元々PCで動いていたOSとの互換を目指す、ブートできるようにしたい、エミュレートすると現実的な速度が出ない、などの場合に選択肢として出てくると思います。

独自APIの定義はハードルが高いです。アプリケーションに対しては、結局、既存のいろいろなプログラムを動かそうと思うと、UNIXっぽいAPIになってしまう。もちろん、UNIX「っぽい」APIという道は十分あります。UNIX Specificationは非常に大きいですし、シグナルなどアプリケーションでの取扱いが難しい機能も含まれます。

カーネルから少し離れますが、GUIライブラリまで独自に実装するかどうか。おおいに大変そうですが。XだとLinuxと代わり映えしません。

マイクロカーネル

内部構造に目を移すと、まずはマイクロカーネルかモノリシック (monolithic) か、がポイントになるだろうか。どのぐらいカーネルが小さければマイクロと呼ぶか明確な定義は分からないが、純粋なマイクロカーネルは、プロセス・スレッド管理、メモリ管理、IPC (プロセス間通信) ぐらいしか含まない。デバイスドライバもユーザ空間で動かす。

ただし、OSを使う側からしたらどうでもいい部分でもある。例えばファイルシステムのモジュールをカーネルから追い出したとしても、このモジュールがこけたら普通はシステム全体がクラッシュするから、カーネルの中か外かは重要ではない。

雑多なデバイスドライバはユーザランドに追い出す意味がある。「すべての」デバイスドライバの信頼性を確実に高くするのは難しいので、ドライバがクラッシュしてもシステム全体が巻き込まれないようにするのはいいアイディアだと思う。

MINIX 3 では、デバイスドライバは独立したユーザーモード・プロセスとして動いていて、ドライバがクラッシュしても、自動的にそのプロセスだけ再起動される。

分散環境

(2007.11.28 この節追加。)

ネットに接続されていないコンピュータはただの箱、は言い過ぎかもしれませんが、PCの資源(CPU、ハードディスク)はネットワークを介してもっと有効に活用されてもいいように思います。

ユーザの使い勝手から言えば、どの端末でログインしても同じ環境で使いたい。nfsによるディスク共有、ajaxでWebサーバに環境構築、など実際に行われていますが、クライアントPCの資源が無駄になります。

クライアントのCPU、ハードディスクの一定量をネットワークに供出して、ユーザからは多数の(または単一の)CPU、ディスクとして見えると素晴らしい。もちろん、セキュリティの考慮が必要です。

分散ファイルシステムがいくつか提案・実装されています。Linuxにも取り込まれたPlan 9 の9pファイルシステムなど。

OLE (COM) など複合ドキュメントの仕組み。ファイルシステムでは、TRONの実身・仮身の形になるでしょうか。

その他

L4Linuxのように、Linux用アプリケーションとリアルタイムOS用アプリケーションを並列に動かす、という方向は興味深い。ITRON + Java とかもありますな。

GUI をとにかく頑張る、という方角はどうだろう。Looking Glass (lg3d), Xgl などが出てきたが、ユーザーインターフェイスはいまだ2Dの延長にある。ただ、これはOSでやる話ではない気もする。

どれだけ開発者がいるか

OSそのものの出来栄えとは関係ないが、実用的であるためには、一定人数の開発者とユーザが必要だと思う。

特に、デバイスドライバを書けるような人間が必要。

いろいろなOS

@ Linux

PCに限らず、組み込みシステムからメインフレームまでカバーするUNIX OS。厳密には「Linux」は、カーネルだけ。

通常は、ライブラリ、管理ソフトなどを集めて、ディストリビューションという形で配布される。

ディストリビューションに収録されるソフトは、どれも似たり寄ったりで、WebブラウザFirefox、OfficeスイートOpenOffice.orgなどが含まれる。

ディストリビューション間で違いが出るのは、パッケージ管理の方法。

(2008.3.11) ディストリビューションについては、ページを分けました; Linuxディストリビューションあれこれ

@ BSD系

いずれも、カリフォルニア大学バークレー校 (UCB) で開発された4.4BSD Lite をベースに開発されている。

NetBSD

配布サイト:
The NetBSD Project
ライセンス:
修正BSDライセンス

大変移植性に優れたUNIX OS。非常に多くのプラットフォームをサポートしている。Platforms Supported by NetBSD

OpenBSD

配布サイト:
OpenBSD
ライセンス:
修正BSDライセンス

徹底してセキュリティにこだわったUNIX OS。

FreeBSD

昔はx86に特化したBSDだったが、現在はx86 (i386), alpha, amd64 (EM64T), ia64, pc98, sparc64 に対応している。

配布サイト:
The FreeBSD Project
ライセンス:
修正BSDライセンス

数回インストールしようとしたことがあるが、成功したことがない。

@ OpenSolaris

(2008.3.10 追加。)

Sun Microsystems社のUNIX OS、Solarisをオープンソース化したもの。バイナリ版はSolaris Express。

(2011.8) Sun MicrosystemsはOracleに買収され,SolarisもOracleのプロダクトになりました。その後、OracleはOpenSolarisのソース公開を終了しました。

コミュニティベースの活動は、illumos.orgOpenIndiana に引き継がれています。illumosがカーネル、OpenIndianaがデスクトップ環境などを加えたLinuxでいうところのディストリビューションです。

@ MINIX 3

(2006.7.15 この節追加。)

もともと学習用OSとしてMinixがあったが、実用になるようにバージョンアップしたもの。マイクロカーネルOS、UNIX (POSIX compliant)。ファイルシステムなどはサーバとして動作する。上述したが、デバイスドライバ、サーバがクラッシュしても、自動的にそのプロセスだけ再起動される。

ブータブルCDがダウンロードできる。現在の最新のバージョンは3.1.2。

起動し、rootでログインして、ps ax してみると、次のプロセスが動いている。

idle
clock
system
kernel
pm -- Process Manager
fs -- File System
rs -- Reincarnation (再生?) Server
mem
log
tty
ds -- Data Store Server
init
/bin/pci
/bin/floppy
/bin/at_wini
/sbin/is -- Information Server
/sbin/cmos
/usr/sbin/random
/usr/sbin/printer
update
syslogd
/sbin/rescue 

kernelまでがカーネルモードだろうと思う。pmやfsなどはユーザランドで動いているのだろう。/usr/src/以下にソースがあるが、kernelはかなり小さい。読んでないが。

@ Syllable

Syllable - News

AtheOS (開発終了) から派生したOS。ライセンスはGPL, ホーム向け、GUI付き。POSIX互換を目指しているから、UNIX OS + GUIという組み合わせ。

libcにglibcを採用し、UNIX (POSIX) との互換性は高い。

GUIは独自。Xウィンドウでもないかな?

ブートローダはGRUB。

独自のWebブラウザを持つ。

glibc 2.4を採用。

@ Plan 9

配布サイト:
Plan 9 from Bell Labs
ライセンス:
Lucent Public License (OSI certified)

以下は、Plan 9 - Wikipedia からの引用。

Unixの問題点とは、Unixでは一つのコンピュータを多くの利用者が共有することを前提に作られており、多くのコンピュータを多くの利用者が共有することは考えられていない。その結果、利用者が特定のコンピュータを占有することになり、それらのコンピュータはばらばらに管理運営されることになる。

Unixの当初の環境では、どの端末からコンピュータを使っても同じ環境を再現できた。Plan 9では、それをネットワーク上につながった分散処理環境上で実現する。http://plan9.aichi-u.ac.jp/unix.html にUnix との違いについて述べられている。

Unixの開発がローカルなファイルシステムをどう表現するかということをテーマとして始まったのに対して、Plan 9は、ローカルであれリモートであれ、リソースというものにどうアクセスするかということを課題とする研究として始まった。

(2005.6.11) スクリーンショット

(2011.8) ベル研究所での開発が続行できなくなったため、プロジェクトをforkした plan9front - the front fell off - Google Project Hosting が始まっています。

@ Inferno

(2005.10.16)

ユーザーモードOS。ホストOSの上で仮想的なOSとなる。位置づけとしてはJava VMに近い。ホストOSとしては、Windows, UNIX OS (Solaris, UnixWare, Linux, FreeBSD, HP-UX, Irix), MacOS X, Plan9が利用できる。

配布サイト:
Inferno
ライセンス:
Lucent Public License (OSI certified), 商用ライセンスのデュアルライセンス

インストールCD-ROMイメージがダウンロードできる。ブータブルCDではない。

Windows XPにインストールしてみた。インストールは、CD-ROMをマウントして、install/setup.exe を実行する。インストール後の大きさは141Mバイト。

emuコマンド(<インストール先>/NT/386/binにある)にインストール先ディレクトリをオプションとして付けて実行する。

emu -rf:\inferno

シェルが起動する(プロンプトは';')。/dis/wm/wm でウィンドウが開く。

(2005.10.16)

@ L4

(2005.6.11 この節を追加。)

L4は非常に小さなマイクロカーネル。システムコールは次のものしかない。APIとしては、これらを利用したサポート関数がいろいろ加わるが、それでも非常に少ない。

L4 eXperimental Kernel Version X.2 Revision 6 (June 8, 2005)

#include <l4/kip.h>
void * KernelInterface (Word& ApiVersion, ApiFlags, KernelId)
#include <l4/thread.h>
ThreadId ExchangeRegisters (
    ThreadId dest, 
    Word control, sp, ip, flags, UserDefinedHandle, 
    ThreadId pager,
    Word& old_control, old_sp, old_ip, old_flags, old_UserDefinedHandle, 
    ThreadId& old_pager)
Word ThreadControl (ThreadId dest, SpaceSpecifier, Scheduler, Pager, 
    void* UtcbLocation)
#include <l4/schedule.h>
Clock SystemClock ()
void ThreadSwitch (ThreadId dest)
Word Schedule (ThreadId dest, 
    Word TimeControl, ProcessorControl, prio, PreemptionControl, 
    Word& old_TimeControl)
#include <l4/ipc.h>
MsgTag Ipc (ThreadId to, FromSpecifier, Word Timeouts, ThreadId& from)
MsgTag Lipc (ThreadId to, FromSpecifier, Word Timeouts, ThreadId& from)
#include <l4/space.h>
void Unmap (Word control)
Word SpaceControl (ThreadId SpaceSpecifier,
    Word control, 
    Fpage KernelInterfacePageArea, UtcbArea, 
    ThreadId Redirector, 
    Word& old_Control)
#include <l4/misc.h>
Word ProcessorControl (Word ProcessorNo, InternalFrequency, ExternalFrequency, voltage)
Word MemoryControl (Word control, Word& attributes[4])

L4カーネルだけだとあまりに小さいので、その上でファイルシステムサーバなど各種サーバ群を動かす。例えば、L4Linuxは、L4カーネル上でL4Envサーバを動かし、さらにその上にユーザモードLinuxを動かしている。

配布サイト:
L4Linux
ライセンス:
L4は?、L4Env はGPLv2

(クリックすると拡大します)

@ Mona OS

ひげぽん氏が中心となって開発している、C++で書かれたマイクロカーネルOS。標準のシェルは Scheme (Lisp) ベース。

配布サイト:
MonaOS - Free Operating System
ライセンス
MIT/X ライセンス

@ es オペレーティングシステム

(2007.10.24追加、2007.11.29更新。)

任天堂が研究用に開発しているOS。

スライドなどを見ると、

  • マイクロカーネル
  • プロセス間呼び出しは、IDLを定義し、オブジェクトのメソッドに対するRPCで行う。(単なる関数呼び出しではない。)
  • カーネルのAPIもIDLで定義する。
という感じ。

Squeak が es 上で動く。

es-demo 0.1.0 を qemuで動かしてみました。アーカイブをダウンロード、展開して、

$ qemu -hda hdd.img -serial stdio -soundhw sb16

起動中のメッセージを見ると、PCIバス、PS2マウス、Sound Blasterなどを認識しています。ファイルシステムはFAT32のようです。バイナリの形式はELFか。シェルで入力待ちになります。

squeak とタイプすると、Squeak 3.7 が起動します。エミュレータなので動きがモッサリしていますが、きちんと動いています。素晴らしい。

(クリックすると拡大します。)

@ FreeDOS

配布サイト:
FreeDOS | The FreeDOS Project
ライセンス:
GPL

MS-DOS互換のフリーOS。

@ Haiku

(2007.11.29 追加。)

BeOS風のデスクトップ向けOS。

@ ReactOS

(2008.3.10 追加。)

Windowsのバイナリ互換を目指すフリーOS。アプリケーションとドライバの両方の互換性を確保しようとしている。

ユーザランドのほうはWineをそのまま利用しているみたい。

@ Amoeba

(2005.10.15)

配布サイト:
Distributed Operating System Amoeba - Fireball Software Distribution
ライセンス:
BSD

分散OS。ただし、開発は終了している。

ISOイメージがダウンロードできるが、CD-ROMからはブートできない。CD-ROMをマウントしてfloppiesディレクトリの各ファイルをFDに書き込んで、FDからブートする。

@ AROS

(2006.7.18)

AROSは、AmigaOS 3.1と互換(ソース互換?)のデスクトップOS。

ブータブルCDがダウンロードできる。

(クリックすると拡大します。)

動かしてみると、非常に軽い。なかなかよい。

しかし、機能面では、どうしても古さを感じる。シリアルはあるが、ネットワーク機能がない。(探し方が足りないだけだろうか。)

@ JNode

(2008.3.11 追加。)

ほとんどすべてをJavaで作ったOS。カーネルの一部に若干、アセンブラが含まれるらしい。

サイトのスクリーンショットを見るとJavaプログラムがそのまま動くようだったので、試してみました。

JNode バージョン0.2.6 を QEMU 0.9.0 で動かしました。結果は、コンソールでは起動できるものの、GUIモードにはできませんでした。

外部リンク

Nishi Tokyo Diary(2004-09-03)
Linuxディストリビューションの欠点比較。Debian、Fedora、Gentooのダメな点を列挙。結構、当を得てる。
Benchmarking BSD and Linux
Linuxカーネル2.4, 2.6, OpenBSD 3.4, FreeBSD 5.1, NetBSD 1.6.1のスケーラビリティ・性能調査。2003年10月現在。