Код зависит от договорённостей со средой
Программа не работает в пустоте. Она обращается к операционной системе за файлами, памятью, сетью и выводом изображения, а для сложных задач может пользоваться отдельными библиотеками — готовыми компонентами с собственным кодом. Между программой и такими компонентами есть договорённости: какие команды доступны, какие данные они принимают и что возвращают.
Пока обе стороны соблюдают эти договорённости, старый код может продолжать работать. Но новая версия системы или библиотеки иногда меняет интерфейс — набор доступных команд — либо строже проверяет данные. В результате приложение, которое вчера запускалось, после обновления может не найти нужную функцию или получить ответ в неожиданном виде.
Как небольшое изменение ломает привычную работу
Представим программу, которая сохраняет документ через библиотеку. Если библиотеку обновили и изменили способ обращения к папке, приложение может потерять возможность сохранять файл. Сам его код не менялся: нарушилась связь между ним и компонентом, на который он рассчитывал.
Проблема бывает и менее очевидной. Новая система может иначе обрабатывать шрифты, сетевые соединения или разрешения на доступ к файлам. Тогда приложение не обязательно перестанет запускаться: оно может лишь неверно отображать страницу, отказаться подключаться к серверу или запросить разрешение, которого раньше не требовало.
Почему программу приходится поддерживать
Чтобы сохранить совместимость, разработчики проверяют приложение на новых версиях среды, обновляют зависимости и при необходимости меняют код. Иногда помогает режим совместимости — способ запускать старую программу, имитируя часть прежнего поведения системы. Но это временный мост: он не гарантирует работу с каждым новым устройством или компонентом.
Поэтому «гниение» — не распад самого файла, а расхождение между его предположениями и меняющимся окружением. Даже неизменённая программа нуждается в обслуживании, если от неё ждут, что она будет жить в новом цифровом мире.






