POSIXとシェルスクリプト作成方針について

POSIX(Portable Operating System Interface)というのは、UNIXをはじめとしたOS間のアプリの移植性を高めるために、IEEEが策定したOS共通のAPI規格です。
カーネルシステムコール他、プロセスやファイル・ディレクトリなど様々な項目について規定されています。

POSIXの名付け親は、EmacsGCCの作者でありGNU創始者でもあるリチャード・ストールマンさん。
末尾の'X'は何だろうと思っていたのですが、UNIX互換OSの名前に'X'がつくものが多かったから付けたとのこと。
(いや、UNIX専用の規格じゃないんですけどね。)

そして、The Open Groupという商標「UNIX」を管理している団体がありまして、POSIXをベースにしたSUS(Single UNIX Specification)というものを策定しています。

このSUSに完全準拠したOSのみが、The Open Groupから認定を受けて、正式に「UNIX」と名乗れます。

FreeBSDLinuxなどは、仕様変更の頻度とコスト的な面から認定を受けていないため、UNIXライクなOSと呼ばれています。
しかし、これらのOSも、基本的にはSUSに準拠する方針で実装しているそうです。

さて、前置きが長くなりました。

ここで言いたいことは、UNIX系OSと言っても各OSが独自拡張している部分があるため、作成したプログラムは他のUNIX系OSでは動かないかもしれない、ということです。

「そんなの普通だし、仕方なくない?」と、思われる方もいるかもしれません。

僕もそう思っていました。

しかし世の中には、POSIX原理主義というPOSIX規格(バージョンはIEEE Std 1003.1)に準拠した機能だけを使って、プログラム(主にsh)を作っている猛者達がいるそうです。
詳細はこちらのページをご覧下さい。

なかなかの煽り方。 僕は嫌いじゃないです。

「効率よりも移植性」という、UNIX哲学を貫いていますね。

そして何だか、SUS なのか POSIX なのかよく分からなくなってきました。
こちらのサイトを見る限り、SUSはPOSIXを含むようですが、ひとまず、ここではPOSIXと呼ぶことにします。

このPOSIX原理主義はというのは、素人の僕と違って、仕事でUNIXを弄って移植などで苦労されてきた人達の、1つの結論でしょう。
個人利用しかしていない僕には、メリットは少ないかなとも思ったのですが、下記の点は魅力的です。

  • 使用するOSを乗り換えたとき、作ったシェルスクリプトがそのまま使える かも
  • 他のOSを使っている人に、作ったシェルスクリプトをそのまま配布できる かも
  • 覚えたコマンドオプションが、他のOSで使えないときの絶望を回避できる かも

そこで、このサイトで僕が作るショボいシェルスクリプトも、なるべくPOSIX(こちらのサイト参考)にある機能で作っていきたいなと思っています。
(w3mなどの外部ツールに頼ることは多々ありますが。)

ただ、動作確認を行うための他の環境は用意できていないので、もし記事で紹介しているシェルスクリプトが動かない場合は、ご指摘頂けると幸いです。

以上、UNIXに関する規格と、シェルスクリプト作成方針についてのお話でした。

参考

すべてのUNIXで20年動くプログラムはどう書くべきか デプロイ・保守に苦しむエンジニア達へ贈る[シェルスクリプトレシピ集]

すべてのUNIXで20年動くプログラムはどう書くべきか デプロイ・保守に苦しむエンジニア達へ贈る[シェルスクリプトレシピ集]