В этом нет ничего плохого, если каждый может понести издержки, выгоды и риски.
... исправление кажется достаточно простым ... самому патчить код
Когда у вас есть работа, perfect (наличие сторонней библиотеки - именно то, что вам нужно) - это враг достаточно хорошего (исправляя ее самостоятельно), и иногда вам приходится делать такие вещи. Я выполнил ряд проектов, в которых мы купили исходные лицензии для коммерческих библиотек, чтобы мы могли решить проблемы до того, как вендор доберется до них.
... недоброжелатели хотят доказать, что это почти всегда плохая идея, потому что это рискованно и создает неприятную сложность.
Это плохая идея, если у вас нет возможностей справиться с анализом чужого кода, выявлением проблемы и написанием исправления. Это верно, является ли код внутренним или третьим лицом; единственная разница в том, была ли она брошена на кабину или стену здания до того, как приземлилась на колени.
Если ваши хулители просто отбрасывают идею, не взвесив затраты на не делать этот патч, они не делают свою домашнюю работу. Если у вас есть много внутреннего кода, на который повлияла ошибка, которую исправит ваш патч, вам придется пройти и изменить его, чтобы обойти его, и перепроверить все, чтобы убедиться, что он работает правильно. Затем, если вы когда-нибудь обновите пакет до версии с исправленными ошибками, вам, возможно, придется найти и удалить свои обходные пути и заново протестировать. Это также сопряжено с риском, например, пропущение измененного вами случая или недостаточное тестирование. Лично, если бы у меня была возможность исправить ошибку в ее источнике, я бы предпочел сделать это там, а не гоняться за остальной частью кода мухобойкой и надеяться, что я все получу.
... изменение кода было сделано нами ... оно должно быть частью нашей базы кода ... мы должны представить его как новый проект и включить его автоматическую сборку в наш процесс сборки.
Если вы делаете патч, патч является частью вашего собственного кода, что означает, что вы должны сделать его частью своего процесса. Это ничем не отличается от добавления чего-то, что на 100% соответствует вашему коду в вашей системе. Рассматривайте сторонний дистрибутив как священный и помещайте его в модуль, как если бы это был исходный код. Любые патчи, которые вы пишете, хранятся вместе с ним в отдельных файлах и применяются как часть процесса сборки. Таким образом, вы всегда переходите от чистого источника к исправленному исходному к встроенному продукту и можете точно показать, что происходит. (Некоторые люди распаковывают, вручную исправляют, перепаковывают и сохраняют это в системе контроля версий. Это плохо.)
... мы потянем их код из их репозитория управления исходным кодом в наш, и мы потеряем историю за изменениями кода ...
Если вы рассматриваете стороннюю библиотеку как стороннюю зависимость, у вас нет этой истории для начала, и вы ничего не теряете. Если у вас есть постоянный доступ к репозиторию третьей стороны, вы можете обратиться к нему, если вам нужно. Сторонние выпуски должны рассматриваться как аморфные капли, которые вы вносите в свою систему без изменений. Если вам нужно посмотреть на изменения между выпуском, который вы используете, и более поздними выпусками, вы можете это сделать, и, если хотите, придумать исправления для старой версии, которые включают изменения, которые вы хотите.
Также кажется, что это слишком сложно для такого маленького изменения кода, которое нужно сделать.
Если ваш процесс сборки достаточно сложен, добавить это не должно быть сложнее, чем добавление собственного кода. Есть небольшой труд, чтобы довести его до того момента, когда процесс распаковки / исправления / сборки будет автоматическим, но как только он будет завершен, он будет завершен навсегда. Сейчас может быть одна ошибка, но в будущем их может быть двадцать. Если да, то вы будете намного счастливее, если заложите основу для поддержки всего этого сейчас, потому что это сделает работу со следующими 19 гораздо менее трудоемкой.