ANDREA ANTONIAZZA PROGRAMMARE AI TEMPI DEL DIRITTO LA TUTELA GIURIDICA DEI PROGRAMMI PER ELABORATORE IN EUROPA E NEGLI STATI UNITI D AMERICA
Andrea Antoniazza, Programmare ai tempi del diritto Copyright 2014 Tangram Edizioni Scientifiche Gruppo Editoriale Tangram Srl Via Verdi, 9/A 38122 Trento www.edizioni-tangram.it info@edizioni-tangram.it Prima edizione: febbraio 2009 UNI Service Seconda edizione: ottobre 2014 Printed in EU ISBN 978-88-6458-123-1
Glossario 7 1 Nozioni Generali 13 1.1 Storia dell Informatica (Cenni) 16 2 La tutela dei programmi per elaboratore in base alla disciplina del diritto d autore 33 2.1 La tutela del software prima del recepimento della dir. 91/250/CEE 33 2.2 Il recepimento della direttiva 91/250/CEE attraverso il D. Lgs. 29 dicembre 1992 n. 518 e il successivo D. Lgs. n. 68 del 2003 58 2.3 Soggetti del diritto, oggetto della tutela, contenuto del diritto 86 3 La tutela dei programmi per elaboratore in base alla disciplina brevettuale 99 3.1 La tutela brevettuale dei programmi per elaboratore negli Stati Uniti d America e l influenza della dottrina tedesca 99 3.2 La tutela brevettuale dei programmi per elaboratore in Francia e la Convenzione sul brevetto europeo (CBE) 117 3.3 La tutela brevettuale dei programmi per elaboratore in Italia 129 3.4 La giurisprudenza dell ufficio europeo dei brevetti e la proposta di direttiva europea relativa alla brevettabilità delle invenzioni attuate per mezzo di elaboratori elettronici 142 Bibliografia 155
GLOSSARIO Algoritmo: insieme di regole che consentono di risolvere un dato problema in tempo finito. E' importante distinguere un algoritmo da un programma: mentre un algoritmo è il procedimento da seguire per risolvere un problema a prescindere dal linguaggio utilizzato, un programma consiste nella descrizione di un algoritmo in uno specifico linguaggio di programmazione. Per esempio, se il problema è costituito dal calcolo dell'area di un triangolo, l'algoritmo per risolvere tale problema stabilisce che occorre moltiplicare la misura della base del triangolo per la relativa altezza e dividere il risultato per due. Un programma derivato da questo algoritmo è la descrizione di questi calcoli in un linguaggio di programmazione, come ad esempio il Pascal. Copia di backup: copia di un programma o di un file fatta dall'utente al fine di conservarne un esemplare integro utilizzabile nel caso in cui il file venga danneggiato o il programma risulti inoperativo. Decompilazione: operazione di reverse engineering diretta a ricostruire, a partire da un programma in forma eseguibile o oggetto, il programma stesso in forma di sorgente. Esecuzione di un programma: attività con la quale un elaboratore esegue una dopo l'altra le istruzioni di un programma per produrre i risultati per cui è stato progettato. Firmware: livello di astrazione dell'architettura di un elaboratore che si pone tra l'hardware e il software; essenzialmente è costituito da programmi le cui istruzioni sono codificate nei circuiti hardware. General purpose: termine utilizzato per indicare l'uso non predeterminato di un elaboratore. Un computer general purpose è un computer progettato per poter potenzialmente svolgere, con l'opportuno software, qualsiasi compito realizzabile da una macchina. Al contrario, un computer dedicato è un computer progettato per svolgere uno specifico compito. Hardware: insieme dei componenti elettronici che costituiscono la struttura fisica di un elaboratore. Input: insieme dei dati a partire dai quali un programma effettua le proprie elaborazioni per produrre un risultato (output). 7
Interfaccia: dispositivo o sistema interposto fra altri due dispositivi o sistemi al fine di consentirne l'interazione; per estensione indica i programmi o le parti di programma e le relative regole operative destinati a consentire l'interazione fra programmi e sistemi diversi. Interoperabilità: capacità di due dispositivi e, per estensione, di due programmi o parti di programma di operare in rapporto di cooperazione, soprattutto per quanto riguarda lo scambio di dati di ingresso e/o di uscita. Linguaggio di programmazione: linguaggio artificiale costituito da un insieme di termini (istruzioni e costrutti) e da ben definite regole sintattiche e semantiche che consentono ad un essere umano di comunicare con un elaboratore tramite la realizzazione di programmi. E' possibile distinguere linguaggi di programmazione di vari livelli a seconda di quanto siano vicini al modo di comunicare prettamente umano; quindi un linguaggio di programmazione ad alto livello è un linguaggio molto vicino al linguaggio umano (linguaggio naturale), mentre un linguaggio di programmazione di basso livello è un linguaggio le cui regole sono molto lontane dal linguaggio umano ma molto vicine alla codifica direttamente interpretabile dall'elaboratore (linguaggio macchina). Esempi di linguaggi di programmazione di alto livello sono il Pascal, il COBOL, l'ada; un esempio di linguaggio di programmazione di medio livello è il C, mentre i linguaggi di programmazione di basso livello sono i vari Assembler le cui regole sono dipendenti dal particolare calcolatore. Linguaggio macchina: linguaggio di programmazione costituito da codici direttamente interpretabili ed eseguibili da parte dell'elaboratore senza necessità di alcuna traduzione. Macchina virtuale: astrazione generata da un software che consente di considerare l'insieme formato da uno specifico programma e da un elaboratore general purpose come se fosse un elaboratore dedicato, cioè un elaboratore progettato per uno specifico scopo. Multimedialità: Insieme delle tecniche per la gestione integrata delle informazioni di natura differente (testo, video, immagini, audio, ecc.). Output: insieme dei risultati derivati dall'elaborazione dei dati di input da parte di un programma. 8
Pacchetto applicativo: gruppi di programmi preparati per risolvere un determinato insieme di problemi dell'utente medio, in contrapposizione ai programmi personalizzati, realizzati sulle specifiche richieste di un utente. Package: vedi Pacchetto applicativo. Programma: sequenza di istruzioni in un dato linguaggio di programmazione che descrive un algoritmo per la soluzione di un problema da parte di un elaboratore. Programma eseguibile: programma destinato direttamente all'esecuzione da parte dell'elaboratore in quanto costituito da istruzioni in linguaggio macchina, cioè sequenze di codici interpretabili direttamente dall'elaboratore. Generalmente un programma eseguibile è il risultato della traduzione di un programma sorgente effettuata automaticamente da un particolare software detto compilatore. Programma oggetto: forma impropria ma comune per indicare un programma eseguibile. Programma sorgente: programma scritto in un linguaggio di alto o medio livello che necessita di una fase di traduzione (interpretazione o compilazione) per poter essere eseguito dall'elaboratore. Reverse engineering: denominazione generale di tutte le attività che, a partire da un determinato prodotto (compreso un programma per elaboratore), mirano ad identificare i principi, le leggi e le idee poste alla base dello stesso. Viene di solito intrapreso al fine di riprodurre il prodotto, ovvero di poter sviluppare una variante o un perfezionamento dello stesso. Nel caso di programmi per elaboratore, le attività di reverse engineering comprendono di solito anche attività di decompilazione. Sistema operativo: programma (o insieme di programmi) di base di un elaboratore che controlla le risorse fisiche (hardware) e logiche (strutture dati, software) regolando lo svolgimento delle operazioni elementari (caricamento dei programmi, ingresso dati, emissione dei risultati, gestione dell'hardware, ecc.) inerenti all'esecuzione di altri programmi applicativi o programmi utente. Software: insieme dei programmi che regolano il funzionamento di un elaboratore e l'elaborazione dei dati. Al contrario dell'hardware, costituito dagli elementi fisici che costituiscono l'elaboratore, il software è costituito da un 9
insieme di segnali binari memorizzati su supporti di varia natura (magnetici, ottici). Software applicativo: insieme dei programmi il cui compito è quello di risolvere specifici problemi dell'utente, come ad esempio l'elaborazione di dati contabili, l'elaborazione di immagini, ecc. Il software applicativo ha bisogno della presenza del software di base per poter essere operativo. Software di base: insieme dei programmi il cui compito è quello di gestire l'hardware e rendere operativo ed efficiente un elaboratore. Tipico software di base è il sistema operativo, senza il quale un elaboratore risulterebbe inutilizzabile. Software house: azienda che sviluppa software su commissione o per il mercato. 10
PROGRAMMARE AI TEMPI DEL DIRITTO LA TUTELA GIURIDICA DEI PROGRAMMI PER ELABORATORE IN EUROPA E NEGLI STATI UNITI D AMERICA
1 NOZIONI GENERALI Prima di affrontare le problematiche legate alla tutela giuridica del software è opportuno fornire alcune informazioni preliminari sia per chiarire concetti che, sebbene siano ormai divenuti di uso abbastanza comune, spesso vengono fraintesi o sono poco chiari, sia per fissare una terminologia che verrà utilizzata nel resto del presente lavoro. Con il termine software si individua, in via esemplificativa, l insieme delle istruzioni impartite agli elaboratori elettronici attraverso specifiche modalità e in un linguaggio ad essi comprensibile, al fine di ottenere l espletamento di determinate performance. In tale ottica, si suole rilevare che, nell ambito dei sistemi elaborativi, se l hardware costituisce la componente meccanica, la struttura rigida 1, il software si pone come il cuore pulsante, dal quale dira- 1 Un sistema di elaborazione, chiamato comunemente computer o elaboratore o calcolatore, è essenzialmente costituito da due componenti: l hardware e il software. L hardware costituisce la parte fisica dell elaboratore, cioè l insieme dei suoi componenti elettronici e meccanici. La struttura tipica di un computer prevede la presenza di un processore, una memoria e un insieme di unità periferiche. Il processore è il cuore dell elaboratore, è la componente elettronica in grado di eseguire le istruzioni: è come il motore per un automobile. La memoria contiene le informazioni che saranno elaborate dal processore; in particolare contiene le istruzioni che saranno eseguite dal processore (programmi) e i dati su cui lavoreranno i programmi stessi. Si possono distinguere due tipi di memoria: la memoria volatile e la memoria stabile. La memoria volatile o RAM (Random Access Memory) è in grado di contenere informazioni finché il computer è alimentato elettricamente; non appena il computer viene spento tutte le informazioni in essa contenute vengono perdute. Tuttavia le operazioni di accesso alle informazioni contenute nella RAM sono velocissime (generalmente dell ordine dei milionesimi di secondo). La memoria stabile, detta anche memoria di massa, è in grado di contenere informazioni anche se il computer non è attivo: essa è rappresentata dai supporti magnetici di memorizzazione come i floppy disk, gli hard disk, i nastri. Mentre la memoria volatile e quella stabile sono generalmente utilizzabili sia per leggere che scrivere dati, esiste anche un tipo di memoria utilizzabile soltanto per operazioni di lettura: questo tipo di memoria è detta ROM (Read Only Memory) e di solito contiene informazioni relative all hardware e programmi che interagiscono direttamente con l hardware (firmware). Infine le unità periferiche o dispositivi consentono al computer di comunicare con il mondo esterno sia per ricevere dati (unità o dispositivi di input) sia per inviare i risultati delle elaborazioni (unità o dispositivi di output). Esempi di dispositivi di input sono la tastiera, il mouse, lo scanner, mentre esempi di dispositivi di output sono il monitor, la stampante, il plotter. Esistono anche dispositivi di input/output, cioè che consentono al computer sia di ricevere dati che di inviarli all esterno, come ad esempio il modem. 13
mano gli input destinati a governare il funzionamento del computer. Le istruzioni del software possono essere intese a fornire agli elaboratori il bagaglio di nozioni e di dati loro necessari per funzionare, ovvero a consentire al computer di compiere particolari operazioni, dirette al perseguimento di determinati risultati. Nella prima ipotesi si può dire che il software alfabetizzi la macchina, mettendola in condizione di recepire, comprendere ed eseguire ulteriori istruzioni: si parla, in tal senso, di software di base o operativo, e cioè di una componente imprescindibile di ogni sistema informatico, che risiede stabilmente nella memoria del computer. Nella seconda ipotesi, invece, il software tende ad orientare l azione dell elaboratore verso obiettivi mirati: si pensi, ad esempio, ai programmi relativi alla gestione della contabilità. Il software, nella fattispecie, si definisce applicativo. In particolare, il software di base è costituito dall insieme dei programmi il cui scopo è quello di rendere operativo il computer, cioè di metterlo in grado di eseguire programmi per risolvere i problemi dell utente. Tipici esempi di software di base sono i sistemi operativi, insiemi di programmi che gestiscono l hardware e forniscono un supporto per l esecuzione di programmi che risolvono particolari problemi dell utente. Il software di base è strettamente legato alle caratteristiche dell hardware di ciascun computer per cui non è necessario che l utente ne conosca i dettagli tecnici. Tra i sistemi operativi più diffusi ricordiamo il DOS, Unix, Windows, OS/2. Il software applicativo è costituito dall insieme dei programmi che risolvono determinati problemi dell utente. Esempi di software applicativi sono i programmi di contabilità, i programmi di videoscrittura, i programmi di elaborazione grafica, ecc. È essenziale che il software applicativo interagisca con il software di base per poter funzionare. Esso inoltre può essere suddiviso in software personalizzato, cioè realizzato appositamente in base alle richieste di un singolo utente, e software standard o package, cioè software realizzato per risolvere una gamma di problemi abbastanza comuni e pertanto diretto a più utenti. Sia il software di base che il software applicativo per poter essere eseguiti devono essere caricati nella RAM (Random access memory 2 ). Generalmente 2 La RAM, acronimo di Random Access Memory, è il supporto di memoria su cui è possibile leggere e scrivere informazioni con un accesso casuale, ovvero senza dover rispettare un determinato ordine, come ad esempio avviene per un nastro magnetico. Una caratteristica distintiva della RAM consiste nella possibilità di leggere da e in memoria, in modo semplice e rapido. Termine correntemente attribuito a supporti di memoria a stato solido facenti parte dell hardware installato su un computer. L uso della memoria RAM è comune a tutte le archittetture hardware, sia monoprocessore che multiprocessore e costituisce la memoria primaria dell elaboratore. A seconda dall architettura usata, la CPU può accedere direttamen- 14