Mi ha fatto molto riflettere un recente pezzo di un’antica e prestigiosa rivista dell’IT, Dr. Dobb’s, sulla querelle che vede impegnati Oracle e Google in merito a Java.
Riguardo ai (pochi, in verità) pezzi di codice Java che sono finiti nel sorgente di Dalvik, credo che non ci sia tanto da aggiungere: copiare codice è reato, perché giustamente le proprietà intellettuali sono tutelate dalla legge.
Da programmatore un appunto sento ugualmente di farlo, perché penso sia capitato un po’ a tutti quelli che sviluppano di scrivere lo stesso codice per lo stesso sottoproblema da risolvere, magari usando le stesse variabili, la stessa indentazione, eventualmente anche gli stessi commenti.
Sembrano eventi poco probabili, che diminuiscono ancor di più le possibilità se concatenati, ma ricordo che qui non parliamo di estrarre numeri al lotto. Lo sviluppo di codice non ha nulla a che fare col caso; tutt’altro.
Il fatto che possano esistere coincidenze come quelle lo trovo perfettamente naturale, perché ogni programmatore sviluppa una precisa forma mentis, un suo stile nel risolvere i problemi, e una propria “calligrafia”, che rappresentano una sorta di “marchio di fabbrica” o, se vogliamo dirla diversamente, “impronta digitale”.
Con l’esperienza tutto ciò può cambiare ovviamente e, anzi, capita a volte di rivedere pezzi di codice di qualche vecchio progetto e non riconoscervisi oppure… inorridire.
Perciò il fatto di che siano state rilevate le stesse righe di codice Java anche in Dalvik non stupisce più di tanto, considerato che è stata la stessa persona ad averle scritte, prima in Sun, e poi in Google.
Questo non può, però, essere preso a pretesto per giustificare la copia a mani basse del lavoro svolto per la precedente azienda, anche se è oggettivamente difficile definire una metrica per stabilire quando si può parlare di plagio, e quando no.
Ancora più grosso è il dilemma riguardo alle API, anch’esse oggetto del contenzioso scatenato da Oracle e le cui implicazioni avrebbero una portata vastissima e sconvolgente per il mondo dell’IT.
Per Oracle si tratta di salire un gradino più in alto riguardo alla proprietà intellettuale, a un livello di astrazione più elevato. Non parliamo più, infatti, del mero codice che può essere copiato o meno, ma dell’interfaccia, del “contratto” che viene “stipulato” fra chi realizza un’API e chi la deve poi utilizzare.
E’ legittimo che tale interfaccia ricada nelle tutele di cui sopra? Personalmente da programmatore non mi trovo favorevole, per alcuni semplici motivi.
Il primo è che le API rappresentano delle definizioni, delle convenzioni che bisogna adottare necessariamente per favorire l’interoperabilità, altrimenti non possibile.
Come faccio a stampare una stringa a video, se non so come si chiama l’API allo scopo, quali parametri prevede, e di che tipo sono? OK, almeno uno (e solo uno?) dovrebbe essere una stringa, ma… non è affatto scontato!
Una macchina virtuale, poi, è un ambiente molto chiuso e limitato, che non consente di smanettare più di tanto. Anche pensando di voler riscrivere da zero l’API di cui sopra, il problema si porrebbe lo stesso, perché è stato semplicemente rimandato a un livello di astrazione più basso.
Infatti servirebbero in ogni caso delle API, o appositi bytecode della virtual machine, per poter “comunicare con l’esterno” e permettere, quindi, di arrivare allo scopo ultimo.
Sembra una sequela di scatole cinesi da cui è difficile uscirne, ma le problematiche sollevate sono talmente delicate e fondamentali, che si arriva a questa sorta di paradossi irrisolvibili.
La seconda motivazione è che la descrizione di un’API non è necessariamente configurabile come codice vero e proprio, e quindi tutelabile dall’attuale normativa che riguarda il software.
Non parliamo di sorgenti copiati perché un’API può essere descritta in maniera diversa da come ha fatto Sun all’epoca. Si può cambiare lo stile, l’indentazione, i commenti, eventualmente anche il nome dei parametri (visto che in Java sono tutti posizionali), ma il succo non si può cambiare.
Il nome dell’API non può certo essere messo in discussione, come pure il tipo dei parametri: devono essere per forza quelli, altrimenti verrebbe meno l’elemento principale, cioè la definizione di una rigorosa interfaccia che consenta agli sviluppatori di utilizzarla, pena bacchettate sulle mani anche da parte del compilatore (o del linker, se vogliamo affrontare un discorso più generale).
Quindi si può pensare di fornire una descrizione diversa del “contratto”, ma certi punti sono assolutamente irrinunciabili; non si possono toccare.
Questo è il punto di vista di un programmatore, ma ce ne potrebbe essere uno completamente diverso, intendendo, con ciò, tralasciare l’aspetto meramente di sviluppo, ripensando, invece, quella di Sun come un’opera.
Immaginiamo nome e tipo di parametri come le componenti cromatiche utilizzate per realizzare un’API (un ben preciso colore), e le API come le pennellate che vanno, infine, a comporre un quadro.
E’ legittimo clonare un’opera d’arte? Correggetemi se sbaglio, ma mi sembra che la risposta sia negativa, mentre è perfettamente lecito clonare un preciso colore (sebbene in Italia il “rosso Ferrari” goda di un trattamento privilegiato).
Si potrebbe, quindi, pensare che il framework sviluppato da Sun possa godere di uno status diverso da quello di una normale applicazione, e che quindi Oracle possa rivendicare delle tutele che vanno oltre il mero codice.
Quanto sarebbe utile una presa di posizione del genere nel mondo dell’IT? Credo che estendere alle interfacce, e ai framework in generale, tutele di questo tipo comporterebbe non poche rogne in un mondo che ormai è fortemente dominato dal software… già scritto.
Da una parte se la tesi di Oracle può sembrare sensata (le API e il framework rappresentano il frutto del suo lavoro), dall’altra per i programmatori rappresenta un’autentica assurdità (senza “contratti” non si può realizzare il software).
Si tratta di una questione molto controversa, sulla quale personalmente trovo difficile prendere una posizione netta, perché cambia a seconda del punto di vista.
Voi cosa ne pensate?