ベル研究所でのUNIX開発、Plan 9やInfernoオペレーティングシステムの開発、最近ではGo言語の開発でも知られるロブ・パイク氏が、UNIXのドットファイルの歴史について説明していた事がわかりました。
Rob Pikeは2012年の8月に、自身のGoogle Plusアカウントで、"."と".."の歴史について説明しています(Google Plusは閉鎖されており、Rob Pike氏のオリジナル記事はWeb Archiveで確認可能です。)。
この記事によると、"."と".."というファイル名は、UNIXのファイルシステムを階層化するために登場した概念ですが、lsを実行した際、そのまま表示されるという問題がありました。
これらを除外するために、以下のようなコードが追加されます。
if (name[0] == '.') continue;
以下の本来のコードより少し短くなっていますが、これによって二つの悪いことが起こったというのです。
if (strcmp(name, ".") == 0 || strcmp(name, "..") == 0) continue;
一つ目は、悪い前例ができたことで、ピリオドで始まる実際のファイルがカウントされるべきなのにスキップされるというバグが模倣されてしまったこと。
二つ目は、「隠し」あるいは「ドット」ファイルという考えが生まれてしまい、怠惰なプログラマーがホームディレクトリにファイルをたくさん作成するようになってしまったということです。
例えば同氏のホームディレクトリには100個以上のドットファイルがあり、ホームディレクトリを含むファイル名の評価がドットファイルのせいで遅くなっているというのです。
隠しファイルという概念は意図しない結果(設計ミス)でありで、40年前の小さな省力化が原因で、たくさんのバグやCPUサイクルの浪費、フラストレーションが発生してしまったと説明しています。
同氏はドットファイルに目的があることに異論はないものの、目的があるのはファイル自体であって、ファイル名の規約ではないと反論しています。例えばドットファイルが存在しないPlan 9では、$HOME/cfgや$HOME/libに設定ファイルを置くことができたとのことです。
macOSやLinux等のUNIX系オペレーティングシステムを使っているユーザーにとって、ドットファイルは慣れ親しんだ存在ですが、由来が設計ミスにあったとは驚きです。
[via Reddit]