Dovrei forchetta per una riscrittura importante che utilizza una piccola quantità del codice originale? [chiuso]

5

Sto scrivendo una biblioteca. È una versione completamente riscritta di un altro, per soddisfare le mie esigenze (compatibilità PCL, principalmente). Tuttavia, l'API verrà completamente riscritta, in quanto dovrò cambiare molte cose in giro per la conformità PCL. Inoltre, dato che è una riscrittura, non potrò semplicemente iniziare dalla libreria e cambiarla a poco a poco, come di solito vedo con le forche. L'ho provato, ma non ha funzionato.

Quindi cosa dovrei fare? Dovrei sborsare qui o dovrei creare una nuova libreria?

    
posta It'sNotALie. 01.09.2013 - 12:43
fonte

4 risposte

1

"It's a completely rewritten version of another one [...]"

In senso stretto, qualcosa completamente riscritto non è considerato una versione; almeno non nel calcolo dove prendiamo "versione" in qualche modo formalmente. Ad esempio, è fuorviante e scorretto chiamare Linux una "versione di Unix". La parola ampiamente accettata per questo è "clone".

Anche qualcosa di riscritto non può essere una biforcazione, anche se somiglia all'originale fino al punto di essere un clone (ad esempio avendo interfacce simili o identiche).

Dato che hai provato a modificare l'originale e non ha funzionato, e poi hai intrapreso una riscrittura, quel bridge è già stato masterizzato: la riscrittura non è una versione e quindi non può essere considerata una fork. Non è nemmeno un clone, perché le interfacce sono diverse!

È una nuova libreria che copre un'area di funzionalità simile a quella precedente.

Se gli interni della biblioteca sono complicati e meritevoli di riuso e le nuove interfacce possono essere facilmente adattate, per utilizzare gli interni esistenti, è possibile creare un caso per estendere la libreria: mantenere le vecchie interfacce in posto (magari fornendo un modo rimuoverli in fase di compilazione per risparmiare spazio). Se questo approccio fosse fattibile per questa libreria, non avresti comunque eseguito una riscrittura completa .

    
risposta data 06.11.2013 - 17:21
fonte
0

So what should I do? Should I fork here or should I make a new library?

Con entrambe le opzioni ti verrà lasciato lavorare su qualche forma di nuova iterazione del tuo vecchio progetto. Le differenze si trovano in altre cose:

  1. Forking ti lascerebbe iniziare a lavorare con l'ultima versione del codice della precedente iterazione, quindi qui dipende da quanto simili nella struttura / progettazione si prevede la nuova iterazione rispetto alla precedente. Se è troppo diverso, potresti optare per l'avvio di una nuova libreria invece di biforcarsi.
  2. Quando crei un nuovo progetto ti stai staccando dal repository del codice sorgente della precedente iterazione. Forking manterrebbe il progetto nello stesso repository, consentendo di eseguire il rollback o ottenere da una specifica versione storica. I vantaggi di non biforcarsi, da questo aspetto, sarebbe probabilmente un miglior ordine e organizzazione e meno confusione del tuo nuovo repository quando avvii nuovo .
  3. Se si tratta di un progetto guidato dalla comunità open source, allora dovresti considerare la possibilità di prendere in considerazione o meno il fatto che la decisione di per sé trasmetta contenuti alla comunità. Forking indicherebbe che la nuova iterazione dovrebbe essere pensata in termini di continuazione diretta della precedente. L'avvio di un nuovo progetto separato indicherebbe l'opposto.
risposta data 06.09.2013 - 22:48
fonte
0

Hai dei test? Se è così, quanto sono legati al codice piuttosto che al comportamento? Lavorerei attraverso i test se funzionano a livello di comportamento.

Se non hai test allora (per favore) scrivi un po 'e usalo per eliminare ciò di cui hai bisogno. Sembra una riscrittura, quindi, a parte il riutilizzo delle idee, sarebbe meglio dire che è un "numero di rilascio principale" e quindi una nuova versione del tutto.

    
risposta data 10.09.2013 - 00:02
fonte
0

Dato che essenzialmente stai riscrivendo tutto da zero, dovresti creare un nuovo progetto. Forking implicherebbe che i due condividano abbastanza somiglianze che a volte lungo la linea, è possibile condividere funzionalità, fare qualche nuova aggiunta qui o dare qualche correzione lì. Chiaramente non sarà così.

    
risposta data 09.10.2013 - 00:31
fonte

Leggi altre domande sui tag