Naprawdę nie ma w tym nic złego, o ile wszyscy znoszą koszty, korzyści i ryzyko.
... poprawka wydaje się dość prosta ... aby samemu załatać kod
Kiedy masz pracę do wykonania, idealna (posiadanie biblioteki innej firmy, która jest dokładnie tym, czego chcesz) jest wrogiem wystarczająco dobrym (samodzielne załatanie jej), a czasami musisz robić takie rzeczy. Zrealizowałem wiele projektów, w których kupiliśmy licencje źródłowe dla bibliotek komercyjnych, abyśmy mogli rozwiązać problemy, zanim dostanie się od dostawcy.
... przeciwnicy chcą argumentować, że jest to prawie zawsze zły pomysł, ponieważ jest ryzykowny i wprowadza kłopotliwą złożoność.
Jest to zły pomysł, jeśli nie masz narzędzi do poradzenia sobie z sekcją kodu innego użytkownika, identyfikowaniem problemu i pisaniem poprawki. Dotyczy to zarówno kodu wewnętrznego, jak i strony trzeciej; jedyną różnicą jest to, czy został wyrzucony nad kabinę lub ścianę budynku, zanim wylądował na twoich kolanach.
Jeśli twoi przeciwnicy są po prostu szczotkowanie pomysł na bok bez obciążania kosztami nie robi tę poprawkę, nie robią ich pracy domowej. Jeśli masz dużo kodu wewnętrznego, na który wpływa błąd, który naprawi łatka, musisz przejść i zmienić go, aby go obejść i ponownie przetestować wszystko, aby upewnić się, że działa poprawnie. Następnie, jeśli kiedykolwiek uaktualnisz pakiet do wersji z poprawionymi błędami, być może będziesz musiał znaleźć i usunąć swoje obejścia i ponownie przetestować. Istnieje również ryzyko, że to zrobisz, na przykład pominięcie zmienionego przypadku lub niewystarczające testowanie. Osobiście, jeśli mam okazję naprawić błąd u źródła, wolałbym to zrobić tam niż gonić resztę kodu za pomocą flyswatter i mam nadzieję, że dostanę wszystko.
... zmiana kodu została wykonana przez nas ... musi być częścią naszej bazy kodu ... musimy wprowadzić go jako nowy projekt i włączyć jego automatyczną kompilację do naszego procesu kompilacji.
Jeśli robisz łatkę, łatka jest częścią twojego kodu, co oznacza, że musisz włączyć ją do swojego procesu. Nie różni się to niczym od dodania do systemu czegoś, co stanowi 100% kodu. Traktuj dystrybucję stron trzecich jako świętą i umieść ją w module tak, jak w przypadku kodu źródłowego. Wszelkie napisane łaty są przechowywane w osobnych plikach i stosowane w ramach procesu kompilacji. W ten sposób zawsze przechodzisz od czystego źródła do łatanego źródła do zbudowanego produktu i możesz dokładnie pokazać, co się dzieje. (Niektórzy rozpakowują, łatają ręcznie, ponownie pakują i przechowują to w kontroli wersji. To źle.)
... ściągniemy ich kod z repozytorium kontroli kodu źródłowego do naszego i utracimy historię zmian kodu ...
Jeśli traktujesz bibliotekę innej firmy jako zależność innej firmy, nie masz na początku tej historii i nic nie tracisz. Jeśli masz stały dostęp do repozytorium strony trzeciej, możesz skonsultować się z nim w razie potrzeby. Wersje innych firm należy traktować jak amorficzne obiekty BLOB, które niezmiennie rejestrujesz we własnym systemie. Jeśli chcesz spojrzeć na zmiany między wersją, której używasz, a późniejszymi wersjami, możesz to zrobić i, jeśli chcesz, zaproponować łatki do starej wersji, które zawierają pożądane zmiany.
Wydaje się też, że jest to coś zbyt skomplikowanego, aby wprowadzić tak małą zmianę kodu.
Jeśli proces kompilacji jest wystarczająco zaawansowany, dodanie tego nie powinno być trudniejsze niż dodanie własnego kodu. Doprowadzenie go do punktu, w którym proces rozpakowywania / łatania / kompilacji jest zautomatyzowany, wymaga niewielkiego nakładu pracy, ale po jego zakończeniu trwa wiecznie. Może być teraz jeden błąd, ale w przyszłości może być dwadzieścia. Jeśli tak, będziesz o wiele szczęśliwszy, że położyłeś podwaliny, aby wesprzeć to wszystko teraz, ponieważ sprawi, że radzenie sobie z następnymi 19 znacznie mniej pracy.