При написании программ для проекта GNU (или любых ваших собственных программ) ни при каких обстоятельствах не должны учитываться какие-либо особенности реализации Unix.
Если у Вас слабые представления о внутренней реализации Unix-программ, это совершенно не означает, что Вы не можете написать их имитацию; попытайтесь организовать эту имитацию таким образом, чтобы она не опиралась на особенности конкретной версии Unix с тем, чтобы это не влияло на получаемые результаты.
Например, утилиты Unix как правило оптимизировались на минимальное использование оперативной памяти; если для Вас важна скорость, ваша программа будет реализована существенно по другому. Вы можете хранить весь входной файл в памяти и просматривать его там, вместо того, чтобы использовать stdio. Следует избегать использования временных файлов: обработку необходимо выполнять в один проход вместо двух (в частности, мы так делаем в ассемблере).
Или, напротив, придавайте особое значение простоте за счет скорости. Для многих приложений скорость современных компьютеров делает возможным использование простых алгоритмов.
Следует стремиться к общности. Например, Unix-программы часто используют статические таблицы или строки фиксированного размера. Вместо этого следует использовать динамическое распределение памяти. Проверьте, что Ваша программа обрабатывает символ NUL и другие необычные символы во входных файлах. Введите язык программирования для того, чтобы оставить возможность расширения возможностей и напишите часть программы на этом языке.
Старайтесь помещать отдельные части программы в библиотеки, которые можно использовать независимо. По возможности следует использовать алгоритм "сборки мусора" вместо тщательного отслеживания, когда следует освобождать память, или использовать новый механизм распределения памяти obstack, разработанный в рамках GNU.