ライブラリ化の難しさ

たとえば、i2cのサブシステムを考えます。

i2c_master_write(int peripheral, char buf[], int count);

みたいな関数を実装します。この関数は内部でi2c転送をトリガーします。i2c割り込みハンドラは転送が終了する毎にbuf[]からデータを取り出してi2cペリフェラルから送信します。count個のデータを転送しおわったら、セマフォを使って待ち状態にあったi2c_master_writeを実行状態に戻します。
この関数をライブラリ化するにはどうしたらいいでしょう。しばらく考えたのですが、結論は「できない」でした。
そんなアホなことがあるか!と言うかもしれません。しかし、TOPPERS/ASPにおいてはセマフォのIDは静的に決まります。事前にコンパイルしてライブラリ化することはできません。
セマフォIDを直接参照せず、変数内のIDを使えばいい」
確かにそうですが、それでは変数の初期化部をライブラリ化できません。ユーザーに「大半はライブラリ化できていますが、あなたはこの初期化関数をアプリと同時にコンパイルしなければなりません」というなんだか分からないルールを押しつけることになります。
全く同じ理由でカーネルの外部ライブラリ化をあきらめました。
なんというか、静的コンフィグレーションって、生産性と折り合わないです。選択肢として静的コンフィギュレーションがある分には文句はないのですが、それしかない、ってのは「現世代リアルタイムOSの決定版」を名乗るには古くさくないですかね。