ときには例外もあるが、GNU用のユーティリティプログラムやライブラリは、 バークレーUnixの上位互換であるべきで、ansi Cがその振る舞いを規定 しているなら、ansi Cの上位互換に、posixがその振る舞いを規定 していれば、posixの上位互換であるべきだ。
もしこれらの標準が矛盾していたら、それぞれに対し互換モードを提供する と便利だ。
ansi Cやposixはたくさんの拡張を禁じている。拡張をどんな風に 行っても構わない、そうして、それを使わないための、‘--ansi’とか ‘--posix’とか‘--compatible’オプションを含めなさい。 しかしながら、その拡張が実際のプログラムやスクリプトをおかしくする、 十分な可能性があるなら、それは本当のところ上位互換ではない。そのインタ ーフェースを再設計してみなさい。
多くのGNUプログラムは、環境変数POSIXLY_CORRECT
が定義されている
と(例え、それは空の値と定義されていても)、posixと抵触する拡張を
行わない。適切であれば、あなたのプログラムをこの変数を認識するように
してください。
ある機能が(プログラムやコマンド・ファイルではなく)ユーザだけに使われ、
かつ、それがUnixでは貧弱なものなら、それをまるで違った、もっと良いもの
に完全に置き換えてしまってよい。(例えば、vi
はEmacsと置き換えら
れている。) しかし互換機能も提供するのが良い。(フリーなvi
クローン
があるので、我々はそれを提供する。)
バークレーUnixにはない、便利な機能の追加は歓迎である。