Devo consegnare il mio codice di utilità e di supporto ai client?

5

Nel corso degli anni ho creato una serie di librerie di utility e helper Java che allego solo a nuovi progetti. Quindi, quando consegno il codice ai miei clienti, invio tutto il codice tranne per le librerie stesse (non JAR ma file del codice sorgente).

Un cliente si è lamentato di non poter compilare il progetto poiché mancavano alcune librerie. Ho provato a spiegarlo sulle mie biblioteche, ma non era soddisfatto.

Come gestisci queste situazioni? Sto ancora apportando modifiche a queste librerie spesso e non riesco a compilare JAR ogni volta che comincio a lavorare su qualche nuovo progetto. Come superare questo problema - non condividere le librerie private (proprietà intellettuale personale) e avere clienti felici?

    
posta deviDave 03.04.2012 - 10:56
fonte

5 risposte

16

Innanzitutto, si tratta principalmente del contratto che hai con il cliente. Se hai un contratto che include la consegna del codice sorgente, il tuo cliente può aspettarsi un codice sorgente che può compilare da solo. Se rifiuti di farlo, hai rotto il contratto - e non importa se la fonte mancante in lib A o lib B o lib "Utility". Dal punto di vista del cliente, non vi è alcuna differenza tra queste parti.

Se hai escluso in modo specifico alcune librerie nel tuo contratto (e il tuo cliente è stato abbastanza stupido da firmare), allora potresti legittimamente rifiutarti di consegnare la tua fonte per tali librerie, ma non aspettarti di mantenere il cliente in futuro .

Se vuoi evitare quella situazione in futuro, separa chiaramente la tua biblioteca di utilità nel tuo contratto e prova a venderla / concederla in licenza ai tuoi clienti come prodotto a sorgente chiusa, insieme alle fonti del prodotto principale che sei creando per loro. Ciò implicherà ovviamente il controllo delle versioni e la gestione della configurazione della tua utitlity, naturalmente.

    
risposta data 03.04.2012 - 11:40
fonte
21

Se il contratto si aspetta che il codice sorgente sia consegnato, il codice sorgente che gli hai fornito dovrebbe essere compilato.

Non dare loro le librerie per farlo è ridicolo.

Se il codice nelle tue librerie è un codice generico di tipo helper, non c'è niente di sbagliato nel dargli i binari e qualche accordo di licenza con loro.

Se le librerie contengono qualcosa di specifico su come è costruito il sistema, allora il cliente avrà il diritto di aspettarsi di ricevere quel codice. Potrebbe essere necessario modificarlo ad un certo punto, ad esempio.

    
risposta data 03.04.2012 - 11:36
fonte
2

Probabilmente devi fare una versione della tua libreria proprietaria e creare delle versioni (interne). Quindi, quando avvii un nuovo progetto, utilizzi la tua ultima libreria rilasciata in quel progetto e esegui l'aggiornamento a una nuova versione quando necessario.

Quindi puoi inviare la fonte al tuo cliente, incluso il contenitore della tua libreria nella versione con cui hai testato il progetto.

    
risposta data 03.04.2012 - 11:02
fonte
0

Per aggiungere a ciò che ha scritto bjarkef, dovresti avere un processo di compilazione automatizzato, in modo che le tue librerie siano costruite automaticamente.

Dovresti etichettare le versioni stabili delle tue librerie, codice sorgente e binari (jars).

Quando distribuisci un prodotto basato sulle tue librerie o su librerie di terze parti, dovresti includere i binari (giare) di tutte le librerie con cui lo hai testato all'interno del tuo rilascio.

Ci sono alcuni progetti open source che non distribuiscono le loro dipendenze di terze parti insieme alla loro distribuzione, tuttavia questa è una pratica molto negativa.

Il tuo cliente ha il diritto di insistere sulla ricezione di prodotti completi e di non iniziare a cercare la versione corretta di tutte le tue dipendenze.

    
risposta data 03.04.2012 - 11:15
fonte
0

Se il client è effettivamente interessato solo sul codice che è compilabile, considera di creare e passare loro "stub" che non funzionano ma implementano le interfacce necessarie per la compilazione del codice:

public class MyClass {
    public void myMethod() {
        throw unsupported();
    }
    private UnsupportedOperationException unsupported() {
        return new UnsupportedOperationException(
                "stub code intended to use only in compilation");
    }
}
    
risposta data 03.04.2012 - 13:36
fonte