З цим насправді немає нічого поганого, доки кожен може сплачувати витрати, вигоди та ризики.
... виправлення здається досить простим ... самому виправити код
Коли у вас є робота, ідеальною (мати сторонню бібліотеку саме того, чого ви хочете) - ворог достатньо хорошого (виправити це сам), і іноді вам доводиться робити такі речі. Я зробив ряд проектів, де ми придбали джерела ліцензій для комерційних бібліотек, щоб ми могли вирішити проблеми, перш ніж постачальник потрапив до нього.
... недоброзичливці хочуть стверджувати випадок, що це майже завжди погана ідея, оскільки це ризиковано та створює складні труднощі.
Це погана ідея, якщо у вас немає відбивачів, щоб обробляти розсікання чужого коду, виявлення проблеми та написання виправлення. Це правда, чи є код власним чи стороннім; Єдина відмінність - це те, чи перекинуто це на кубінку чи стіну будівлі, перш ніж вона висадилась у тебе на колінах.
Якщо ваші недоброзичливці просто відводять ідею в сторону, не зважуючи витрат на те, щоб не робити цього виправлення, вони не виконують домашнє завдання. Якщо у вас є багато внутрішнього коду, на який впливає помилка, яку виправить ваш патч, вам доведеться пройти його і змінити, щоб обійти його і повторно протестувати все, щоб переконатися, що він працює правильно. Тоді, якщо вам коли-небудь потрібно оновити пакет до версії, що виправляється з помилками, можливо, вам доведеться знайти та видалити обхідні шляхи та повторно протестувати знову. Існують ризики зробити це також, як, наприклад, пропустити справу, яку ви змінили або недостатньо перевірити. Особисто, якщо у мене є можливість виправити помилку біля її джерела, я б швидше скоїв це робити, ніж ганятись за рештою коду за допомогою мухоловки і сподіваюся, що я все отримаю.
... зміна коду була здійснена нами ... вона повинна бути частиною нашої кодової бази ... ми повинні представити її як новий проект і включити його автоматизовану збірку в наш процес збирання.
Якщо ви робите патч, патч є частиною вашого власного коду, а це означає, що ви повинні зробити його частиною вашого процесу. Це не інакше, ніж додавання чогось на 100% вашого коду до вашої системи. Ставтеся до сторонніх дистрибутивів як до священних і вкладайте їх у модуль так, як це був вихідний код. Будь-які виправлені патчі зберігаються разом з ним в окремих файлах і застосовуються як частина процесу збирання. Таким чином, ви завжди переходите від чистого джерела до виправленого джерела до вбудованого продукту і зможете точно показати, що відбувається. (Деякі люди розпаковують, вручну виправляють, повторно упаковують та зберігають це у контролі версій. Це погано.)
... ми перетягуємо їх код з їх сховища управління джерелом у наше, і ми втрачаємо історію за будь-якими змінами коду ...
Якщо ви ставитеся до сторонньої бібліотеки як до сторонньої залежності, у вас немає цієї історії для початку і ви нічого не втрачаєте. Якщо у вас є постійний доступ до сховища третьої сторони, ви можете проконсультуватися з цим, якщо вам потрібно. До сторонніх випусків слід ставитися як до аморфних крапель, які ви перевіряєте у власній системі без змін. Якщо вам потрібно переглянути зміни між випуском, який ви використовуєте, та пізнішими випусками, ви можете зробити це і, якщо захочете, придумати патчі до старої версії, яка включає зміни, які ви хочете.
Крім того, це просто здається чимось занадто складним для такої невеликої зміни коду, яку потрібно зробити.
Якщо ваш процес збирання є досить складним, додавання цього не повинно бути складніше, ніж додавання власного коду. Невелика кількість праці доводиться до того, що процес розпакування / виправлення / складання автоматичний, але як тільки це буде зроблено, це робиться назавжди. Зараз може бути одна помилка, але в майбутньому їх може бути двадцять. Якщо є, ви будете набагато щасливішими, що ви заклали основу, щоб підтримати все це зараз, тому що це зробить справу з наступними 19 набагато менше роботи.