Come modifico una libreria open source per mio uso personale?

3

Sto programmando in Objective-C. Voglio includere una libreria di telecamere, DLCImagePicker, nel mio progetto. C'è una variabile che ho bisogno di cambiare, ma è privata e non ho accesso ad essa.

Ho pensato a un modo per aggirare questo problema, ma non sono sicuro del modo migliore per farlo.

  1. Posso semplicemente copiare il codice nella mia classe e modificare la variabile.

  2. Posso alterarlo direttamente nella classe originale. Tuttavia, ho incluso questo codice come sottomodulo git e sto pensando che toccare il codice sorgente sia una cattiva idea in questo caso, e in generale.

  3. Subclassing. Non riesco a immaginare come funzionerebbe, dato che la variabile è privata.

  4. Posso eseguire qualche azione con git che creerebbe il mio fork / ramo del progetto e lo modificherò lì. Non l'ho mai fatto e sono molto primitivo con git.

posta Smooth Almonds 25.09.2013 - 06:18
fonte

2 risposte

3

Ti manca il punto dell'open source, ovvero che in cambio dell'utilizzo del software che ritieni utile, sei incoraggiato a contribuire a migliorare i miglioramenti a beneficio di tutti.

Quindi inserisci il software su github, quindi apporta le modifiche come faresti se lo possedessi. Ciò significa non solo esporre una variabile per rendere più facile l'hacking nel codice esterno, ma utilizzando l'incapsulamento appropriato e aggiungendo tutti i metodi migliorati di cui hai bisogno.

Quindi invia una richiesta di pull. Github ha dei buoni tutorial su come farlo. L'autore fornirà suggerimenti per il miglioramento, quindi molto probabilmente lo unirà, il che è vantaggioso non richiedendo il mantenimento di una forchetta e benefici per lui ottenendo utili miglioramenti al codice. Nell'improbabile eventualità che non accetti il cambiamento, hai una forchetta disponibile per il tuo uso personale. Inoltre, la maggior parte delle licenze open source incoraggiano se non a titolo definitivo richiedono la pubblicazione di modifiche e la tua github fork soddisfa questo requisito.

    
risposta data 25.09.2013 - 15:13
fonte
4

È possibile apportare modifiche marginali al software open source per le proprie esigenze, ma può facilmente causare un incubo di manutenzione.

Ogni volta che la libreria si aggiorna, hai due opzioni:

  1. ignora l'aggiornamento e tutti i miglioramenti e le correzioni di bug apportate
  2. unisci la tua modifica alla nuova versione della nuova libreria

Questa fusione può diventare sempre più complicata se il codice base della libreria si evolve.

Un'altra opzione sarebbe quella di fare ciò che Karl Bielefeldt suggerisce e chiedere a monte di unire la tua modifica e inserirla nella versione ufficiale. Questo, tuttavia, funzionerebbe solo con le premesse che:

  • Il cambiamento è utile per tutti, non solo per te (hai considerato di implementare un metodo setter per la variabile privata invece di cambiare semplicemente il valore codificato?)
  • Il cambiamento segue le convenzioni e la strategia a lungo termine del progetto
  • La biblioteca è un progetto bazaar che accetta contributi da chiunque senza coinvolgere un sacco di burocrazia. I progetti OSS più grandi sfortunatamente non rientrano in questa categoria.
risposta data 25.09.2013 - 15:49
fonte

Leggi altre domande sui tag