機能を使用すると、プラットフォーム、マシン、またはハードウェア固有のインスタンスによって汎用オブジェクトの機能を拡張できます。これらのインスタンスは通常、新しいシステムやより特殊なシステムを対象とします。しかし、時とともに、かつては特殊であると考えられていた多くの機能がより一般的になっており、コードを実行するすべてのシステムで利用できるようになる可能性があります。そのため、機能を最新の状態に保つには、これらの詳細をときどき見直してオブジェクトを改訂する必要があります。
機能インスタンスは、冗長にならないようにモニターすることが推奨されます。ある機能インスタンスを、使用中のコードが対象となるすべてのシステムで使用できるようになった場合、そのインスタンスの維持は無意味です。機能インスタンスのベースオブジェクトのバージョンを、その機能インスタンスで置き換えることを推奨します。
リンカーは、ソフトウェアを構築するプラットフォームが、ソフトウェアを実行するプラットフォームと同じであると見なすことができません。そのため、リンカーはインスタンスの関連性の徹底的な検証を提供できません。ただし、オブジェクトのシンボル機能がオブジェクトのオブジェクト機能を拡張しない場合は、警告診断を生成できます。
次のオブジェクト foo.so を作成する際、オブジェクト機能とシンボル機能の両方が検出され、シンボル機能はベースオブジェクトの機能を拡張しません。
$ cc -o foo.so -G -Kpic foo.o foo.cap.o ld: warning: file foo.cap.o: section [3].SUNW_cap: symbol capabilities \ do not extend object capabilities and are redundant (object: CA_SUNW_HW_1 0x800 [ SSE ]); (symbol: CA_SUNW_HW_1 0x80 [ AMD_MMX ]);
SSE が利用可能で SSE 機能が AMD_MMX より大きくないかぎり foo.so はロードできないため、SSE の存在は AMD_MMX の存在を意味します。そのため、AMD_MMX インスタンスは冗長です。機能インスタンスのベースオブジェクトのバージョンを、その機能インスタンスで置き換えることを推奨します。