Archivo para 17 mayo 2008

Licencia GPL vs. aplicaciones web. AGPL

Esta nueva entrada en el blog proviene de un mensaje que he mandado a la lista de correo de Sugus. Lo publico en mi blog porque quiero tener una URL que pasar a la gente cuando quiera que conozcan el problema que tiene licenciar bajo GPL software en red, y cómo la licencia Affero GPL lo soluciona.

Hay cierto desconocimiento sobre los términos de la GPL en las aplicaciones web. Creo que es importante para aquellos interesados en el software libre conocer realmente las implicaciones de la licencia libre por excelencia, la GPL.

La GPL y todas las licencias libres han de cumplir las cuatro libertades del software: poder ejecutar el programa, acceder al código, modificarlo y redistribuirlo. Pero estas libertades sólo las tienen los usuarios del software.

Edulix 2010

Si yo soy un usuario de MS Windows y quiero ejecutar el sistema operativo Edulix 2010, puede que tenga que pagar para ello. Si yo como creador del software elijo un modelo de negocio en el que sólo los usuarios
legítimos, aquellos que tienen binarios de Edulix 2010, puedan acceder al código cuando me lo pidan por email, eso lo permite la GPL. Y si elijo también que tengan que pagar 35€ para que yo les ofrezca una copia de Edulix 2010, la GPL también lo permite. Libre != Gratis.

Claro que.. cualquiera podría pagar 35€ y luego redistribuir mi software de manera gratuita.

Google

Ahora pongamos como ejemplo el caso del código del buscador Google. Nadie que no sea de Google tiene acceso a él, e incluso dentro de la propia compañía casi seguro que guardan cierto control sobre su código para que no haya filtraciones.

Resulta que los únicos que tienen acceso a los binarios o código de las páginas web de Google son los propios empleados de Google, y por tanto, son los únicos “usuarios legítimos”, por llamarlo de alguna manera. De esa forma, si el código fuese GPL y sus usuarios decidieran no redistribuir el código a
nadie, seguiría siendo técnicamente software libre, igual que cuando te bajas un programa que sea software libre, lo modificas y no lo redistribuyes.  Sigues cumpliendo con los términos de la GPL.

Eso es lo chocante: pese a que millones de personas acceden a la página web de Google todos los días, su código podría estar bajo licencia GPL y sin embargo todos éstos millones de personas no tendrían derecho legítimo a acceder al código fuente. Desde mi punto de vista, es un fallo de la GPL.

Affero GPL (AGPL)

La licencia AGPL resuelve precisamente éste problema. Es una copia calcada de la GPL, pero añade una cláusula (sección 2(d)) que añade la obligación de distribuir el software si éste se ejecuta para ofrecer servicios a través de una red de ordenadores.

En el preámbulo de la propia licencia lo explican claramente (traduzco del inglés):

La Licencia Pública General GNU permite crear una versión modificada y dar acceso público a ella en un servidor sin tener que liberar el código fuente al público.

La Licencia Pública General de Affero GNU está diseñada específicamente para asegurarse de que, en esos casos, el código fuente modificado esté disponible a la comunidad.

Como véis no me estoy inventando nada. Eso lo dice la licencia oficial de la FSF. Ah por cierto también explican que la GPL v3 en principio iba a contener la famosa cláusula 2(d), es decir que iba a ser igual que la AGPL… pero que algunas empresas [1] no les gustaba la idea y por tanto la quitaron
de la versión final de la GPL v3. (y digo yo: vendidos!)

Lujury, conclusiones

Así que… Anarb, lo siento pero técnicamente Lujury podría perfectamente ser libre, GPL. Algunos me llamarán taliban por esto pero.. pero desde mi punto de vista la GPL y demás licencias que no tienen en cuenta el problema del software en red no son suficientemente libres. Stallman es un vendido, podría
haberlo arreglado en la GPLv3 y no quiso :-P. Tenemos la GPL en un altar y ésto nos puede llevar a confusión cuando no comprendemos realmente la licencia.

¿Mi sugerencia/solución? Para aplicaciones en red como las páginas web, licenciar el software bajo Affero GPL (AGPL). Y yo incluso abogaría por especificar éste problema para que las licencias que no lo resuelvan no sean consideradas completamente libres por la FSF o la OSI.

[1] Lo siento no he encontrado la referencia sobre lo de “algunas empresas”, pero juro que lo leí en alguna parte xD

Anuncios

Konqueror session management + crash handler

So as it was promised, konqueror session management is already done. I’ve just sent an email to kfm-devel with the patch attached and hopefully the patch will enter into trunk before the hard feature freeze (next monday) so that we get it in Konqueror 4.1.

The session management support is pretty similar to the one that Opera has. Let’s say it’s inspired in Opera =). And as everyone likes screenshots, here there is one that shows the new menus for session management:

So you can easily save current session, open one of the saved sessions, or manage current sessions. And only one more item was added to the File Menu, which is the same menu where session management resides in Opera.

The Manage sessions dialog lets you save current session in a new session or in an existing session (overwriting it). It also can rename an existing session, or delete it. Or even open one of those sessions. Quite straightforward if you look at it, actually:

And I have reserved the best part for the end. Proper crash session recovery! Because Konqueror shouldn’t, but it can crash sometimes. And it crashes even more when you use KDE trunk. Until now, the only option you had to recover from a crash was using the crash plugin which is sub-optimal.

What I’ve done is something similar to what Opera, Firefox and many others browsers do: Save session every X seconds (it’s configurable via konquerorrc, 10 seconds by default as in firefox). This is done for all konqueror processes, and it’s saved in ~/.kde/share/apps/konqueror/autosaved/. Each process saves its session timely there in a file with a name similar to “:1.114” which identifies it. When a konqueror instance is closed cleanly, its file is removed.

Thus, every time a new window or konqueror process is launched, Konqueror reads that directory and asks to DBus if there’s any service registered with the name “:1.114”, for example, or whatever name have the autosaved files. This is done very fast, because no text parsing or waiting is needed, so the user doesn’t feel any delay.

If for some reason there’s a file with a name that is not related to a registered dbus service, that means that something wrong happened i.e. a konqueror process crashed or froze. And in that case, you get this nice dialog:

Which allows you to restore session if you want, or not, or even not restoring it now but restoring it later (opening a new konqueror process / window). As David Faure suggested me, it also allows you to check “do not ask again” and always do whatever you choose automatically without asking everytime. Nice isn’t it?

There’ still some related fixes I want to add to SVN before hard feature freeze, like adding a KAction menu to “Hibernate konqueror”, i.e. Save current session and close konqueror, so that next time you open konqueror it can be restored. Also listing the crashed and still not restored sessions (i.e. you clicked in “ask me later”) in the sessions menu.

Oh and adding an option to undo closed tab to right click menu of the konqueror tabbar is a must too, I use that option a lot now in firefox and we need it too ;-).

Tu otro banco, y cada vez el de más gente

Imagen de un sintecho

Gracias a Fernando por pasarme ésta genial fotografía.