Non c'è davvero nulla di sbagliato nel farlo finché tutti possono sostenere costi, benefici e rischi.
... la correzione sembra abbastanza semplice ... per correggere il codice da solo
Quando hai un lavoro da fare, perfetto (avere una biblioteca di terze parti che è esattamente quello che vuoi) è il nemico del abbastanza buono (rattoppandolo da solo), e talvolta devi fare cose del genere. Ho realizzato una serie di progetti in cui abbiamo acquistato licenze di origine per biblioteche commerciali in modo da poter risolvere i problemi prima che il fornitore ci arrivasse.
... i detrattori vogliono sostenere il fatto che questa è quasi sempre una cattiva idea in quanto è rischiosa e introduce una complessità fastidiosa.
È una cattiva idea se non hai le braciole per gestire sezionare il codice di qualcun altro, identificare un problema e scrivere una correzione. Questo è vero se il codice è interno o di terze parti; l'unica differenza è se è stato gettato sopra un cubicolo o costruendo un muro prima di atterrare in grembo.
Se i tuoi detrattori stanno semplicemente spazzando via l'idea senza soppesare i costi di non fare questa patch, non stanno facendo i compiti. Se hai un sacco di codice interno che è interessato dal bug che la tua patch correggerebbe, dovrai attraversarlo e cambiarlo per aggirare e testare nuovamente tutto per essere sicuro che funzioni correttamente. Quindi, se dovessi mai aggiornare il pacchetto a una versione corretta, potresti dover trovare e rimuovere le soluzioni alternative e ripetere il test. Ci sono anche rischi nel farlo, come perdere un caso modificato o test insufficienti. Personalmente, se ho l'opportunità di correggere un bug alla sua fonte, preferirei farlo lì piuttosto che inseguire il resto del codice con un flyswatter e spero di ottenere tutto.
... la modifica del codice è stata fatta da noi ... deve far parte della nostra base di codice ... dobbiamo introdurlo come nuovo progetto e incorporare la sua build automatizzata nel nostro processo di compilazione.
Se stai eseguendo una patch, la patch fa parte del tuo codice, il che significa che devi renderlo parte del tuo processo. Questo non è diverso dall'aggiungere qualcosa che è al 100% il tuo codice al tuo sistema. Tratta la distribuzione di terze parti come sacrosanta e inseriscila in un modulo proprio come se fosse un codice sorgente. Tutte le patch che scrivi vengono archiviate con esso in file separati e applicate come parte del processo di compilazione. In questo modo passi sempre da sorgente pulita a fonte patchata a prodotto costruito e puoi mostrare esattamente cosa sta succedendo. (Alcune persone disimballano, patch a mano, reimballano e memorizzano nel controllo della versione. È un male.)
... stiamo estraendo il loro codice dal loro repository di controllo del codice sorgente nel nostro e perdiamo la cronologia dietro eventuali modifiche al codice ...
Se stai trattando la libreria di terze parti come una dipendenza di terze parti, non hai quella storia per cominciare e non stai perdendo nulla. Se hai accesso continuo al repository di terze parti, puoi consultare ciò di cui hai bisogno. Le versioni di terze parti devono essere trattate come BLOB amorfi che si controllano inalterati nel proprio sistema. Se è necessario esaminare le modifiche tra la versione che si sta utilizzando e le versioni successive, è possibile farlo e, se lo si desidera, elaborare patch per la versione precedente che incorporano le modifiche desiderate.
Inoltre sembra solo qualcosa di troppo complicato per una modifica del codice così piccola che deve essere fatta.
Se il tuo processo di compilazione è sufficientemente sofisticato, aggiungere questo non dovrebbe essere più difficile dell'aggiunta del tuo codice. C'è una piccola quantità di lavoro nel portarlo al punto in cui il processo di decompressione / patch / build è automagico, ma una volta fatto, è fatto per sempre. Potrebbe esserci un bug ora, ma potrebbero essercene venti in futuro. Se ci sono, sarai molto più felice di aver gettato le basi per supportare tutto ciò ora, perché renderà molto più difficile gestire il prossimo 19.