1. La nozione giuridica del software
In termini generali, il programma per elaboratore (software) rappresenta insieme all’elaboratore elettronico (hardware), la parte costitutiva del computer:4 questi due elementi possono essere acquisiti separatamente sul mercato ma, inevitabilmente, dovranno integrarsi nel momento in cui si mette in funzione il «sistema informatico»,5 ossia quel sistema «destinato a ricevere dati e informazioni (c.d. inputs) per elaborarli secondo un predeterminato corpo di istruzioni (c.d. programma) e produrre un certo risultato finale (c.d. output) o informazione elaborata».6
Nello specifico l’elaboratore elettronico costituisce «la parte meccanica, ossia il complesso di circuiti e unità che lo compongono», quindi le parti fisicamente tangibili, che «svolgono specifiche funzioni nel trattamento e nella trasmissione delle informazioni».7 Fanno parte dello stesso anche le cosiddette periferiche, quali ad esempio lo schermo, le tastiere e le stampanti.
Il software invece costituisce la «componente logica», ossia ciò che consente al sistema informatico di poter svolgere la sua funzione di «elaborazione dei dati»:8 si costituisce pertanto come insieme di applicativi che, una volta installati nell’elaboratore elettronico, consentono all’utente di operare,9 e si distingue in due tipologie:: il programma «di base» (o «sistema operativo») e il programma «applicativo» (o software dell’utente).
Il «sistema operativo» si occupa di gestire tutte le risorse dell’elaboratore elettronico, di fornire una piattaforma comune, di attivare e di controllare tutte le applicazioni: esso una volta caricato, si pone in attesa di ricevere gli opportuni comandi da parte dell’utente. Quando viene inviato un comando, il sistema verifica la sua natura e, se corretto, lo esegue o altrimenti ne segnala l’errore e si rimette in attesa. In caso di fallimento, a seguito dell’esecuzione di un’operazione, il sistema operativo informa l’utente con un «messaggio di diagnostica».10 A seconda del sistema operativo utilizzato, l’utente può scegliere tra due modalità per ottenere risultati: quelle «“a comandi”, ossia una richiesta di prestazione attraverso un comando, ovverossia una frase in un linguaggio artificiale composto da parole chiave, seguita da opzioni e parametri (ad es. DOS)»; oppure la modalità «a menù ad icone» secondo la quale «le prestazioni disponibili sono presentate in finestre video che elencano menù di funzioni o maschere di dialogo (ad es. Windows)».11
Il programma «applicativo» invece è costituito da software che svolgono «una funzione per l’utente finale e che trasformano il computer in una macchina per svolgere un compito specifico».12 I più diffusi sono gli elaboratori di testo, i fogli elettronici di calcolo, i sistemi di archiviazione o database, le soluzioni di grafica.
Il programma per elaboratore dunque è quell’insieme di istruzioni informatiche che costituiscono il c.d. «codice informatico», il quale si compone di un «codice sorgente» e di un relativo «codice oggetto».13 Per «codice sorgente» si intende la «sequenza di informazioni e di istruzioni logiche (semantiche e sintattiche), scritte in un determinato linguaggio di programmazione (C, Visual Basic, Java)»,14 le quali, considerate nel loro complesso, costituiscono il software e ne determinano l’operatività. Difatti, afferma infatti che questo «codice, affinché sia eseguibile dall’elaboratore, deve essere tradotto in “codice oggetto” (o “codice macchina”)»15 sotto forma di cifre binarie (binary digit, c.d bit) per mezzo di un compilatore, il quale può essere elaborato dall’Unità di Elaborazione Centrale.16 Quando un software viene scritto, l’autore ne elabora il codice sorgente e «ogni volta che si rende necessario apportare delle modifiche, delle integrazioni o degli aggiornamenti al programma stesso, è proprio sul codice sorgente che si deve operare».17
Il procedimento attraverso il quale il codice sorgente (intellegibile all’uomo), viene tradotto in codice oggetto (intellegibile solamente all’elaboratore), viene definito processo di «compilazione», ossia «un’operazione automatizzata, che non richiede alcun apporto creativo o autoriale, svolta da appositi programmi per elaboratore, denominati “compilatori”»,18 e qualificata come «un’operazione essenzialmente unidirezionale». Questo significa che una volta che essa sia stata eseguita, non è possibile risalire dal codice oggetto verso il codice sorgente nella sua formulazione originaria. Il compilatore infatti nel processo di traduzione dal codice sorgente al codice oggetto «ne ottimizza la forma, rimuovendo diverse informazioni assegnate dal programmatore ai moduli e alle strutture di dati inutili ai fini dell’interpretazione del programma operata dalla macchina».19
Per ottenere questo scopo occorre porre in essere una complessa attività di analisi e decodificazione del codice binario,20 definita attività di «decompilazione».21
La conoscenza del codice sorgente permette quindi di comprendere l’intera architettura del programma, la logica posta alla base della sua realizzazione ed inoltre permette di operare qualunque intervento modificativo o strutturale su di esso, «ampliandone la funzionalità o conseguendone una interoperabilità22 od integrazione con altri programmi».23
È proprio sulla necessità di garantire l’interoperabilità che si esprime l’art.64-quater della Legge sul Diritto d’Autore (Legge 22 aprile 1941, n.633) al primo comma, lett b), secondo cui, qualora il legittimo licenziatario subisca un problema di interoperabilità, può “senza l’autorizzazione del titolare dei diritti, e a condizione che quelle stesse informazioni non siano diversamente disponibili», procedere alla decompilazione e di conseguenza «pervenire a regole base, idee e principi che formassero la struttura di base del programma».24 Affinché l’attività di decompilazione possa essere considerata lecita occorre che siano soddisfatte le seguenti condizioni: a) che essa «sia eseguita dal licenziatario, o da altri che abbia il diritto di usare una copia del programma, oppure da chi è autorizzato a tal fine»; b) che «le informazioni necessarie per conseguire l’interoperabilità non siano facilmente accessibili; c) ed infine che essa sia limitata «alle sole parti del programma originale necessarie per poter conseguire l’interoperabilità» (art.64-quater l.d.a.). A tal riguardo secondo la dottrina25 «l’interesse dell’utente a disporre del codice sorgente e della documentazione relativa confligge radicalmente con l’interesse del proprietario dei diritti di privativa26 sul programma a mantenere segreto il codice sorgente. Disponendo di quest’ultimo, infatti, l’utente è in grado non soltanto di correggere e modificare il programma, ma anche, una volta compresone il funzionamento, di copiarlo con relativa facilità».
In virtù di queste ragioni il codice sorgente di un programma per elaboratore è difficile che venga reso disponibile, infatti nei tradizionali modelli contrattuali adottati per la concessione in uso del programma, il titolare dei diritti si riserva ogni facoltà di accesso al codice vietando l’attività di decompilazione. In questo modo perciò non si consente mai all’utente di ottenere la disponibilità del codice sorgente, quale unico elemento che consente ogni possibile intervento alla struttura del programma.
La definizione del concetto di programma per elaboratore, non è priva di ambiguità sia per le sue caratteristiche tecniche in continua evoluzione sia perché strumentale al suo inquadramento giuridico. Una prima definizione fu espressa dall’Organizzazione Mondiale della Proprietà Intellettuale (OMPI)27 durante la riunione del Comitato di Esperti tenutasi a Canberra dal 2 al 6 aprile del 1984, ove il software fu qualificato come «espressione di un insieme organizzato e strutturato di istruzioni in qualsiasi forma o su qualunque supporto capace, direttamente o indirettamente, di far eseguire o far ottenere una funzione o un compito o far ottenere un risultato particolare per mezzo di un sistema di elaborazione elettronica dell’informazione ».28
Questa definizione ampia e generale si applica alle varie forme di programma per elaboratore e si colloca con rilevanza nell’ambito della evoluzione tecnologica, costituendo pertanto il punto di partenza per definire l’esatto inquadramento giuridico del software. In un contesto più strettamente giuridico invece essa viene sintetizzata dalla dottrina come «un complesso di tutte le istruzioni necessarie a far eseguire al computer un determinato lavoro».29 Da queste definizioni si evince l’appartenenza del programma per elaboratore ai beni giuridici immateriali, e in particolare alla categoria delle creazioni intellettuali previste dal nostro ordinamento come «opere dell’ingegno» (ossia idee creative nel campo culturale) e come «invenzioni industriali» (ossia idee creative nel campo della tecnica).
Il carattere «creativo», che si esprime attraverso il modo con cui «un soggetto (l’autore) costruisce, organizza e realizza l’opera»,30 è un requisito fondamentale dell’opera dell’ingegno, come disciplina l’art.1 della Legge sul Diritto d’autore.31 Nella disposizione in esame, al primo comma, si afferma che il nostro ordinamento prevede tutela per tutte «le opere dell’ingegno di carattere creativo», tra cui si garantisce la protezione anche per i programmi per elaboratore, per cui è essenziale riconoscere una creazione intellettuale dell’autore, in relazione a «determinate scelte stilistiche e di organizzazione»,32 come personale e autonoma. Infatti il concetto di creativ...