GitHub Copilot: luci e ombre del nuovo sintetizzatore di codice

GitHub Copilot: luci e ombre del nuovo sintetizzatore di codice

Benvenuto su Input/Output: la blogletter in cui ogni martedì commento la notizia che mi ha più colpito del mondo tech.

Chiunque abbia mai provato a programmare qualcosa sa quanto il processo di scrittura del codice sia un lavoro riflessivo.
Il solo scrivere una semplice funzione che somma due numeri interi richiede di pensare a mille possibili casi. Che succede se mi viene passato un numero ed una lettera? E se mi viene passato un intero e un decimale? E se la somma supera il valore massimo gestito dal computer?

Sarebbe un sogno poter dire: "caro computer io voglio che questa funzione faccia esattamente questo. Pensaci tu e non mi scassare troppo!".

Questo sogno potrebbe realizzarsi grazie a GitHub Copilot.

GitHub Copilot è il nuovo sintetizzatore di codice frutto di un investimento da parte di Microsoft di 1 miliardo di dollari nel laboratorio di ricerca sull'intelligenza artificiale OpenAI.

I primi feedback da parte di chi ha avuto accesso alla Technical Preview di Copilot sono entusiasti. Grazie a potenti algoritmi di intelligenza artificiale, Copilot è in grado di capire il "come" il codice è utilizzato dallo sviluppatore determinando il contesto in cui si sta scrivendo per sintetizzare le parti di codice mancanti. E ci tengo a sottolineare la parola chiave "sintetizzare" visto che Copilot non si limita a suggerire porzioni di codice già visto ma è in grado di generare codice originale in modo autonomo.
Secondo i dati ufficiali l'intelligenza artificiale di Copilot sarebbe così avanzata che appena lo 0.1% dei suggerimenti conterrebbe porzioni del codice originale con cui è stata addestrata l'IA.

Ma come hanno fatto OpenAI e Microsoft ad addestrare Codex, l'algoritmo di intelligenza artificiale alla base di Copilot?
Microsoft è proprietaria della piattaforma GitHub e su GitHub sono caricati milioni di progetti open-source. Per cui è bastato accedere ai milioni di progetti presenti su GitHub per poter addestrare facilmente l'algoritmo di machine learning. E infatti è la stessa Microsoft ad ammetterlo direttamente sulla pagina ufficiale del progetto dove è possibile leggere:

It has been trained on a selection of English language and source code from publicly available sources, including code in public repositories on GitHub.

Ma è corretta una cosa del genere? #

I progetti open-source sono per definizione leggibili da chiunque ma non per questo possono essere utilizzati in ogni dove. Ci sono tutta una serie di licenze che tutelano il codice aperto definendo con precisione come, dove e a quali condizioni possa essere usato.
Secondo gli autori di Copilot il codice sintetizzato dall'intelligenza artificiale "appartiene allo sviluppatore" che ne è responsabile senza dover citare nessun altro autore.
Ma la verità è che Copilot non sembra generare sempre codice originale. I Tweet qui sotto dimostrano come nella realtà Copilot abbia fornito come suggerimento il codice di Quake o come abbia generato una pagina "about" includendo i link di uno sviluppatore che aveva caricato il suo sito su GitHub.

Chiaramente tutte queste situazioni possono configurarsi come delle violazioni della licenza del software.
Ad esempio il codice di Quake suggerito da Copilot è protetto dalla licenza GPL. E tutti i codici che utilizzano la licenza GPL possono essere utilizzati liberamente alla condizione il progetto che li include venga rilasciato utilizzando la medesima licenza.
Per cui, applicando la definizione fornita nelle pagine del progetto per cui che il codice suggerito da Copilot è originale e quindi non soggetto ad alcuna licenza, si può vedere il funzionamento del tool come un riciclatore di codice che consente l'utilizzo di codice open-source in software proprietario senza alcuna limitazione.
Infatti Copilot può suggerire codice identico o estremamente simile al codice open-source protetto da licenza (tipo GPL) affermando che non vi sia alcun obbligo da seguire.

A mio parere poi, oltre alla problematiche legate alle licenze, c'è un problema etico su come è stato addestrato di Copilot. Se io come sviluppatore ho investito il mio tempo libero per realizzare un contributo ad un progetto open-source a cui tengo è giusto che un'azienda sfrutti il mio lavoro per creare un software commerciale closed-source?

Naturalmente, il fatto che i software commerciali sfruttino in ampia maniera montagne di codice open-source è una cosa ben nota.
E lo dimostra il fatto che un bug (heartbleed) in un progetto mantenuto da solo due persone come OpenSSL abbia reso vulnerabili colossi miliardari come Amazon, Google e Stripe.

Tutti i grandi progetti di oggi si basano su librerie mantenute da singoli individui
Molti dei grandi progetti di oggi sono imponenti castelli costruiti su basi di argilla - Credits xkcd.com

Però il fatto che Copilot prenda il codice open-source senza riconoscere i giusti crediti a chi ci ha lavorato e senza che i mantainer dei progetti fossero stati avverti lo trovo ingiusto. Soprattutto visto che Copilot avrà anche un piano a pagamento.

E tu che ne pensi? Credi che sia giusto l'approccio seguito dagli autori di Copilot?


Grazie per aver letto questo articolo della rubrica Input/Output.
Ad ogni input, tipicamente, corrisponde un output. E solo esponendosi ad input diversi si possono tirare fuori idee non convenzionali. Proprio per questo ogni martedì prendo in input una curiosità legata al mondo tecnologico per ragionare su nuove idee da tirare fuori in output.