Come violare un brevetto software con 2 linee di codice

English

        while ping -c1 $IP > /dev/null; do
        sleep 1; done; echo "Connessione Terminata"

Questo minuscolo programma viola un brevetto software: EP 0850441: Method of Monitoring a Computer System.

Come può essere?

Per decidere se qualcosa è coperto (“monopolizzato”) da un brevetto è necessario leggere le rivendicazioni. (In effetti le rivendicazioni sono l'unica parte interessante dei brevetti, perché indicano quello che il brevetto ci proibisce. Il resto – quello che viene chiamata descrizione dell' “invenzione” – dev'essere presente per consentire l'attribuzione del brevetto, ma non ti aiuta a provare legalmente che quanto hai fatto sia diverso da quello che dice la descrizione, sempre che dica qualcosa. Ci sono le rivendicazioni, quello conta, il resto no.)

La Rivendicazione 1 di EP 0850441 dice questo (testo originale):

A method of monitoring a computer system (10), comprising a plurality of client computers (12, 13, 14), at least one server computer (15), and a wirebased or wireless network (11), by means of which each unit in the system is operatively connected to at least one other unit in the system, characterized by the steps of continuously collecting information about at least some of the client computers (12, 13, 14) in each respective client computer; supplying the collected client computer information to an alarm unit comprised in the system (10) with the network (11) acting as information carrier and in accordance with the same network protocol(s) that is/are normally used in the computer system (10); comparing in the alarm unit the client computer information received with previously received client computer information; and generating an alarm signal by means of the alarm unit, if the difference between the client computer information received and the previously received client computer information is larger than a predetermined amount of information.

Per capire come interpretare il testo, facciamo un respiro profondo ed analizziamo il testo, passo dopo passo.

Un metodo per monitorare un sistema computer (10), includente una pluralità di computer client (12, 13, 14), almeno un computer server (15), ed una rete su filo o senza filo (11), per mezzo della quale ogni unità del sistema è operativamente connessa ad almeno un'altra unità nel sistema, …

Questo vuol dire: Una rete con almeno 2 computers.

Nota quante parole (“rete su filo”, “unità”, “operativamente connessa” …) non contengano alcuna informazione, ma diano un suono 'tecnico' alla rivendicazione. Per ottenere il brevetto, infatti, il software deve essere “tecnico” – che vuol proprio dire che queste parole devono essere presenti nella richiesta di brevetto.

Ma continuiamo:

caratterizzata dalla raccolta continua di informazioni su di almeno qualcuno dei computer client (12, 13, 15) in ciascun computer client; …

Ogni computer raccoglie informazioni su se stesso. E' quello che fa continuamente comunque, quindi possiamo scordare questa parte.

… fornendo le informazioni raccolte sui computer client ad una unità di allarme contenuta nel sistema (10) con la rete (11) funzionante da trasporto d'informazione ed in conformità con lo/gli stesso/i protocollo/i di rete che è/sono normalmente usato/i nel sistema di computer (10); …

Non solo abbiamo una rete, ma la usiamo anche. E addirittura la usiamo per lo scopo per cui fu creata: trasferire dati.
In questo caso i dati sono informazioni sul computer stesso. Bene – perché no? Tutti lo fanno continuamente.

… confrontando nell'unità di allarme l'informazione sul computer client ricevuta con l'informazione sul computer client ricevuta in precedenza; e generando un segnale di allarme attraverso l'unità di allarme, se la differenza tra l'informazione sul computer client ricevuta e l'informazione sul computer client ricevuta in precedenza è maggiore di una predeterminata quantità d'informazione.

Ecco la parte interessante: un computer (l' “unità di allarme”) genera un allarme quando rileva che qualcosa è cambiato. Eureka!

Quindi la rivendicazione 1 di EP 0850441 si può riassumere così:

Un computer controlla, usando la rete, se qualche proprietà di un altro computer è cambiata; se così genera un allarme.

Ora guardiamo il nostro piccolo programma. Cosa fa?

        while ping -c1 $IP > /dev/null; do
        sleep 1; done; echo "Connessione Terminata"

Per un programmatore che vede programmi del genere tutto il giorno è chiaro che “$IP” è l'indirizzo di un computer nella rete. Possiamo lanciare questo programma su un computer per fare qualcosa con un'altro computer.

Cosa fa il nostro programma con l'altro computer? “ping -c1 $IP” vuol dire: manda una richiesta all'altro computer ed aspetta la sua risposta. E' per questo che è stato creato il comando ping: chiedere ad un computer della rete: “Ci sei?”

Finché (“while”) la risposta è “si”, il nostro computer si mette in attesa (“sleep”) per 1 secondo, e poi ripete la domanda. (“> /dev/null” significa solo “fallo piano, non fare rumore!” e può essere tralasciata.)

Se un ping fallisce – non otteniamo una risposta alla nostra domanda “Ci sei?” – raggiungiamo la parte sulla destra di “done”. Questa, “echo "Connessione Terminata"”, è il nostro allarme: il comando “echo” si usa per scrivere sullo schermo il messaggio “Connessione Terminata”.

Quindi, di nuovo, che stiamo facendo?

Pertanto stiamo violando la rivendicazione 1 del brevetto EP 0850441, rilasciato dall'EPO.

Per favore non lanciare questo programma. E non scrivere nulla di simile per te stesso. Ancora meglio: non toccare nemmeno un computer. Tutto quello che scrivi può violare uno – o molti – dei 30.000 brevetti software già rilasciati dall'EPO. Dato che non puoi leggerli tutti, sono troppi, come puoi saperlo?

Con i brevetti software, l'unico modo per essere legalmente al sicuro è smettere di usare o scrivere programmi per computer.