maya's blog

About programming, aws and ubuntu

lsソースコードを取得する

lsソースコードを読もうと思ったけれど、調べているとFreeBSD版とかGNU版とか色々あってどこから手をつけていいのかわからない。 maclsでさえ、どのソースコードをbuildして生成されたものなのかがわからない。 恐らくこれか?というくらい。 macのlsFreeBSDのlsを最初70行ほど読み比べてみると、ほぼ同じだけどincludeしてるheaderが少し違ったりで。 DarwinFreeBSD派生だから、lsとかのコマンドのソースコードも流用しているのか?と思ったけれど、その辺は全然わからん。

ひとまず多環境でのlsソースコードを網羅する。 ls sourcecodeでググって出てきたソースコード追記しているので、信憑性はなんとも言えない。

FreeBSD

ls.cの行数はRevision 328100時点で914行。 確かになんとか読めるかってくらいの行数。 もちろんincludeしているヘッダの行数もカウントするともっと長くなるだろうし、実際に読んでみないとどれだけ外部の関数なりを使っているのかってのがわからないから、行数だけみるのもってのもね。

A.3. Using Subversion によれば、FreeBSDSVNで管理されていてrepositoryはsvn.FreeBSD.orgであるとのこと。 ViewVC Repository Listingでブラウザから見れる。

macOS

Open Source - Releases を見る限りはmacOSやDeveloper Tools(clangやgnumakeが入ってるの)のソースコードが閲覧できるので、macOS周りのOSS化しているソースコードはここで閲覧できるのかな?という予測。

こちらのls.cは833行で、FreeBSD版と行数も近いし、70行あたりまでざっと読む限り内容もほぼ一緒。

GNU

ls.cの行数はblob: bf0c5941d7de699fc5a85d44461ef29192216d9d時点で5308行。 FreeBSD版と比べるとだいぶ長い。GNU版が読みにくいって言われている所以は行数からもきているのかな?

Coreutils - GNU core utilitiesIntroduction to Coreutilsによれば

The GNU Core Utilities are the basic file, shell and text manipulation utilities of the GNU operating system. These are the core utilities which are expected to exist on every operating system.

とあるので、GNUオペレーティングシステムで用いる基本的なファイルだったりシェル、テキスト処理機能をなすものがGNU Core utilitiesっていうらしい。 このGNU Core UtilitiesはどのOSにも使われているとのこと。 lsコマンドもこのGNU Core Utilitiesに含まれている。

GNU Core Utilitiescgit, gitweb等からブラウザ経由でソースコードを閲覧できる。

debian

パッケージマネージャからソースコードを取得できるぽい。

NetBSD

BSD派生のUNIX系OS。ってかNetBSD自体初めて知った。

最後に

lsコマンド1つとっても環境毎で若干オプションの渡し方が違ったりするので、manはきちんと読んだ方がよさげ。 ひとまずどこから手をつけていいのかがわかったのでよいよい。

参考

結構200x年代の記事がtopに出てきた。昔流行ってたのかな。