Навеяно соседней темой, предлагающей новаторский подход к линковке, в которой строгая версионность вызовов функций противопоставляется обратной совместимости.
С одной стороны я понимаю автора, стабильность конкретного приложения прежде всего, и тут минимум зависимостей играет на руку. С другой стороны медаль имеет обратную сторону.
Прямо сейчас на работе приходится иметь дело с программой, написанной под Qt 4.3.2, кто не в курсе - эта версия вышла 3 года назад, довольно приличный срок. В своё время бравые разработчики дописали поверх несколько самопальных патчей для собственных целей, тем самым прибив гвоздями программу к конкретно этой версии Qt. Опять же, кто не в курсе - в Qt 4 заявлена обратная бинарная совместимость, это значит, что Троллям нет смысла бекпортировать патчи для старых минорных версий, вместо этого они выпускают новую мажорную, сохраняя при этом обратную совместимость.
Проходит время, разработчики разбежались, программа не развивается, но актуальности не потеряла, поддержка функционирует. И получается такая штука, что Тролли уже выпустили сотни обновлений для Qt, но тем не менее задействовать их нельзя - мешает форк. Итого имеем:
- висящие в воздухе потенциальные ошибки, с помощью которых зная код можно попросту саботировать программу, подсунув ей специально подготовленные файлы;
- в свежих версиях появился функционал, открывающий новые возможности, использовать которые не выйдет;
- проблемы сборки старой версии Qt под OS X 10.6 (Snow Leopard), благодаря которым (сейчас тем кто стоит лучше сесть), программа собирается на OS X 10.5 и тестируется после перезагрузки на 10.6, да это официальный workflow;
- повсеместное использование внутри старой Qt Carbon API, который одной ногой в могиле, ещё чуть-чуть и программа просто перестанет работать на следующей версии OS X;
- закрытая дорога на 64 бита на Маке, опять же из-за Carbon.
Вот и выходит, что в погоне за сиеминутным благом мало кто думал про будущее программы, клея патчи на динамично развивающуюся библиотеку. Более того, я почти уверен, что эти патчи в мейнстрим не предлагались.
Лично для меня такой подход чужд. Первое что я делаю в подобных ситуациях - максимально глубоко раскапываю проблему, локализирую её источник и предлагаю исправление в мейнстрим, учавствуя в обсуждении проблемы. Именно это для меня финальная черта, раньше которой сойти с дистанции я себе просто не позволяю.
Собственно лично я считаю форки достаточно радикальной мерой. Семь раз отмерь - один форкни.
Мнения приветствуются.