わたしの名はフレイ 作家・デザイナー見習い
神々とともに生きる詩人 一等星シリウスの導きを信じて

OSとは

オペレーターとオペレーティングシステム

OSが開発される以前の昔のバッチ処理のコンピュータでは、オペレータと呼ばれる専門の技師が紙カードやテープなどに書かれたプログラムを適切に読み取り、コンピュータを適切に操作して実行・管理していた。

だが、コンピュータ技術が向上し、リソースにも余裕がでてくると、こうしたオペレータの役割をソフトウェアにさせることで自動化させることができるようになった。これをオペレーティングシステム(OS)と言う。

また、ビジネス的な観点から考えると、それぞれの処理専用のコンピュータを作らなくても、汎用的なコンピュータを作ってその上でOSを乗せることで、さまざまなプログラムをOSの上で実行することができるようになった。これにより、コスト削減と利益の向上に繋がった。

カーネル

カーネルはOSの中の中核機能であり、アプリケーションとハードウェアとの間に介入することで、プロセス管理、メモリ管理、ファイルシステム、ネットワークなどの機能を提供する。

モノリシックカーネルでは、単一のプログラムがカーネルの機能を提供するが、マイクロカーネルでは、カーネルの機能を複数のサーバーに分けて、カーネルは最低限の機能だけを提供するマイクロカーネルとし、カーネルやサーバと通信することでアプリケーションにさまざまな機能を提供する。

現在のUNIX系OSでは、カーネルモノリシックカーネルをベースとしてモジュールローディング機能を加えたものが一般的である。

後日注記:Linuxカーネルをモノリシックであることを理由に「時代遅れだ」と批判する人も居るが、これは当たらない。歴史上の多くのUNIXカーネルはモノリシックであり、Linuxも同様にモノリシックである。確かに、OSの研究では多くがマイクロカーネルに研究が移っているが、それでも現実的な処理速度や安定性を考えて、モノリシックカーネルは一般的な悪くない設計である。

ハードウェアの差異の吸収

WindowsIntel互換のCPUを用いたシステムであれば、東芝DynabookでもSONYVAIOでも動くように、ソフトウェアとハードウェアの間に入って、ハードウェアの差異を吸収し、OSレベルでハードウェアを抽象化し、ソフトウェアに対して共通のインターフェースを提供することで、同じプログラムをさまざまなハードウェアで動かすことができる。

これはIntelPC/AT互換機でしか動かないWindowsでは、あまり恩恵を受けられないかもしれない。だが、Linuxや*BSDのようにカーネルやlibc/コンパイラなどのレベルでさまざまなアーキテクチャに対応している移植性の高いUNIXでは、C言語で書かれた同じプログラムが、再コンパイルすることで、x86_64のアーキテクチャでも、PowerPCやARMのアーキテクチャでも、同じプログラムを動作させることができる。

また、カーネルC言語のレベルでは、ハードウェアに近いそれぞれのアーキテクチャ機械語のバイナリが動作するため、別のアーキテクチャで動作させるには再コンパイルが必要だが、Javaのようなミドルウェアを間に挟むことで、再コンパイルをしなくても別のアーキテクチャに対応することができる。

複数のプログラムの同時実行

UNIXWindowsなどのマルチタスクのOSでは、

  • スケジューラ機構・コンテキスト切り替え
    • 複数のプログラムの命令をとても少ない間隔で交互に動作させることで、複数のプログラムを実行させる。
    • CPUのレジスタ情報を退避させ、短い間隔で停止・再開させ続ける
  • 仮想アドレス機構
    • 複数のプログラムのメモリを、実アドレス空間ではなく仮想アドレス空間を与え、
    • メモリとプログラムの間にカーネルが入って領域を管理することで、別々のメモリ領域をそれぞれのプログラムに安全に与える

を使うことで、複数のプログラムを同時に実行させることができる。これを「タイムシェアリングシステム」と呼ぶ。

また、特にUNIXのようなOSでは、複数の端末からひとつのコンピュータのリソースを安全に共有する技術が長けている。これをマルチユーザーと呼ぶが、こうしたシステムはネットワークと親和性が高く、ネットワークを通じて同じユーザー情報を共有したり、ファイルシステムをネットワークで共有したりすることができる。

ネットワークやファイルシステムレベルの簡単なインターフェースからの機能の提供

現代的なOSでは、ネットワークやファイルシステムの機能は欠かせないが、こうした機能を簡単なインターフェースからアクセスできるようにする。これは、UNIXではCライブラリやカーネルシステムコールを使って行う。

ファイルシステムは、ファイルやディレクトリといったツリー構造の外部記憶へのデータの取得・格納機構で、ストレージデバイスとともに使用する。WindowsではFATやNTFSLinuxではext4やXFSのような複数のファイルシステムを使うことができる。ネットワークはソケットと呼ばれるインターフェースを用いてTCP/IPなどの複雑な機構を簡単なものに抽象化できる。

ネットワークやファイルシステムのデータ資源は、IT用語では「リソース」と呼ばれる。こうしたリソースへのアクセス手段について、OSは共通で一般的な同じインターフェースを提供する。同じOSだけではなく抽象化されているため、WindowsLinuxは互いにソケットで通信することができる。

人間とコンピュータの接するインターフェースの提供

また、CUIのOSではコマンドラインシェルによって、コマンドで操作するユーザーインターフェースを提供する。

また、MacWindowsのようなGUIのOSでは、マウスのようなポインティングデバイスを使った、ウィンドウ、メニュー、ボタン、アイコンのような「視覚的に分かりやすい外見」による、直感的な操作を可能とする。

LinuxなどのX Window Systemを用いたGUIでは、ツールキット(ボタン・メニューなどのGUI部品集ライブラリ)がGTK+やQtを選べるほか、さまざまなデスクトップ環境やウィンドウマネージャが開発されており、こうした外見をカスタマイズして、さまざまなルック・フィールを使うことができる。

サーバーやデータベースのスループレットの向上

サーバーやデータベースにおいては、効率的にプログラムを実行することで、スループレット(性能)を向上させる。

Windows

Microsoftによる商用のOS。DOSから進化したパソコン用のOSで、IBM PC/AT互換機とIntel CPUで動作する。現代のIT社会で広く標準的に使われている。標準的になった理由は、Windows 95のインターフェースがウィンドウ描画として革命的であったことや、OfficeやIEのようなアプリケーション・ソフトウェアが長らく標準的な地位を占めていたこと。オープンソースではないがIBM PC/AT仕様が標準化されているため、同じIBM PC/AT互換機であれば、ドライバなどがあればどの機種でも動作する。

実際のところMacLinuxに比べて特別優れているわけではないが、ビルゲイツが言うようにソフトウェアは「勝者が総取り」であり、90%以上のシェアを占めるため、「他のOSの存在を忘れてしまう」ような普及状況になっている。

1995~2000年に販売されたWindows 9xシリーズは、不安定かつフリーズしやすいとして不評だったが、それでもIBM PC/AT互換機のパソコンでGUIが使えることは画期的であり、多くのユーザーが不安定ながらも楽しんでWindowsを使った。そして設計と実装を書き直したWindows NTが開発され、Windows 2000やXPのような「IT黄金期」の時代を支えた。Windows NTは安定性が飛躍的に向上し、ほとんどフリーズしなくなった。まさに、金の力は恐ろしいものである。また、Vista以降では.NET FrameworkというJavaと同様の仮想マシン機構を大々的に使うことになり、ほとんどフリーズや強制終了がなくなった。

LinuxでもGUI環境が整いだした最近でも、Windowsが多くの場合使われるのは、LinuxGUIの方が不具合やバグが多い、それは致命的なフリーズを起こすものでなくても、ユーザーが実際に使用する場面を良く考えていないから起きる不具合が多く、またボランティアによるオープンソース開発にはフォントが少ないとか翻訳の質が悪いなどの限界があり、今でもWindowsが多くの場合使われている。

また、最近ではWSLという機能があり、WindowsでもLinuxと同等のUNIX APIを使うことができる。また新しいバージョンのWSL 2ではLinuxカーネルをそのままWindowsと共存させられる。このため、「WindowsでしかWindowsアプリケーションは動作しない」と今まで言われていたが、「UNIXアプリケーションもWindowsから利用できる」ようになってきている。ただしオーバーヘッドなどの問題もあるほか、DockerなどのコンテナアプリケーションがLinuxの上でのLinuxしか動作できないため、完全にLinuxの分野を食いつぶすほどには至っていない。

Mac

Appleによる商用のOS。アラン・ケイダイナブック構想をApple社のスティーブ・ジョブズが見学して作られた、GUIのウィンドウ操作としてはオリジナル的な存在。標準化はされておらず、Apple社独自のハードウェアでしか動作しないが、UNIXをベースとしており、UNIXアプリケーションを動かすことができる。デザインなどの分野で良く使われている。

Macには「デザイン哲学」のようなものがあり、先進性が高いが、「使いやすさよりも目新しさを重視する」というところがある。また、高スペックかつ高価で、多くのユーザーにとってみればコストパフォーマンスが悪い。だがデザイナーやiOSなどのモバイル系のプログラマには良く使われている。特にNeXTSTEPの技術をベースに開発されたMac OS X以降のMac(最近ではmacOSという名称になった)はプログラミング的にとても優れていて、Swiftのような新しいプログラミング言語を使うこともできる。またHTMLレンダリングエンジンのWebKitAppleによってKDEKHTMLをベースに開発され、Google Chromeなどでも同様の技術(WebKitからGoogleが派生したBlink)が採用されている。

UNIX

今ではもう化石のようなOSだが、昔のワークステーションと呼ばれる少し高価なコンピュータで動作するOSで、コマンドから操作し、たくさんの端末からひとつのワークステーションにログインして使用する。ネットワーク機能が優れていることで有名。

昔のOSだがコマンドラインでネットワークから操作するような用途に長けており、viやEmacsのような一部の神格化されたアプリケーションがあるなど、多くの意味でWindowsなどと今でも競い合っている。商用UNIXとしてはSolarisなどがあるほか、UNIX互換OSにはLinuxFreeBSDがあり、今では「UNIX=Linux」のような人間が増えている。

UNIXはOSとしての設計がシンプルであるほか、早くからタイムシェアリングシステムやネットワークを想定して設計・実装されているため、安定性や信頼性に優れており、この安定性はLinuxにも大きく引き継がれている。LinuxFreeBSDは、Windows 9xに比べてフリーズせずきちんと動く。だが、NTカーネルや.NETなどの新技術を頑張って作るMicrosoftの努力により、今ではWindows 7や10もかなり安定性が上がった。だがWindows Vistaや8にもあるように、Windowsはたまに期待外れのバージョンをリリースする。UNIXLinuxは古くから変わらない化石のような技術を使っていることもあり、多くのUNIXが安定したOSとして提供されている。

Linux

UNIX互換のOSで、UNIXIntelのパソコンでも使用できるということで1990年代に人気を集めた。オープンソースのOSであり、OSの仕組みを自分で研究したり、改造したりすることができる。専門の高度な知識があるシステム管理者向けに、サーバーやモバイルなど高性能・高信頼性や省力化が必要な部分で今でも使われている。

Linuxはインターネットのみんなで作った楽しいOSであり、その開発手法が「バザール開発」と言って有名になったが、そもそもは「フリーソフトウェアのOSを作る」というGNUストールマンの活動と成果がベースになっており、Linuxカーネルだけではなく、コンパイラ、サーバーソフトウェア、プログラミング言語、データベース、そしてウィンドウシステムやデスクトップ環境に至るまで、ほとんど全てのものがオープンソースかつ無料でフリーソフトウェアとして手に入る。そのため、インターネットインフラ的なハッカープログラマに好まれる。Dockerやgitのような一部の技術はどのシステムよりも最新のものであり、MicrosoftクラウドでのLinux OSの利用やgithubを買収するなど、今ではMicrosoftLinuxに対して多くのコミットメント(貢献)を行っている。

Linuxの弱点はアプリケーションの質が低いこと。Microsoft Officeの代替となるLibreOfficeや、Adobe Photoshop/Illustratorの代替となるGIMP/Inkscapeなどは、まだまだ進歩の途上であり、まともに使うことができない。また商用ソフトウェアはほとんどがWindows/Mac向けに作られていることが多く、Linuxではメーカーから提供されるドライバやファームウェアもないことがあり、プリンターなどの用途ではLinuxから印刷ができないことが多い。またLinuxの過去のバージョン全てをサポートすることは現実的ではなく、昔のRed Hat Linuxなどを使って作られたシステムは、Windows XPなどと同様サポートされなくなってセキュリティホールを生み出す。多くのLinuxは最新版とその以前のバージョンぐらいしかサポートしていない。このため、標準的なWindowsを使わざるを得ない。

ただし、一部のデスクトップアプリケーションはWindowsのものよりも無料で品質が高いことも少なくない。FedoraUbuntuを個人の趣味や遊びで使う用途では多くのソフトウェアがオープンソースかつ無料で試すことができ、開発にも簡単に参加できる。あるいはシステム管理のための用途として、特にサーバー管理者にとってはUNIX互換のツールや最先端の開発環境が手に入るため、一般的サーバーのシステム構築のために使いやすいシステムである。まさに、エンジニアを目指すなら一度は学びたいOSである。

後日注記:Intel CPUは32bit~64bitになり、一昔のHPやSunのワークステーションよりも優れたマシン環境になっている。この環境にLinuxを足すことで、いっぱしのワークステーションとして使うことができる。そのため、LinuxFreeBSDなどのIntel PC向けUNIX互換OSは、90年代末頃の時代に流行した。当時はUNIXと同じようにオープンソースソースコードが公開された、「フィンランド人のリーナスという学生が作った無料のOS」として有名だった。

FreeBSD

UNIXの直接の流れをくむBSDと呼ばれるOSを、PC環境で使えるようにしたもの。FreeBSDの他、NetBSDOpenBSDといった兄弟たちが居る。Linuxと同様にオープンソースであり、Linuxと遜色のない機能を持っている。

後日注記:PCで使えるワークステーションとしては昔からLinuxと同じくFreeBSDも良く使われており、大学のUNIXワークステーションなどでは多くがFreeBSDを採用していた。ただしLinuxの現れた時代にはさまざまな著作権などの問題があって、PC向けのBSDは長い間提供ができなくなっていた。

Android

Googleによるモバイル用のOS・ミドルウェアシステムで、Linuxカーネルをベースにしている。スマホのような小さな画面でも使えるようにインターフェースが工夫されており、タッチパネルディスプレイでタップすることで操作を行う。

IBM z/OS

IBMワークステーションで動作するエンタープライズのOS。会社のシステムや信頼性が必要なインフラ基盤やデータベースで使われている。

アメリカのOSがバグだらけなのはアメリカの体質的な問題

僕は、アメリカのOSがバグだらけなのは、アメリカの体質的な問題があると思う。

アメリカの製造業というのは、「利益が出れば成功で、売ってしまえばそれで良い」というところがある。

本当に優れた製品を作ろうとせず、労働者は何も考えずに労働ノルマをこなしており、その結果バグだらけのものができても問題とせず、「売って儲かってしまえばそれで良い」と思っているからである。

確かに、エンジニアの間では、優れたOSを作ろうとするだろう。だが、アメリカはその時優れた製品が生まれなくても、儲かってしまえば「金の力で牽引できる」と考える。今、優れたものではなくても、それをおおっぴらに売ってしまえば利益が出る。その利益で、もっと優れたものを作ればいい。

そもそも、製品の品質だけではなく、「労働者を安定した生活につかせる」ということも、アメリカは考えていない。資本家は労働者のことを奴隷のようなものだと思っている。労働者も、会社の指導部を信じていない。

だからといってアメリカ人が悪いわけではない。逆に、アメリカ人は楽しい仲間のことを信じている。優れた事業家は、ネームバリューだけで評価される。

そういう世界だから、アメリカを追いかけ続けているだけでは、良いソフトウェアは生まれない。まさに、日本が独自に作ると、良いOSが生まれるだろう。日本人は「気軽に使ってもらって長い間満足する」ものを作るのは得意で、だからはてなブックマークのような使いやすいサービスが生まれるが、逆に業界全体にブレイクスルーを起こすことが不得意である。そこをきちんとできるようになれば、日本人はアメリカよりも優れたOSを作るはずである。最後に勝つのは、日本のOSである。

後日注記:ある意味、アメリカのIT業界というのはブレイクスルーが好きで、新しいアーキテクチャや斬新なイノベーション的発想を突き詰めようとする。日本人は、逆に使ってもらって満足しようとする。ただ、現実を見ると、日本人も多くのもので新しい「全く違う発想」をする。日本人は、発想をしたい人間はそれだけを突き詰め、みんなが協力したい時は正しい品質のものを作って顧客満足度を上げようとするところがある。みんなで新しいものを作るために挑戦していくということが苦手で、往々がひとりの社長に頼るようになる。チームで協力することは得意だが、変人奇人のような発想をすることができないのが日本人だ。