(2004.10.11ページを分離、新規作成。)
(2005.10.16更新、2006.6.15更新。)
PCで動くフリーのOSをいろいろ試してみる。PCで動く、ということで、多くの組み込みOSは対象から除く。試せないし。
(この節、2006.6.15更新。)
ちょっと探すだけでいろいろなOSがあって少し驚いた。しかし、習作というか作るのが目的であればいさ知らず、実用を目指す場合には、Linuxや*BSDとの違いをどう出すか。
(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そのものの出来栄えとは関係ないが、実用的であるためには、一定人数の開発者とユーザが必要だと思う。
特に、デバイスドライバを書けるような人間が必要。
PCに限らず、組み込みシステムからメインフレームまでカバーするUNIX OS。厳密には「Linux」は、カーネルだけ。
通常は、ライブラリ、管理ソフトなどを集めて、ディストリビューションという形で配布される。
ディストリビューションに収録されるソフトは、どれも似たり寄ったりで、WebブラウザFirefox、OfficeスイートOpenOffice.orgなどが含まれる。
ディストリビューション間で違いが出るのは、パッケージ管理の方法。
(2008.3.11) ディストリビューションについては、ページを分けました; Linuxディストリビューションあれこれ
いずれも、カリフォルニア大学バークレー校 (UCB) で開発された4.4BSD Lite をベースに開発されている。
大変移植性に優れたUNIX OS。非常に多くのプラットフォームをサポートしている。Hardware Supported by NetBSD
徹底してセキュリティにこだわったUNIX OS。
昔はx86に特化したBSDだったが、現在はx86 (i386), alpha, amd64 (EM64T), ia64, pc98, sparc64 に対応している。
数回インストールしようとしたことがあるが、成功したことがない。
(2008.3.10 追加。)
Sun Microsystems社のUNIX OS、Solarisをオープンソース化したもの。バイナリ版はSolaris Express。
(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はかなり小さい。読んでないが。
AtheOS (開発終了) から派生したOS。ライセンスはGPL, ホーム向け、GUI付き。POSIX互換を目指しているから、UNIX OS + GUIという組み合わせ。
libcにglibcを採用し、UNIX (POSIX) との互換性は高い。
GUIは独自。Xウィンドウでもないかな?
ブートローダはGRUB。
独自のWebブラウザを持つ。
glibc 2.4を採用。
以下は、Plan 9 - Wikipedia からの引用。
Unixの問題点とは、Unixでは一つのコンピュータを多くの利用者が共有することを前提に作られており、多くのコンピュータを多くの利用者が共有することは考えられていない。その結果、利用者が特定のコンピュータを占有することになり、それらのコンピュータはばらばらに管理運営されることになる。Unixの当初の環境では、どの端末からコンピュータを使っても同じ環境を再現できた。Plan 9では、それをネットワーク上につながった分散処理環境上で実現する。http://plan9.aichi-u.ac.jp/unix.html にUnix との違いについて述べられている。
Unixの開発がローカルなファイルシステムをどう表現するかということをテーマとして始まったのに対して、Plan 9は、ローカルであれリモートであれ、リソースというものにどうアクセスするかということを課題とする研究として始まった。
2005.6.11 スクリーンショット
(2005.10.16)
ユーザーモードOS。ホストOSの上で仮想的なOSとなる。位置づけとしてはJava VMに近い。ホストOSとしては、Windows, UNIX OS (Solaris, UnixWare, Linux, FreeBSD, HP-UX, Irix), MacOS X, Plan9が利用できる。
インストールCD-ROMイメージがダウンロードできる。ブータブルCDではない。
Windows XPにインストールしてみた。インストールは、CD-ROMをマウントして、install/setup.exe を実行する。インストール後の大きさは141Mバイト。
emuコマンド(<インストール先>/NT/386/binにある)にインストール先ディレクトリをオプションとして付けて実行する。
emu -rf:\inferno
シェルが起動する(プロンプトは';')。/dis/wm/wm でウィンドウが開く。
(2005.10.16)
(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を動かしている。
ひげぽん氏が中心となって開発している、C++で書かれたマイクロカーネルOS。標準のシェルは Scheme (Lisp) ベース。
(2007.10.24追加、2007.11.29更新。)
任天堂が研究用に開発しているOS。
スライドなどを見ると、
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 が起動します。エミュレータなので動きがモッサリしていますが、きちんと動いています。素晴らしい。
MS-DOS互換のフリーOS。
(2007.11.29 追加。)
BeOS風のデスクトップ向けOS。
(2008.3.10 追加。)
Windowsのバイナリ互換を目指すフリーOS。アプリケーションとドライバの両方の互換性を確保しようとしている。
ユーザランドのほうはWineをそのまま利用しているみたい。
(2005.10.15)
分散OS。ただし、開発は終了している。
ISOイメージがダウンロードできるが、CD-ROMからはブートできない。CD-ROMをマウントしてfloppiesディレクトリの各ファイルをFDに書き込んで、FDからブートする。
(2006.7.18)
AROSは、AmigaOS 3.1と互換(ソース互換?)のデスクトップOS。
ブータブルCDがダウンロードできる。
動かしてみると、非常に軽い。なかなかよい。
しかし、機能面では、どうしても古さを感じる。シリアルはあるが、ネットワーク機能がない。(探し方が足りないだけだろうか。)
(2008.3.11 追加。)
ほとんどすべてをJavaで作ったOS。カーネルの一部に若干、アセンブラが含まれるらしい。
サイトのスクリーンショットを見るとJavaプログラムがそのまま動くようだったので、試してみました。
JNode バージョン0.2.6 を QEMU 0.9.0 で動かしました。結果は、コンソールでは起動できるものの、GUIモードにはできませんでした。
Netsphere Laboratories http://www.nslabs.jp/
[PR]