Windowsには、「なんでもオブジェクト」(Everything is an Object)というコンセプトがある。世間で言われているUnixのコンセプト「なんでもファイル」(Everything is a file)に対抗する形でMicrosoftの考えを表現したもの。たしかに「なんでもファイル」は、高速化のためサブディレクトリを先読みするExplorerとは相性が悪そうだ。

しかし、この「なんでもファイル」は、第三者がUnixのコンセプトを、そう表現しているだけだ。とはいえ、そう感じられるものがないわけではない。かつては、「なんでもファイル」の証左として、デバイスファイル(/dev)が取り上げられたが、Unix系といわれるLinuxには、さまざまなシステム情報にアクセスできる/sysファイルシステムがある。

/procファイルシステムはプロセスに関する情報(歴史的な事情からそれ以外もある)を、/sysファイルシステムはシステム関連の情報を提供する「疑似ファイルシステム」である。これらは、lsやcat、find、grepといった標準的なファイルを扱うコマンドで扱うことができ、プロセスやシステムの情報を表示、検索そして設定を行うことができる。対象が増えたとしても、利用するコマンドは変わらない。また、疑似ファイルシステムをマウントコマンドでツリーに追加していくことができる。/sysには、sysファイルシステム(sysfs)だけでなく、コンテナ管理で使うControl Groupやデバッグ用のdebugfsやtracefs、fuse(Filesystem in Userspace)管理用のfusectlなどがマウントされている。

疑似ファイルシステムの初期のものである/procファイルシステムは1985年のUnix V8に最初に搭載された。しかし、「なんでもファイル」のコンセプトを正式に取り入れたのは、Unix V8の後に開発が始まり1992年に公開されたPlan 9 from Bell Labs(以後Plan 9と表記)である。「9」という数字はUnix V8の次という意味で使われた。このPlan 9には、Unix開発に関わった多くの研究者も参加しておりUnixの直系だと言えなくてもない。Plan 9は、1990年のUKUUGコンファレンスの議事録(Plan 9: The Early Papers 収録)で、「すべてのリソースをファイルとして表現します」としている。

そういうわけで、「なんでもファイル」は、誰が言い出したのかは不明だが、世間的には、Unix系オペレーティングシステムの「コンセプト」であると信じられている。そして、これを引きずっているのがLinuxである。

Linuxカーネルを使うAndroidやChromebookにも/dev、/procや/sysがある。Androidは、adb経由でshellを起動すれば存在を確かめることができる。また、Chromebookでは開発者モードを有効にすると、コンソールcrosh(Alt+Ctrl+Tで起動できる)からshellを起動可能になり/procなどをアクセスが可能だ。

この「なんでもファイル」に対抗したのがWindowsの「なんでもオブジェクト」である。MicrosoftのBlogを見るとそう記述してあるものもある。たとえば、「Windows Command-Line: Inside the Windows Console」などだ。

逆に「sorry, it is not completely true」(申し訳ありません、これは完全な真実ではありません)と表記した「Five Myths about Managed Code - .NET Blog」ブログもある。ただ、後者の記事は、かなりソフトウェア的な問題に立ち入っており厳密な意味では違うという主張である。そう考えると、Windowsでは「なんでもオブジェクト」がコンセプトというのは、完全な間違いでもない。

Linuxの/procや/sysファイルシステムは、APIを呼び出すプログラムを作ることなく、既存のファイル関連コマンドで簡単にアクセスでき、情報を簡単に取り出せる。こうした疑似ファイルシステムを使うと「なんでもオブジェクト」にしたおかけで、Get-なんとか、Set-なんとかといったコマンドが大量に用意されているPowerShellは、何か遠回りをしているように見えてしまう。

コマンドラインで“cat /sys/……”で事足りるLinuxを使えば、Windowsでは、C#などの.NETやWin32APIを呼び出すことができる言語を使わなければならないのが、もどかしく感じる。

もちろん、「なんでもファイル」には欠点もある。たとえば、複雑なパラメーターを与える必要がある機能には対応しにくく、メタ情報を含むなど単純なバイトストリームにはならないデータは扱いにくい。場合によっては、Linuxでも新しいAPIを追加してプログラムからアクセスする必要がある。しかし、何事にも100%はなく、50%以下の労力で80~90%が達成できればいいと考えるのも考え方の1つ。このあたりが「なんでもファイル」に対する賛否の境界ではないか?

今回のタイトルのネタは、レン・デイトン(Len Deighton)の「イプクレス・ファイル」(原題The Ipcress File)である。固有名詞が多いなど、表現に特徴があり、読者にとって好き嫌いのはっきりする作家。