Open Source License Manager
Este proyecto pretende proporcionar un plugin de Eclipse que facilite la tarea de "licenciamiento" del código desarrollado. La idea es que se proporcionen diferentes tipos de licencias al usuario, y que la licencia escogida se aplique a todos los ficheros que contengan código fuente de uno o varios proyectos. El plugin permitirá añadir nuevos tipos de licencias a través de su correspondiente página en las preferencias del Eclipse. El proyecto puede dividirse en dos partes: extracción de información sobre el licenciamiento de uno o varios proyectos y aplicación de una licencia a un proyecto que sea compatible con el licenciamiento del código utilizado por éste. Dado que es habitual utilizar código desarrollado por terceras personas, interesa saber el tipo de licencia que contiene el código que estamos utilizando. Para ello, una parte del proyecto consistirá en extraer información sobre los diferentes tipos de licencias que tiene aplicado un determinado código. Esta información se utilizará para ofrecernos una serie de licencias compatibles con las que tiene el código que estamos utilizando. Para ello es necesario establecer una serie de relaciones de compatibilidad (podría haber otro tipo de relaciones también). Actualmente existe una herramienta de pago para Eclipse, que avisa de violaciones de licencias dinámicamente, por ejemplo si arrastramos un fichero al proyecto y éste tiene una licencia incompatible con otros ficheros del proyeto. La herramienta se llama Protecode.Extracción de información sobre las licencias de un código
La forma más básica de llevar esto a cabo consiste en normalizar el texto (o textos) de cada licencia y buscar, por comparación, dicho texto en el código fuente. Se pueden utilizar diferentes heurísticos, como por ejemplo considerar exclusivamente las primeras 20 ó 30 líneas del código. El texto del código también debe ser normalizado. La normalización puede consistir simplemente en eliminar los espacios en blanco, tabuladores y saltos de línea. El texto de la licencia aparece siempre al principio, y está contenido como comentario en el código fuente. Si queremos soportar múltiples lenguajes, debemos considerar alguna forma de no tener en cuenta los caracteres que conforman la marca de comentario. Una heurística puede ser eliminar todo lo que no sean letras o números. (En Fortran los comentarios empiezan con una C mayúscula :) ). Esta herramienta sería autónoma, y proporcionaría información sobre todos los tipos de licencias que ha encontrado en un conjunto de ficheros de código. Si es capaz de encontrar similitudes con licencias conocidas por la herramienta, informará de que ha encontrado tal o cual licencia, en caso contrario, informará de que ha encontrado licencias desconocidas. Una determinada licencia (por ejemplo, la GPL), puede ser modificada al aplicarla al código. Es interesante que se detecte que se trata de una modificación de la GPL. Por otro lado, también interesa sacar información del copyright. Cada fichero suele incluir, además del texto de la licencia, el autor. Es fácil localizalo a través del símbolo correspondiente, o similar. Esta información puede ser interesante cuando la licencia del código de un determinado autor es incompatible con la que nosotros queremos aplicar. Obteniendo la informacióno del autor, podemos contactar con él para obtener, si es posible, su código bajo una licencia compatible. Patxi: mirar comparadores en Eclipse (diff) Hay diferentes formas de implementar esto. Una posibilidad es utilizar la API de Eclipse (org.eclipse.compare). Otra posibilidad es utilizar alguna librería disponible por ahí. Por ejemplo, java-diff, o pasar a Java esta implementación en jsvascript. Google-diff-match-patch puede resultarnos más útil, porque lo que nosotros tenemos que hacet es matching de una cadena por un fichero.Contribuciones en las preferencias
En la ayuda, bajo Platform Plug-in Developer Guide > Programmer's Guide > Plugging into the workbench, hay un tutorial mínimo sobre cómo añadir una página de preferencias para un plug-in. Para almacenar ficheros, se utiliza la localización dada por Plugin.getStateLocation(). En esta ubicación deberá guardar el plugin el texto de las licencias. El artículo Preferences in the Eclipse Workbench UI, aunque antiguo, puede servir también de muestra para esta parte. Mutatis mutandis - Using Preference Pages as Property Pages trata el hecho de que algunas veces las preferencias son generales y otras veces cada proyecto puede sobreescribirlas, estableciendo valores propios del proyecto. Puede proporcionar alguna información adicional.
on 2009/07/23 17:56