Licenciamiento de software, ¿cómo se hace?

Bueno, tengo algún software que liberar y otro que licenciar comercialmente. Me gustaría saber que trámites o requisitos son necesarios para liberar software libre, abierto y comercial. De momento me he encontrado leyendo términos de licencias para liberar cierto código que tengo y parece que la licencia que utilizaré será la MIT. Sin embargo estoy realizando una aplicación para una empresa y dicha aplicación debe ser de carácter comercial.

He visto por aquí que por ejemplo, @ezamudio, tiene proyectos licenciados bajo la LGPL. En fin, me gustaría saber qué es necesario, qué trámites (en caso de existir) y de ser posible que sugirieran una licencia para código abierto (en mi caso me gusta la licencia MIT por el simple hecho que si te da la libertad de usar el software cómo quieras, pero pues debe haber recomendaciones).

Desde ya, muchas gracias.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

Software Libre vs Open Source

Aquí sí se vuelve relevante la distinción entre Software Libre y Open Source. Las licencias Open Source están enfocadas a que puedas tener el código abierto y que todo mundo lo pueda usar como quiera (incluyendo en productos comerciales cerrados). Las licencias de Software Libre se enfocan a que el software siempre siga siendo libre, que nadie lo pueda integrar a software comercial cerrado.

Hay muchísimas licencias de dónde escoger; muchas por razones históricas, pues son en cierta forma un fork de alguna otra licencia porque los autores del software no les gustaba cierta cláusula en la que iban a usar por ejemplo. Por eso tenemos por ejemplo la CPL de IBM, la MIT y algunas otras.

Qué licencia es mejor? Pues depende de lo que necesitas y de lo que quieres. Es tu software, tú le vas a poner la licencia que tú quieras. Te doy algunos ejemplos sencillos de las diferencias, si es una biblioteca de software o si es una aplicación completa:

APP GPL: la puedo usar así como viene. Si la distribuyo, tengo que entregar los fuentes si me los piden (o decir dónde conseguirlos al menos). Si la modifico, esas modificaciones caen también bajo la GPL; realmente sólo estoy obligado a distribuir mis modificaciones si estoy distribuyendo el software, pero no estoy obligado a distribuir el software. En la práctica lo que me conviene es enviarte esos cambios, si es que fueron mejoras que le pueden servir a otros, porque si integras esos cambios al código entonces cuando saques la siguiente versión va a traer mis cambios, no se los tengo que volver a aplicar a mi copia del código. Puedo vender copias de la aplicación, con o sin modificaciones, con la única restricción de que tengo que incluir código fuente.

APP BSD o MIT: La puedo usar así como viene. Si la distribuyo, no tengo que dar los fuentes si no quiero. Si la modifico, puedo distribuir la versión modificada sin dar fuentes (ni originales ni mis modificaciones). Obviamente puedo vender esas copias, sin dar fuentes.

LIB GPL: Puedo incluirla en software libre (con licencia GPL o compatible). No puedo incluirla en software propietario. Si quiero usar tu biblioteca en mi app, le tengo que poner licencia GPL o compatible.

LIB BSD o MIT: Puedo incluirla en software propietario, dándote la debida atribución, pero no tengo que dar fuentes de mi app ni de tu lib. Puedo modificarla para incluirla en mi aplicación o redistribuirla modificada, sin tener que dar fuentes de nada.

LIB LGPL: Puedo incluirla en software propietario, dándote la debida atribución, pero al distribuirla, tengo que entregar fuentes de la lib, aunque no de mi app. Si le hago modificaciones a tu código, quedan bajo la LGPL también así que tengo que entregar fuentes de eso también (y me conviene mandártelos, etc).

En mi caso, los proyectos importantes que tengo, jAlarms y j8583, ambos son bibliotecas de software, no aplicaciones terminadas. Me interesa que ese software se mantenga abierto siempre, pero me interesa también poder usarlo en aplicaciones propietarias. Por eso elegí la LGPL.

Si hoy yo hiciera una aplicación que quiero publicar como software libre, usaría la GPL, porque me interesa que siga siendo libre. La filosofía de GPL y LGPL es que la restricción de que siempre se tengan que distribuir fuentes, se traduce en que nadie pueda reducirle la libertad a nadie más de lo que puede hacer con el software. Con las licencias BSD y MIT yo le puedo reducir la libertad a otras personas, distribuyendo tu software con modificaciones que sólo yo tengo y no quiero darle a nadie más; esas personas ya no tienen la libertad de modificar el software como ellos quieran porque no les di los fuentes, y dado que tienen una copia modificada, si consiguen los fuentes originales, no pueden reconstruir el software que yo les di.

Re: Software Libre vs Open Source

Pues eso.
A cómo lo veo me agradó más la licencia MIT, por el simple hecho de que te permite hacer cambios y de no querer no los tienes que devolver (qué en este pequeño proyecto que quiero empezar no quiero ayudas de compromiso :-)).

Respecto a "licenciarlo" de manera formal, ¿es necesario algún trámite o agregar en cada archivo/clase de mi proyecto la licencia qué prefiera (bueno, la leyenda de la licencia)?. Por ejemplo el software que necesito que sea comercial, ¿sólo distribuyendo binarios y pegándole una licencia ya lo vuelve licenciado?

De antemano gracias.

Imagen de ezamudio

licencias

Para el software libre o abierto, le pegas al principio de cada archivo fuente lo que diga la licencia (varía según cada licencia, si quieres usar MIT que es muy breve búscala y le puedes poner completa). Lo pegas como comentario al inicio de cada archivo.

No sé a qué te refieras con las ayudas de compromiso. No tienes que aceptar ayuda de nadie si no quieres. Si te mando correcciones no estás obligado siquiera a revisarlas, las puedes borrar sin verlas. Simplemente nunca sabrás si alguien está usando tu software, porque puede estar dentro de aplicaciones propietarias que no incluyen fuentes.

En la práctica, cuando usas algún servicio como SourceForge o Google Code, al dar de alta el proyecto le indicas con qué licencia lo estás publicando (viene la lista de las aprobadas como open source/free software para que elijas la que quieres). Estas licencias ya están hechas y por eso eliges una y ya.

Para software comercial tienes que verlo con un abogado porque es un contrato de no sé qué tipo entre tú y el cliente y tiene que haber ciertas garantías porque seguramente te dieron dinero por ese software y quieres restringir un montón de cosas como el uso que se le da y que no le puedan hacer ingeniería reversa ni descompilarlo ni modificarlo de ninguna forma (para evitar cracks por ejemplo) etc etc. Es un super chorote legal (ve cualquier EULA de Microsoft) y cada autor (generalmente empresas) tiene el suyo, que generalmente fue escrito por abogados.

Re: licencias

Oh, muy bien.

No pues en unos días más yo creo que encomiendo a alguien a que lo suba a Google Code yo creo (con eso de qué SourceFoge no es accesible desde ciertos países, no me agradó).

Con lo de ayuda de compromisos, no es que no las acepte. Claro que todas las ayudas se aceptarán y serán revisadas; de parecer que van con una necesidad específica hasta se puede hacer un branch; pero, claro que se aceptan, Lo que no me agrada de las licencias, por ejemplo, LGPL es que si le haces un cambio -en teoría- debe ir de vuelta; y eso por ejemplo, si hago un cambio que me pide la empresa cómo propiedad de ella pues ya tendría un problema.

Un ejemplo: Una empresa XYZ, me contrató para llevar a cabo una idea que tiene en mente. Dentro de sus requerimientos me dice: "quiero saber cada cosa que ocurre en el sistema y que me avise por Twitter, FB, MSN, etc.", entonces yo le digo que pues podemos usar jAlarms...Al paso de los días ve que sí, que por ejemplo está en su Blockberry y le llega una notificación de Twitter donde dice: "El sistema se cae", pero pues cómo esta persona no tiene tiempo de ver cada notificación de Twitter, pues no vio que se le cayó el sistema y me dice: "Oye, no podemos hacer una manera para que me llegue un mensaje tipo 'loquendo' llamándome con el error...Pero quiero que esa característica pertenezca a mi empresa, obviamente te pagaré otro varo extra."

En este caso, tendría que hacer dependiente el código a jAlarms. En lugar de simplemente ir a donde están los canales y agregar el canal 'LoquendoChannel', tendría que enviártelo y ahí la empresa si se da cuenta me mete una demanda y puede que hasta el proyecto se vea comprometido. Por eso me agrada más la licencia MIT ya que cooperas si en realidad así lo deseas y esto no compromete a nadie.

Bueno, así es cómo yo lo entiendo.

Imagen de ezamudio

malentendido

Estás en uno de los malentendidos más grandes de GPL, muy difundido por los enemigos del software libre.

Si haces un canal para jAlarms, no estás obligado a mandármelo. Eso lo puedes hacer por conveniencia. Si la aplicación es exclusivamente un desarrollo que tu cliente usa, no lo está distribuyendo y por lo tanto aunque ese canal caiga en LGPL porque es trabajo derivado de jAlarms, ni estás obligado a enviármelo, ni están obligados a distribuirlo.

Si distribuyen esa aplicación entonces están obligados a distribuir ese canal, con todo y fuente, porque aunque no quieran ese canal es LGPL.

Si no quieren usar jAlarms porque no quieren hacer un canal y dar una pequeña contribución a cambio, pues ellos se lo pierden. En mi opinión no tiene sentido preferir reescribir cosas que ya existen, sólo porque "corren el riesgo" de tener que hacer tantitititito software libre. En vez de ver el beneficio de usar una herramienta existente y que ya sólo tienen que escribir una pequeña porción de código para completar lo que necesitan, prefieren hacer todo de cero.

Precisamente por estas razones es que yo uso LGPL. No quiero que una empresa diga "ah sí, voy a usar jAlarms pero que se vayan al carajo con que les voy a dar el canal que yo hice, ese lo voy a vender". Publicar proyectos de software libre no es una obra de caridad.

Re: malentendido

No, si no es que se desprecie solo por la licencia, pero pues a mí cómo desarrollador me es más cómodo agregar un canal a la librería de jAlarms y ya. Porqué así, pues bajándome jAlarms si aceptaron ese canal pues que chido, la próxima que necesite eso, sólo descargo jAlarms y ya. Pero, a cómo te digo, de la otra manera bien puedes usar jAlarms y crear un canal que use las interfaces y clases de jAlarms. Sin embargo si no hago cambios a jAlarms no hay bronca, ¿o ya con usar jAlarms TENGO, aunque no haya cambiado código propio de jAlarms, que hacer por ejemplo libre ese canal 'loquendo'?

Es que software libre está chido, pero no sé la GPL no me parece tan chida, de hecho mis opciones de licencias viables para mí son la LGPL y la MIT. Pero pues creo que la MIT es más permisiva, y eso me gusta. Incluso algunos proyectos grandes llevan licencia BSD o MIT por la misma razón (que no sea un impedimento comercial). Aunque bueno, en una librería no importa tanto, ya que es una colección de cosas muy genéricas, en donde habría más problema es en las aplicaciones.

Imagen de ezamudio

eh?

"software libre está chido, pero no sé la GPL no me parece tan chida"

La GPL es el pilar del software libre.

La licencia MIT no es software libre, es open source.

Si haces un canal para jAlarms, automáticamente ese canal es LGPL. El código que usa tu canal (que lo usa indirectamente, pero aunque lo usara directamente) no tiene problema, puede seguir siendo propietario. Pero el canal solamente lo puedes hacer de dos maneras: implementas la interfaz AlarmChannel, o extiendes la clase AbstractAlarmChannel. Y con cualquiera de esas dos cosas tu clase cae bajo LGPL porque estás extendiendo código de jAlarms (al implementar la interfaz o extender la clase).

Y la idea es precisamente esa: que si una empresa o un desarrollador utiliza software libre y se beneficia de él, no se termine ahí ese beneficio. No sé qué sea Loquendo, no sé si fue extremadamente complicado hacer ese canal (si es que lo hiciste, no sé si fue caso hipotético), pero pues no veo cómo eso pueda ser parte del core business de tu cliente; finalmente sólo es un medio más por donde le va a llegar una alarma, pero todo el mecanismo del envío de las mismas lo hice yo.

Tal parece que tu cliente (o tú, no lo sé), no quieren dar nada a cambio de lo que obtienen. Por tu decisión de usar jAlarms, el cliente se vio beneficiado de manera más inmediata, porque ya no tuviste que desarrollar toda la biblioteca, por lo que no te tuvo que pagar ese tiempo. En vez de hacer todo un mecanismo de envío de alarmas, solamente usas una biblioteca. Si desarrollas un canal para esta biblioteca, pues ya sólo te tuvieron que pagar por ese tiempo, que es una fracción minúscula de lo que te hubieras tardado en hacer toda esa biblioteca. Pero en vez de ver ese beneficio, siendo (por lo que escribes, o por cómo lo estoy leyendo yo) que están en plan de "no le quiero dar nada a nadie gratis, no vamos a regalar este código porque nos costó dinero". Y lo que se ahorraron con el uso de la biblioteca? Es la única biblioteca FOSS que utiliza el proyecto? no metieron hibernate, ni spring ni nada de eso? Cuánto tiempo hubiera tomado el desarrollo sin usar ninguna de esas cosas? El desarrollo lo hiciste en Eclipse o NetBeans? Si esas opciones no existieran, cuánto hubieras tenido que pagar por un IDE como IDEA Ultimate? Le hubieras cobrado parte de eso al cliente, o lo absorbes todo el gasto tú?

Imagen de greeneyed

Licencia MIT = regalo

Usar la licencia MIT no tiene "nada de malo", pero es lo mismito que regalar el software. Alguien puede cojerlo, cambiarlo, ponerle una licencia diferente y venderlo sin compensar al autor y sin mostrar los cambios que ha hecho.

Por supuesto a los que *usan* software libre les encantan este tipo de licencias, a los que lo producen no siempre les apetece tanto usarlas.

Pero sí, menudo fastidio que encima de dártelo gratis y con el código no te dejen sacar dinero por ello sin hacer nada y sin retribuir a quien te lo dio. Que autores de software libre tan poco comprensivos que hay por el mundo ;).