sábado, 8 de julio de 2006

Entendiendo RoR. Mi primera impresión

Después de algunos días, creo que ya estoy en condiciones de anotar mis impresiones sobre el primer contacto de Ruby on Rails. La verdad es que RoR parece una herramienta muy potente, sobre la que hay mucha documentación, pero no he conseguido encontrar por ahora documentación que me explique las "tripas" de Rails. A mí me gusta llegar hasta abajo. Si voy a casarme con alguna herramienta, necesito disponer de todo su código, y poderlo entender. De esta forma trato de sacarle el máximo partido a lo que dispongo. Esto es lo que nos exige el mercado laboral en el que estamos inmersos.

El lenguaje Ruby me ha gustado mucho. Hace mucho tiempo (1990-91), mi primer desarrollo importante tuvo mucho que ver con los lenguajes de programación y con sus compiladores e intérpretes. Por aquel entonces, ya se me ocurrieron bastantes cosas que echaba de menos en los principales lenguajes desde el punto de vista del desarrollador. Todavía no había nacido Java, ni los actuales "lenguajes de script". Pués debí ser premonitorio, ya que esas cosas y muchas otras que ni siquiera soñé, las tiene ahora RoR. Unas las tiene Ruby, exclusivamente, y otras las tiene RoR en su conjunto.

En mi modesta opinión la "moda RoR" que se está viviendo en la actualidad en Internet, cristalizará en algo mucho más importante con el permiso de ...; y sueño a dia de hoy que será toda una revolución en el mundo de la programación. A mediados de los 90 ya había toda una revolución entorno a Clipper. Revolución que no terminó de cuajar por el retraso de sus desarrolladores en sacar una versión para Windows, y de esta forma quedó desbancado por VBasic, que ha sido la revolución de los años 98-2002. Después ha venido la revolución de los lenguajes de script como perl, php, phyton y los desarrollos open-source para la web. Durante estos dos últimos años estamos viviendo la revolución de los frameworks. Es evidente que todo son frameworks, pero ninguno termina de "cuajar". La siguiente revolución por pura lógica tiene que ser el asentamiento de los frameworks y por lo tanto no mas de 3 o cuatro deben ser los que triunfen. En mi modesta opinión uno de ellos será RoR, otro tendrá que ver con java y el tercero tendrá que pernecer forzosamente al todopoderoso ...

jueves, 29 de junio de 2006

Entendiendo Ruby on Rails. Primeros pasos

Ruby es un nuevo lenguaje, que junto con Rails (el framework) y los necesarios servidores de web y de base de datos presume de ser una de las plataformas más potentes y modernas para desarrollar en la Web 2.0. Aparentemente tienen razón o su campaña de marketing es magnífica, puesto que a mi me han convencido a la primera (de momento y sin conocerla a fondo). Por ello me quiero tomar la molestia de analizarla un poco más en profundidad y comprobar si todo lo que dicen es cierto (soy desconfiado por naturaleza de la gente que presume, o sea de mi mismo). He leido y comprobado que hay mucha documentación referente a este entorno. Tanta que es fácil liarse y a mí me ha ocurrido ya en el primer punto, la instalación.

1.- Descargando Ruby on Rails


Yo, de momento utilizo básicamente entornos Windows, y necesito la plataforma de desarrollo. Para este caso, el sitio más adecuado para descargarse el entorno como bién se dice en http://www.hackerdude.com/courses/rails/InstalandoRails.html es "Instant Rails". Basta descargar el enlace y seguir los pasos indicados, y queda instalado en 5 minutos junto con el servidor web Apache y la base de datos MySql.

2.- Tutorial de aprendizaje

De lo mejorcito que he visto es el tutorial traducido a castellano "Cuatro Dias con Rails". Cuatro días son muchos, pero parece ser más racional que el conocido video del "blog en 15 minutos y 58 líneas de código" y promete realizar una aplicación de base de datos en la que por ahora, estoy mucho más interesado. Hay otro que también hay que leer, aunque el proceso de instalación es algo más complejo que en el anterior. Se titula "En marcha con Ruby on Rails" y es mucho más sencillo de seguir y básico. Yo realmente he utilizado Instant Rails y después he seguido este manual (saltándome la instalación) para darme una idea de lo que se puede hacer. Después, he seguido Cuatro Dias con Rails, que es algo más completo y complejo.

3.- Resultados del primer contacto

Bien, dame tiempo, ya te contaré,...

Primer alto en el camino

Bien, tras las emotivas declaraciones de intenciones, los primeros buzeos por la red buscando documentación y herramientas y tras tener relativamente claro las dos preguntas fundamentales iniciales:
  1. ¿Qué quiero hacer? -> MyErp
  2. ¿Cómo quiero hacerlo? -> Con software libre. Utilizando preferiblemente por este orden: Licencias de tipo BSD, Licencias de tipo LGPL y Licencias GNU. El orden es por ahora por si la cosa sale bien, pero tengo muy claro que es poco probable y que rápidamente entenderé que la mejor herramienta caso de que esté disponible será GNU.
llega el momento del primer cruce de carreteras y de dar respuesta a la tercera pregunta:

3. ¿Qué herramienta utilizo?

Evidentemente, a este nivel los caminos elegidos son los que más marcarán el futuro; y eso hay que tenerlo muy claro. Pero el problema, es que a estas alturas las preguntas y respuestas son casi "metafísicas" (como la del sexo de los ángeles, o la de la gallina y el huevo) por ahora. Sin embargo, las respuestas en sí quedarán "a fuego marcadas sobre mi piel". Uy!!!, que miedo, que hacer!!!. Ante esto, cualquier director de informática "razonable" buscaría asesoramiento en personas expertas en las diferentes plataformas y les pediría informes. También buscaría opiniones de clientes. Sin embargo los directores de informática "actuales", a lo sumo convocarian en una reunión a representantes de las diferentes plataformas y los someterían a un cuestionario y a un debate, quedandose a la escucha con sus asesores para después pedirles a éstos que tomen la decisión.

Pues yo de momento sigo prácticamente sólo y prefiero ser paciente. Por ahora nadie me mete prisa y esto es muy importante (a la vez que poco habitual). Como ahora mismo puedo y el paso a dar es muy importante, me toca reanalizar en más detalle las herramientas que mejor sensación me han causado cuando buceaba en busca de plataformas ERP.

La mayor impresión, me la ha dejado Ruby on Rails. Si, ya se que no es una herramienta ERP, sino un framework, pero repito, tengo tiempo y mi pretendido desarrollo será para una mini-pyme. Además cuento con que ya tengo desarrollada la herramienta de gestión de servicios con un módulo de análisis de datos y otro de mini-gestión de personal (en VBasic); y ya realicé hace unos años una herramienta genérica de facturación. También, tengo claro que el módulo de relaciones con los clientes y el de ventas, serán muy básicos, ya que el número de clientes es "muy muy" reducido, eso sí, lo clientes son importantes (a buen entendedor, ...), y a priori, no haría falta desarrollar los módulos de gestión de proyectos ni el de gestión de fábrica.

miércoles, 21 de junio de 2006

Entendiendo un ERP

Una completa definición de ERP y/o sistemas de planificación de recursos y a mi entender bastante buena, se puede ver en Wikipedia, otro más aplio en la página web de SIC Desarrollo. Básicamente consiste en una aplicación que aglutina la gestión de todas las funcionalidades de una organización de forma centralizada y homogénea. Las denominadas "Suites de Gestión" no se consideran ERP debido a que, aunque entre sus aplicaciones independientes el traspaso de datos suele ser automático, en realidad los datos están duplicados, o no están aglutinados en torno a una única base de datos. Una característica importante de cualquier herramienta ERP es que debe poder ser personalizable, es decir, adaptable al "modus operandi" de la empresa que estemos tratando. Por tanto debe disponer de dos interfaces, uno para la personalización y otro (el resultante de la personalización) para el cliente. Hay tres características que distinguen a un ERP:
  1. Son sistemas integrales,
  2. son sistemas modulares
  3. y adaptables.
Términos muy relacionados con ERP son CRM (gestión de relaciones con los clientes) y PM (gestión de proyectos). Un completo y detallado artículo que recomiendo se puede encontrar en: Planeación de recursos empresariales (ERP).

Los objetivos principales de los sistemas ERP son:
  1. Optimización de los procesos empresariales.
  2. Acceso a información confiable, precisa y oportuna.
  3. La posibilidad de compartir información entre todos los componentes de la organización.
  4. Eliminación de datos y operaciones innecesarias.
  5. Reducción de tiempos y de los costes de los procesos.
El propósito fundamental de un ERP es otorgar apoyo a los clientes del negocio, tiempos rápidos de respuesta a sus problemas así como un eficiente manejo de información que permita la toma oportuna de decisiones y disminución de los costos totales de operación.

Las principales cuestiones que debe resolver son:
  • Diccionario de datos: Con este módulo debemos gestionar la base de datos del ERP a nivel de tablas. También se utiliza en la personalización de la solución a la organización.
  • Diccionario de reglas: Es el módulo que define y determina los papeles en contreto que definien a la organización donde está aplicado el ERP. Debe contener los datos principales de la organización, reglas, roles de los usuarios y a los propios usuarios y sus permisos.
  • Gestión de compras: Módulo encargado de gestionar las necesidades, funcionalidades y la información requerida durante los procedimientos de compras de la organización. Debe asegurar en todo momento la trazabilidad de este proceso.
  • Gestión de ventas: Análogo al anterior pero con las ventas.
  • Gestión de pagos: Análogo al anterior sobre los pagos.
  • Gestión de cobros: Análogo al anterior sobre los cobros.
  • Gestión de fábrica: Encargado de gestionar la fabricación de los productos de la organización y la dirección de planta según la metodología de producción de la organización.
  • Gestión de servicios: En las organizaciones proveedoras de servicios, con el objeto de atender las solicitudes, la asignación de recursos y el seguimiento y control y los procesos (actividades) destinados a llevarlos a término.
  • Gestión de proyectos: Para las organizaciones que dividen sus actividades en proyectos, con el objeto de que puedan deliverar, organizar, y concluir los mismos.
  • Gestión de clientes: Destinado a la ayudar a los clientes en sus relaciones con la empresa.
  • Gestión de proveedores: Análogo al anterior con los proveedores.
  • Gestión financiera: Módulo de contabilidad y finanzas fundamental en cualquier organización.
  • Gestión de activos: Módulo para la gestión de los mismos.
  • Gestión de calidad: Destinado a la gestión y supervisión del sistema de calidad de la empresa.
  • Gestión del sistema: Destinado a la información y gestión de los recursos bajo los que corre la aplicación con el objeto de que el administrador pueda optimizar el funcionamiento de la misma.
  • Estadística y toma de decisiones: Módulo para permitir la toma de decisiones de la gerencia.
  • Gestión de ayuda y publicaciones (web por ejemplo)
Los principales recursos o componentes con que debe contar un ERP son a mi entender:
  • Ventana
  • Formulario
  • Listado (reporte)
  • Gráfico (para estadísticas y estados)
  • Tarea
  • Proceso
  • Flujo de trabajo
  • Comunicaciones (foros, chat, correo, ...)
  • Herramientas (calculadora, agenta, notas, ...)
  • Estado (para informar al usuario del estado de la aplicación)
  • Ayuda
Para poder ofrecer interfaz web, cualquier ERP que se precie debe estar formado por al menos las siguientes herramientas:
  • Base de datos
  • Servidor Web
  • Plantillas + Lenguaje de script de servidor para generar el interfaz del cliente.
  • Motor de flujo de trabajo que implemente la lógica de negocio. Puede utilizar el propio lenguaje de script del servidor.
Los dos últimos puntos también pueden ser englobados dentro de un servidor de aplicaciones al uso, o también utilizar un servidor de aplicaciones con plantillas y un leguaje de script.

En términos generales se pueden definir cinco etapas fundamentales para la implantación de un ERP cualquiera en cualquier empresa:
  1. Elaboración del plan de trabajo y estructuración de los equipos asignados a las diferentes tareas.
  2. Organización y planificación.
  3. Depuración de la información, en la cual se revisa y corrige la información actual. Procesos de realimentación las veces necesarias.
  4. Formación de los usuarios. Capacitación en los aspectos técnico y operativo y con simulaciones para que los usuarios se familiaricen con el sistema.
  5. Liberación formal del sistema o la implantación total del mismo.

Comparativa de ERP's se puede encontrar en el blog de TodoBI. Herramientas ERP open source se encuentran descritas en Wikipedia. Un índice de todas las herramientas ERP opensource se puede encontrar en sourceforge. Las que a mí más me han sonado son :
  • Compiere es una solución que integra ERP + CRM (gestión de las relaciones con los clientes) bajo interfaces Windows y Web. Es una solución internacional basada en los flujos de trabajo que realiza el personal de la empresa. Es una solución 100% Java sobre base de datos Oracle, con servidor de aplicaciones JBOSS. Es quizá las más antigua, completa y potente solución del mercado, a partir de la que han evolucionado el resto de ERP's.
  • ]project-open[ es un ERP Open Source orientado a proyectos, para empresas de servicios exclusivamente (no está pensado para empresas manufactureras o que fabriquen o vendan productos físicos) orientado a web; con una rara mezcla de licencias. Utiliza como base de datos PostgreSQL o Oracle y está desarrollado utilizando la herramienta OpenACS basada a su vez en el servidor web AOLserver.
  • Openbravo un ERP de codigo abierto realizado en Java siguiendo la filosofía MVC y en España. Es un ERP totalmente orientado a la WEB, con innumerables módulos como cualquier ERP que se precie. Está adaptado a la legislación española en base a los desarrollos previos de Compire. Es uno de los ERP que mas éxito parece tener. Tiene licencia basada en la "Mozilla Public License", lo que permite que las modificaciones se tengan que distribuir como MPL, pero las adiciones se puedan o no distribuir bajo la licencia deseada por el autor. Necesita Tomcat y Oracle y PostgreSQL.
  • openXpertya es un ERP y CRM de código abierto, con integración de servicios en línea de B2B o B2C (en función del tipo de cliente final) e incluso B2E (servicios internos) y con soporte de exportación e datos (enlaces) al estandar EDI (intercambio electrónico de información entre empresa: facturas, albaranes, pedidos: EDIFACT, estandard mundial de la ONU) y con posibilidad de trabajar con cubos multidimensionales OLAP (análisis exhaustivo de resultados). Utilizaba inicialmente la base de datos Oracle, aunque ahora admite otras. Está desarrollado en España bajo el patrocinio del Principado de Asturias y por tanto, está adaptado a la legislación española. Es un ERP Java basado en JBOSS (aunque también Apache TomCat), por tanto está básicamente orientado a ventanas, aunque también tiene módulos web para interacturar con por ejemplo clientes, ... Dispone también de los principales módulos que debe contener todo ERP. Está liberado bajo licencia basada en la CDDL desarrollada por SUN que a su vez se basó en la MLP de Mozilla.
  • Adempiere. Es una solución que parte de la escisión de colaboradores del proyecto Compiere. El proyecto ADempiere fue creado en Septiembre de 2006 después de las difererencias que se tuvieron entre Compiere Inc., los desarrolladores de Compiere™, y la comunidad que se formó alrededor del proyecto. La comunidad consideró que Compiere Inc. puso especial énfasis en la naturaleza de código abierto del proyecto, en lugar de la naturaleza comunitaria del proyecto. Después de una intensa discusión se decidió separarse de Compiere y dar nacimiento al proyecto ADempiere. ADempiere está desarrollado con tecnología J2EE; específicamente utiliza el servidor de aplicaciones JBOSS. Actualmente el soporte de bases de datos está restringido a Oracle y PostgreSQL, no obstante, la independencia de la base de datos es una meta prioritaria para el proyecto. Hay que tener en cuenta el poco tiempo que lleva a la hora de tomar decisiones sobre esta solución.
  • jAllInOne es un ERP y CRM realizado en java orientado a ventanas puesto que está ampliamente basado en Openswing y que utiliza el protocolo http para comunicar servidor y clientes. Actua como una aplicación web a la hora de instalarse en los clientes ya que utiliza javaws. Está también basado en el paradigma MVC y utiliza JDBC para conectarse a la base de datos (está testeado con Oracle, MS Sqlserver y MySQL). Está licenciado bajo LGPL.
  • Apache OFBiz es un ERP y CRM muy amplio patrocinado por la fundación Apache.
  • OpenTaps es otra solución ERP y CRM open source.
  • Sugar CRM solución ERP.
  • TinyERP. Es un software de ERP bajo licencia GPL. Inicialmente desarrollado en Bélgica, hay traducciones al español en versiones anteriores. TinyERP es un ERP reducido (5-50 usuarios) y principalmente enfocado a la PYME, aunque dispone de módulos como gestión de proyectos o estadísticas, más habituales de empresas de mayor tamaño. Implementa funcionalidades como Ventas, Compras, Stock, Contabilidad, Tesorería y algunos más. Dispone de funcionalidad para la generación de impresos vía PDF, HTML y permite exportar datos a otros programas como OpenOffice o MS-Excel. TinyERP se encuentra en un estado funcional sobre Linux y Windows (utiliza fundamentalemente la librería de ventanas GTK+), aunque algunos módulos aún están en desarrollo. Actualmente está avanzando hacia su integración con EzPublish. TinyERP internamente usa un modelo de Flujos de Trabajo (WorkFlow), con arquitectura en tres capas. Está desarrollado en Python, PyGTK y sobre PostgreSQL, lo que podría ser interpretado como su punto débil debido a la velocidad obtenida. (Wikipedia).
  • Boxerp es un proyecto basado en la plataforma Mono, y uno de sus principales objetivos es servir de guía en el aprendizaje de esta tecnología. Está liberado bajo licencia BSD. Se trata de un framework para la construcción de aplicaciones de gestión que pretende ser estable y escalable y que está ampliamente documentado para que cualquiera que empieza pueda incorporarse al equipo de desarrollo, sirviendo también como punto de partida para otros proyectos similares. (Wikipedia). ¡Cuidado, que realmente no es un ERP, si no un framework!
  • CK-ERP es un ERP y CRM de código abierto bajo licencia GNU/GPL que consta de 20 módulos o aplicaciones que incluyen facilidades para la gestión de la contabilidad de la empresa, pagos, ingresos, pedidos u órdenes de compra, gestión de ventas, cotizaciones recibidas, gestión del punto de venta, gestión de recursos humanos o personal, gestión de nóminas, gestión de contactos, entre otros. Su interfase online, es bastante simple pero es fácilmente adaptable a las necesidades de cualquier empresa. Esta desarrollado en PHP, utilizando XOOPS (sistema de gestión de contenidos desarrollado en PHP) y MySQL.
  • Fisterra es un ERP para entornos GNOME patronizando por Hispalinux. En la actualidad soporta: administración de clientes y pedidos, facturación, gestión de stock y de pagos, punto de venta, funcionamiento distribuido y replicación offline de los datos. La implementación usa Gnome SDK y PostgreSQL. Fisterra es una aplicación de gestión empresarial, publicada bajo licencia GPL.
  • ERP5 es otro ERP y CRM para entornos Windows, Linux y Mac enfocado principalmente a ventanas distribuido bajo licencia GPL. Está basado en tecnología de base de datos Zope. Dispone de un producto ERP5 Express que pude utilizarse desde hosting en cualquier dispositivo, incluídos teléfonos móviles y PDA's y que promete estar listo para su utilización en menos de 5 minutos.
  • FacturaLUX es software libre de tipo ERP (Enterprise Resource Planning) orientado a la administración, gestión comercial, finanzas y en general a cualquier tipo de aplicación donde se manejen grandes bases de datos y procesos administrativos. Su aplicación abarca desde la gestión financiera y comercial en empresas hasta la adaptación a procesos complejos de producción. Genera aplicaciones multiplataforma (windows, linux, Mac,...). El objetivo inicial de FacturaLUX es crear una aplicación informática que permita desarrollar soluciones para la administración y gestión de la PYME, así como distintas personalizaciones que cubran las necesidades de gestión y finanzas de las empresas, basándose en el modelo de software libre. Hoy por hoy, aunque dispone de algunas "personalizaciones" para diferentes tipos de empresas, creo que todavía está lejos de llegar a ser un ERP como tal por el contrario creo que es un referente en cuanto al open software de facturación + contabilidad. Creo por tanto, que se está realizando muy buen trabajo y le auguro un futuro muy prometedor. Soporta bases de datos PostgreSQL, MySQL y SQLite. Está desarrollado en C++ en conjunción con las herramientas Qt, lo que le proporciona un sistema multiplataforma. Utiliza profusamente QtScript, lo que le permite una rápida y ágil personalización. Es software libre bajo licencia GPL y Creative Commons.
  • TNTConcept es un software para la gestión interna por web, construido con las últimas tecnologías de desarrollo Java/J2EE (Spring, JSF, Hibernate, Acegi, Maven, Subversion, etc.) y disponible bajo licencia GPL. Seguro que a muchos profesionales independientes y PYMES os ayudará a organizar mejor vuestra operativa. La aplicación es gratuita, su código fuente está disponible y se encuentra bajo una licencia GPL. Se asemeja mucho a un ERP sencillo, simple, pero operativo. Es la liberación bajo licencia GPL de una aplicación de gestión interna de la propia empresa creadora Autentia. Tiene muchas características incluidas en los ERP y CRM, por lo que su visión es mucho más amplia que la de un programa de gestión al uso; sin embargo entiendo que no se puede calificar de ERP puesto que es una solución en sí y no existe documentación para su parametrización de acuerdo a nuestras necesidades (es una aplicación muy incipiente por ahora). Si me ha parecido muy válido para la gestión de una PYME y muy sencillo de implantar si nos adecuamos a sus características.
Existen también innumerables frameworks con los que se pueden desarrollar a su vez y de forma directa la herramienta ERP. En este caso no conseguiriamos en sí un ERP, puesto que lo más logico sería suprimir el interface de personalización e implentar directamente el interface del cliente según su propio sistema de trabajo (perdería la tercera caracteristica, adaptabilidad). A pesar de esto, el trabajo a realizar, caso de pretender una cobertura importante, sigue siendo ingente y no abordable salvo por un importante grupo de trabajo o que tengamos la paciencia suficiente. Entre los frameworks yo destacaría:

  • PHP

    • Zend Framework
    • CakePHP
    • Symfony Project
    • Seagull Framework
    • WACT
    • Prado
    • PHP on TRAX
    • ZooP Framework
    • eZ Components
    • CodeIgniter
    • ActiveGrid desarrollado bajo la plataforma LAMP (Linux + Apache + MySql + Php | Perl | Phyton) con soporte AJAX. Con un entorno de programación propio y aparentemente muy sencillo y eficaz. Su salida son páginas web con XForms (formato XML para poder definir interfaces de usuario, principalmente formularios web). Para desarrollar se pueden utilizar sistemas Windows o Linux; sin embargo su servidor sólo corre bajo Linux. Tiene una versión open source y otra comercial, sin embargo, los binarios y su código fuente están liberados bajo Apache Software License 2.0.

  • Java

    • Struts
    • Spring
    • JSF
    • TapesTry bajo Apache Software License.
    • WebWork bajo una licencia modificada similar a Apache license.
    • DbForms bajo licencia LGPL.
    • OpenXava bajo licencia LGPL. OpenXava es un marco de trabajo para desarrollar fácilmente aplicaciones de gestión con XML y Java. Su principal virtud reside en el hecho de que el corazón de nuestras aplicaciones es XML en vez de Java. OpenXava genera para tí una aplicación J2EE completa (con Hibernate o EJB para la persistencia) a partir de ficheros XML. La aplicación resultante te permite hacer manteniento, búsquedas, filtros, ordenaciones, generar informes en formato PDF, exporta a Excel, etc.

  • Otros

    • Ruby on Rails, también conocido como RoR o Rails es un framework de aplicaciones web de código abierto escrito en el lenguaje de programación Ruby, siguiendo el paradigma de la arquitectura Modelo-Vista-Controlador (MVC). El lenguaje de programación Ruby permite la metaprogramación, de la cual Rails hace uso, lo que resulta en una sintaxis que muchos de sus usuarios encuentran muy legible. Ruby es un lenguaje de programación interpretado y orientado a objetos. La filosofía de Ruby es don't repeat yourself (DRY) - no te repitas. La idea de ruby es que usted no necesita repetir lo que ya ha definido en otro lugar. Esto hace a ruby muy compacto.
    • Zope no es un framework en sí sino otro concepto más amplio como es un "servidor de aplicaciones" realizado en Python con una licencia similar a la Apache Software License, denominada ZPL.
    • DotNetNuke bajo licencia BSD sobre Microsoft ASP.NET (VB.NET)
    • Atlas el framework de Microsft con ASP y Ajax

lunes, 19 de junio de 2006

Resumen sobre licencias de software

Creo que mi artículo anterior ha quedado excesivamente amplio y a la vez escaso, ya que ni yo mismo me aclaro y echo bastante de menos algunas definiciones. Me han aclarado un poco vuestros comentarios y el interensantísimo artículo de Claudio Segovia titulado "Tipos de software y licencias". Por todo ello me he decidido a realizar un breve resumen / ampliación / auto-aclaración:
  1. Tipos de sofware

    • Software de dominio público: Software donado a la comunidad o con la propiedad intelectual vencida (70 años depués del fallecimiento del autor generalmente) y por lo tanto no dispone de copyright.
    • Freeware: Software gratuíto del que generalmente sólo se dispone del programa en sí.
    • Open software/Software libre: Software del que se garantiza la disponibilidad de los fuentes.
    • Shareware: Software que se puede usar gratuítamente durante un breve periodo de tiempo. Este software no debe estar restringido en funcionalidades ya que si no caería en la de
    • Software semi-libre/semi-free: El software semilibre es software que no es libre, pero viene con autorización para particulares de usar, copiar, distribuir y modificar (incluyendo la distribución de versiones modificadas) sin fines de lucro. PGP es un ejemplo de un programa semilibre.
    • Software propietario: Software que no es ni libre ni semi-libre. El uso, modificación y redistribución está prohibido y se requiere que se adquiera un permiso.
    • Sofware comercial: El software propietario que se desarrolla con el objeto de comercializarlo y hacer dinero con el uso de dicho software. Cuidado que aunque todos estamos pensando que software comercial siempre es propietario, también hay software comercial libre (o de fuente abierta).
    • Trial o demo jugable: Suele ser muy similar al Shareware. Sin embargo suele estar reducido en su funcionalidad, limitandose en caso de juegos a un capítulo.

  2. Tipos de licencias

    • Software/licencias de dominio público. Total libertad para realizar todo lo que se quiera con el software. En este software se disponen de los fuentes. Es equivalente al Freeware (software gratuíto) cuando en este último también se proporcionan de los fuentes. Carece de copyright al estar vencido o cedido a la comunidad.
    • Open Source / Software Libre /GNU GPL o simplemente GNU. Software del que siempre se dispone de los fuentes, pero u uso está restringido a que el software destino debe quedar como mínimo bajo este tipo de licencia. Por este motivo, a esta licencia se le suele llamar de tipo vírico ya que contagia este tipo de licencia al resto de software junto al que se usa (copyleft). Por tanto no es válido para crear software propietario.
    • LGPL. Es un tipo especial de licencia open source (menos restrictivo) que permite su utilización dentro de software propietario siempre y cuando este software se utilice como librerías adicionales al mismo. Por tanto se puede utilizar en software propietario si se "linkan" (enlazan) los paquetes LGPL por separado.
    • Licencias de tipo BSD. Son las licencias libres por autonomasia. Sólo se reservan los derechos de autor y la propiedad intelectual. Básicamente requiere que el autor sea mencionado correctamente. Entre ellas están a demás de la propia de la licencia BSD, las licencias de tipo Apache, de tipo Mozilla (MPL), y de tipo CDDL. Estas licencias si se pueden usar dentro de software propietario.
Por tanto si no tenemos intención de comercializar nuestro desarrollo o deseamos comercializarlo junto con los fuentes desarrollados, podemos elegir de partida software con cualquier tipo de licencia, y para nuestro producto final la más lógica sería la licencia GNU GPL con copyleft para que todos incluidos nosotros nos podamos aprovechar de los sucesisvos desarrollos que otros realicen. En caso contrario, si deseamos comercializar nuestro desarrollo sin publicar nuestro código, sólo podemos utilizar durante el desarrollo, software de dominio público, software con Licencias de tipo BSD y a lo sumo software con licencia LGPL.

Recuerda de nuevo, que tus comentarios serán bienvenidos.

jueves, 15 de junio de 2006

Entender las licencias de software

Existen en la actualidad numerosos términos destinados a indicar la propiedad del software, y los derechos y deberes de su utilización. Por tanto es básico entender los terminos principales de las licencias de software exitentes antes de poder decidir las herramientas a utilizar. También será básico si pretendemos publicar el trabajo que vamos a realizar; no obstante para este aspecto entiendo básico analizar la propiedad intelectual del software y los derechos de autor y copyright, especialemente si pretendemos obtener beneficios económicos con el mismo o simplemente publicarlo. Sin embargo creo que por ahora es suficiente con el análisis desde el punto de vista de las herramientas y dejo para más adelante lo anterior, ya que por ahora desconozco la calidad del producto resultante (todavía no esta ni planteado). En este punto, paso a resumir lo que entiendo yo sobre las principales licencias de software.

  • Software de dominio público. Situación en que queda el software una vez que han vencido los derechos de su autor con el paso del tiempo requerido (70 años normalmente depués del fallecimiento del autor) o este ha cedido expresamente sus derechos al dominio público. Tras esto, lo único que se debe respetar es la paternidad del autor. Es decir, se puede utilizar con total libertad con sólo mencionar su autor original. Una lista de recursos de dominio público se puede encontrar pinchando aquí.

  • Freeware es un software de computadora que se distribuye sin cargo. A veces se incluye el código fuente, pero no es lo usual (también conocido como código cerrado). Algunos desarrolladores liberan versiones freeware de sus productos para obtener un número de seguidores que puedan estar dispuestos a pagar por una versión más completa, o porque es una edición obsoleta de un programa. En teoría, para poder utilizar este software bastaría con mencionar su autor.

  • Open Source / Software Libre. El significado obvio de "código abierto" es que "se puede obtener el código fuente". Por tanto un programa bajo este tipo de licencia puede ser software libre, pero también puede ser semilibre o incluso completamente no libre. El software libre se basa en que se debe disponer del código fuente para modificarlo y mejorarlo y que estas mejoras deben disponer de una licencia a su vez de software libre que permita el beneficio de la comunidad. Por lo general, un programa de código abierto puede ser y de hecho es software libre, como igualmente un programa software libre es open source, la diferencia entre ambos tipos de software es básicamente filosófica: El open source se basa en que al compartir, el código el programa resultante es de mayor calidad, mientras que el software libre se basa en que prohibir compartir va contra la naturaleza humana. La filosofía del open source se basa en un decálogo de "diez mandamientos" totalmente compatibles con los cuatro en los que se basa el software libre. En el sitio web de la OSI está la lista completa de las licencias de software libre actualmente aprobadas y entendidas como tales. Como corolario, cualquier programa bajo este tipo de licencia debe proporcionar el código fuente al menos y su usuario tiene derecho a utilizarlo y/o modificarlo en beneficio propio.

    • La GNU GPL (General Public License o licencia pública general) licencia GNU GPL posibilita la modificación, redistribución del software, pero únicamente bajo esa misma licencia. Se la conoce normalmente como licencia GPL simplemente. Añade a lo comentado anteriormente, que si se reutiliza en un mismo programa código "A" licenciado bajo licencia GNU GPL y código "B" licenciado bajo otro tipo de licencia libre, el código final "C", independientemente de la cantidad y calidad de cada código "A" y "B" debe de estar bajo la licencia GNU GPL. Por tanto si utilizamos en nuestro desarrollo código bajo este tipo de licencia, la licencia de nuestro software ha de ser como mínimo igual de restrictiva que esta. Este concepto se introduce con el denominado copyleft con el objeto de garantizar que cualquier aprovechamiento de un programa con licencia pública general redunde sobre la comunidad. Para conocer más sobre esta licencia puede acceder a lo siguientes documentos:
    • La LGPL (Lesser General Public License o Library General Public License). Permite la utilización simultánea de software con este tipo de licencia en desarrollos libres y/o privativos (no libres). Es por tanto mucho menos restrictiva que la GNU GPL. Lo único que impide o protege esta licencia es a realizar versiones comerciales del producto en cuestión, pero no a realizar versiones comerciales con el producto como una herramienta (librería o bliblioteca). Támbién obliga a registrar todos los cambios realizados por terceros, de manera que no afecten a la reputación del autor original del software.De cualquier forma siempre deben estar disponibles los fuentes de las modificaciones realizadas a la misma, amen de reconocer el trabajo del autor. No obstante si puede ser utlizada con software propietario. Para entender mejor las diferencias de esta librería con la GPL puedes visitar los siguientes enlaces:
    • La licencia Apache es una descendiente de la licencias BSD (ver siguiente apartado), no es GPL (GNU GPL). Esta licencia te permite hacer lo que quieras con el código fuente (incluso forks y productos propietarios sin entregar el código) la única restricción es que les reconozcas su trabajo. Yo entidendo que básicamente es la misma que la LGPL pero no es necesario que las modificaciones sean públicas.

    • La licencia BSD es la licencia de los sistemas BSD (Berkeley Software Distribution) desarrollados por la Universidad de Berkeley. Esta licencia permite el uso del código fuente en software no libre, con lo que es muy similar a la LGPL. La diferencia consiste en que en la licencia BSD ni siquiera es necesario mencionar a los autores, ni proporcionar el código fuente y por tanto es básicamente equivalente a efectos operativos al freeware del que se proporcionan los fuentes o al software de dominio público. Aunque por este mero hecho, se considera elegante mencionar la procedencia. Existen muchos un artículos interesantes considerando estos aspectos. Recomiendo leer entre otros:


  • Shareware. Es software generalemente no libre y con precio reducido que simplemente de dejan probar gratuítamente durante un breve periodo de tiempo. Generalmente también puede obtenerse el código fuente por una módica cantidad.
Bien, con esto creo que básicamente está categoriazadas las licencias. Paso a continuación a mencionar otras licencias por su importancia:

  • La licencia de Java es una licencia particular más con características muy especiales. Sun desde el principio ha pretendido y conseguido crear un leguaje de programación estándar que permita ejecutarse bajo casi todas las plataformas. Su licencia original pone tanto énfasis en que no aparezcan extensiones incompatibles de su lenguaje, que hasta al desarrollar un programa en java, siendo estrictos deberíamos ceder un porcentaje de los beneficios del mismo a la propia Sun. Esto hasta la fecha no ha sucedido, y en la actualidad Sun está planeando modificar dicha licencia para que sea mucho más permisiva. El principal temor que Sun ha mostrado públicamente a la hora de hablar de la apertura del código fuente de Java y que a la vez ha servido de excusa para evitar precisamente esto durante varios años, es la posibilidad de fragmentación del estándar. La licencia de Java de Sun insiste que todas las implementaciones sean “compatibles”. Esto dio lugar a una disputa legal entre Microsoft y Sun, cuando éste último alegó que la implementación de Microsoft no daba soporte a las interfaces RMI y JNI además de haber añadido características ‘’dependientes’’ de su plataforma. Sun demandó a Microsoft y ganó por daños y perjuicios (unos 20 millones de dólares) así como una orden judicial forzando la acatación de la licencia de Sun. Como respuesta, Microsoft no ofrece Java con su versión de sistema operativo, y en recientes versiones de Windows, su navegador Internet Explorer no admite la ejecución de applets sin un conector (o plugin) aparte. Sin embargo, Sun y otras fuentes ofrecen versiones gratuitas para distintas versiones de Windows.
  • La licencia Mozilla es otra licencia importante denominada comúm mente MPL (de Mozilla Public License). Es una licencia de código abierto y sofware libre utilizada por el navegador Mozilla y sus productos derivados. Cumple completamente con los 10 postulados del open source y los 4 del software libre, sin embargo la MPL deja abierto el camino a una posible reutilización comercial no libre del software, si el usuario así lo desea, sin restringir la reutilización del código ni el relicenciamiento bajo la misma licencia. Sin embargo el código fuente está restringido a ciertos paises que no mantienen buenas relaciones con Estados Unidos.

  • La CDDL es la última de las licecias importantes que ha salido al mercado. También es de Sun, con el objeto de liberar parte de su software y que sea integrado con otras herramientas ya de por sí open source. Su objetivo es permitir la integración de Java con las diferentes distribuciones de Linux del mercado. También están publicando su sistema operativo OpenSolaris bajo esta licencia. Está basada en la MPL, y por tanto es muy similar en sus términos a la LGPL, permitiendo compartir el código utilizado por el programa con otros de diferente procedencia y guardarse para el autor la libertad de publicar o no los resultados. Permite la inclusión de cualquier otro tipo de código, sea cual sea la licencia del mismo, en la solución completa. Además, ésta licencia solo se adjudica a la totalidad del producto al que hace referencia y no a sus partes. Dichas partes podrían estar bajo esta licencia o bajo cualquier otro tipo de licencia al extraerse del software original completo. Lo que si mantiene siempre esta licencia son los derechos de propiedad intelectual del autor original.


  • La licencia Licencia Creative Commons es una licencia de reciente creación, pero básicamente para trabajos multimedia. No permite la alteración del producto original, ni tampoco su comercialización. Sólo permite su reproducción tal cual, mencionando al autor.

Para saber más sobre licencias, o te han quedado dudas, puedes consultar los siguientes artículos:

Espero que tú que estás leyendo este artículo hayas aprendido tanto como yo mientras lo redactaba. Si detectas cualquier error, por favor no dejes de comunicarmelo en tus comentarios. Gracias...

Mi objetivo (mi mini-ERP)

Bien, el objetivo no es otro que realizar una aplicación de control y gestión distribuida, que permita su acceso desde diferentes equipos a través de red local y/o internet, y que si es posible, corra en diferentes dispositivos clientes como ordenadores, pda's e incluso teléfonos móviles. La aplicación en sí creo que no es significativa, ya que puede ser mas o menos amplia. Lo que importa es el camino que se hace al andar. Mi aplicación en concreto está muy delimitada a un ámbito, lo que es una gran ventaja y reduce su tamaño ya de por sí pequeño. Esto no es vanal, ya que me propongo realizarla prácticamente sólo y en un tiempo medio (meses). Si no fuera así, posiblemente estaría fuera de mi alcance y esto también es fundamental tenerlo claro desde el principio.

En cuanto a los medios, serán naturalmente escasos puesto que como he mencionado antes, me toca hacerlo sólo. Por tanto tendré que aprovechar al máximo lo ya inventado, en vez de inventar yo. En otras palabras, utilizar lo mejor posible lo que internet me ofrece. Por tanto será básico el OpenSource, con sus ventajas e inconvenientes.

Resumiendo:
  • Aplicación de control. Esto implica que el software necesita obligatoriamente que utilizar mensajes para comunicarse con los destinatarios a controlar y por extensión, comunicaciones.
  • Aplicación de gestión. Hay que facturar y contabilizar los procesos a controlar. Hay que realizar estadísticas de dichos procesos, etc.
  • Aplicación con acceso distribuído desde red local y/o internet.
  • Que corra en diferentes tecnologías clientes (plataformas), como ordenadores, pda's, ...
Después de todo, al final mi objetivo no es otro que un sistema de gestión de recursos o ERP para mi empresa, pero en un ambito concreto y reducido, tratando de no reinventar la rueda. Por tanto, voy a tratar de aprovechar las herramientas adicionales que ya están suficientemente posicionadas en el mercado en mi favor y por tanto quedan automáticamente descartadas la contabilidad y la facturación en sí, pero no los procesos para alimentar a estas herramientas.