CoreSystem/SpecCriticism
Что не так с rpm и спеками
Затруднена рефлексия
Теги и секции в спеке начинают анализироваться после раскрытия макросов. Это означает, что о спеке ничего нельзя сказать, не раскрыв рекурсивно все макросы. Более того, конструкция `%()` раскрывается в результат исполнения произвольного кода на шелле. Соответственно, из спека в общем случае невозможно что-либо достать, не раскрыв все макросы и не исполнив все встроенные шелльные вставки — включая информацию о версии, релизе и лицензии. Это затрудняет анализ спеков без необходимости сборки спека, в том числе массовый.
Стандартные инструменты авторов пакетов ALT Linux Team прибегают к эвристикам для получения этой информации в надежде, что в 95% случаев этого достаточно.
Зависимость от архитектуры
В силу того, что язык спеков — макроязык без костей (см. предыдущий параграф), очень легко сделать SRPM (не "бинарный" пакет, а исходный), зависящий от архитектуры: например, с разным списком патчей и сурсов на разных архитектурах. Если, например, собрать такой пакет в репозиторий, то опубликован будет один из этих srpm, но продуктовые ("бинарные") пакеты будут собраны из srpm, раскрытых в окружении с определённым %arch. Это стреляет в разных местах: например, на пересборочницу на всех архитектурах попадает общий srpm.