Введение

Концепция в разработке программного обеспечения

В разработке программного обеспечения, когда программное обеспечение было разветвлено или использует цепочку библиотек/зависимостей, термин "upstream" (вверх по течению) относится к проблеме, возникающей в программном обеспечении, связанном с этой цепочкой. Он указывает направление к оригинальным авторам или сопровождающим программное обеспечение. Обычно используется в контексте версии, ошибки или исправления. Разработка "upstream" позволяет другим дистрибутивам воспользоваться ею, когда они принимают будущий релиз или включают недавние (или все) исправления "upstream". В свою очередь, оригинальные авторы (поддерживающие "upstream") могут получить пользу от вкладов, поступающих из кастомизированных дистрибутивов, если их пользователи отправляют исправления "upstream". Этот термин также относится к ошибкам: ответственность за ошибку считается лежащей "upstream", если она не возникла в результате портирования, модификации или интеграции, выполненных дистрибутивом.

Примеры

Патч, отправленный разработчикам оригинального проекта (upstream), предлагается авторам или сопровождающим программного обеспечения. Если патч принимается, авторы или сопровождающие включат его в свою версию программы, либо немедленно, либо в одном из будущих релизов. В случае отклонения, автор патча должен будет самостоятельно поддерживать свою версию программного обеспечения. Upstream-репозиторий или дистрибутив исходного кода может представлять собой версию, отмеченную релизом, для которой исходный код был специально упакован, конкретный коммит или ветку master (термин, обозначающий последний коммит). Пользовательские дистрибутивы (например, форки) могут не получать исправления ошибок и улучшения (развитие проекта, связанное с оригинальными авторами и upstream) из-за отсутствия слияния (всех) upstream-патчей. В таких случаях пользовательский дистрибутив может быть даже адаптирован к специфическим потребностям и требованиям его пользователей и сопровождающих. Подобное часто встречается и с зависимостями (пакетами поставщиков), когда пользователь ограничивается базовой версией и продолжает её использовать, со временем накапливая множество (произвольных) модификаций или нестандартных способов применения в своей среде. В результате слияние последних upstream-патчей в пользовательский дистрибутив становится невозможным без значительных усилий по обеспечению совместимости патчей и функциональности, а также для предотвращения дублирования исправлений ошибок, которые были решены пользователем самостоятельно (и своим способом), в то время как upstream также имеет патч для этой ошибки. Многие пользователи пользовательских дистрибутивов всё же выборочно применяют и объединяют критические upstream-патчи, особенно те, что связаны с уязвимостями в системе безопасности.