Applicazioni Ruby On Rails che non utilizzano database

Posted on Mon 26 May 2008 in Linux, Programmazione, Ruby, Ruby on Rails • Tagged with activerecord, errore, MySQL, ror, Ruby, Ruby on Rails

Se a qualcuno fosse capitato di recente di creare una semplice applicazione "Hello World" utilizzando il framework Ruby on Rails, avrà notato che in fase di esecuzione si ottiene un errore di questo tipo:

Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

Perchè un errore relativo a MySQL in un'applicazione che stampa semplicemente una stringa di testo? Nelle nuove versioni di RoR vengono caricati per default i moduli ActiveRecord, ActiveResource e ActionMailer. ActiveRecord in particolare si aspetta di trovare (per le impostazioni di default) un database MySQL funzionante.

Per evitare questo errore è sufficiente decommentare una riga all'interno di environment.rb che si trova in $PATH_APPLICAZIONE/config/environment.rb:

# Skip frameworks you're not going to use (only works if using vendor/rails).  
# To use Rails without a database, you must remove the Active Record framework  
config.frameworks -= [ :active_record, :active_resource, :action_mailer ]

Fonte: http://www.swards.net/2008/02/ruby-on-rails-application-with-no.html


MySQL: quando si deve pagare la licenza?

Posted on Tue 05 February 2008 in Linux, MySQL • Tagged with commerciale, licenza, MySQL, opensource, pagamento, programma, programmi, vendita

mysql_logo

Una delle domande che mi vengono fatte piu' di frequente è "MySQL si paga per uso commerciale?". La risposta non è delle piu' semplici.

Leggendo direttamente il sito web di MySQL, si possono trovare due pagine dedicate alle licenze: una per chi fa sviluppo di software opensource ed una per chi sviluppa software commerciale.

Dopo una lettura superficiale delle due pagine, potremmo essere tratti in inganno e pensare che sviluppando un'applicazione commerciale, si debba per forza acquistare una licenza commerciale di MySQL. Questo non è vero.

Tutto dipende dal tipo di librerie di interfacciamento che vogliamo utilizzare. MySQL mette a disposizione due modi per interfacciarsi al database: una propria API scritta in linguaggio C ed un socket in ascolto che riceve comandi tramite una normale connessione TCP/IP.

E' chiaro che scrivendo un'applicazione che va a fare l'include di (faccio un esempio) mysql.h poi io debba rilasciarne i sorgenti. La licenza GPL con il quale è stato rilasciato MySQL (ed anche le sue librerie client) dice chiaramente che quando si "linka" codice GPL ad altro codice, il risultato deve essere per forza rilasciato sotto licenza GPL.

La licenza GPL però non impone vincoli di utilizzo dell'applicazione stessa. Utilizzare quindi una libreria client che al posto delle API, usa il socket TCP/IP, ci permette di utilizzare MySQL anche da un'applicazione closed-source, senza bisogno di ottenere una licenza commerciale.

E' esattamente quello che fa la libreria di interfacciamento di Python oppure di PHP. Esse utilizzando il metodo di connessione al socket, senza fare l'include del codice di MySQL.

Riassumendo: se ci troviamo a scrivere un'applicazione commerciale che sappiamo non verrà distribuita insieme al codice sorgente, dobbiamo preoccuparci solo di utilizzare una libreria client che utilizzi il metodo di connessione tramite socket al database.

C'è infine da aggiungere una cosa: se si utilizza codice opensource per uso personale oppure interno alla propria azienda, senza distribuirlo in giro, la GPL non ci impone di rilasciare le modifiche che abbiamo fatto ai sorgenti GPL che stiamo utilizzando.

Il caso piu' lampante è quello di Google: essi utilizzano tonnellate di codice GPL, però non distribuiscono un programma, offrono un servizio. Questo gli permette di non dover rendere pubbliche le modifiche fatte al codice originale.

Credits: questo articolo è stato possibile in gran parte grazie all'aiuto ed ai consigli di Giovanni Bajo (che pur chiedendomi di specificare che non è un avvocato e che quindi potrebbe anche sbagliarsi, ha senz'altro fatto un ottimo lavoro) .