El juego de las patentes

Una patente es un derecho, otorgado por el Estado a un inventor. Este derecho permite al titular de la patente impedir que terceros hagan uso de la tecnología patentada. El titular de dicha patente es el único que puede utilizar la tecnología asociada a la patente o puede permitir a otros utilizarla (la tecnología). Este permiso se hace a cambio de dinero o algo que le interese al titular de la patente.

Las patentes tienen una duración prefijada de 20 años para que el inventor amortice durante este tiempo la inversión que ha tenido que realizar para llegar a desarrollar la tecnología patentada. Posteriormente, la tecnología patentada, queda a dispositición del dominio público pero este tiempo en el mundo del software es muy desfasado. Imaginemos que Microsoft patentara los procesadores de texto…sólo Microsoft podría desarrollar procesadores de texto a no ser que otra empresa que quisiera hacerlo le pagara por el consentimiento. Esto provocaría que no hubiese apenas competencia en el mundo de los procesadores de texto y por tanto no hubiera innovación o mejoras.

La patente es un concepto que proviene del sector industrial pero que también se aplica al mundo del software solo que se aplican sobre funcionalidades, algoritmos, representaciones y otras acciones que se pueden llevar a cabo con una computadora.  Este detalle provoca que el software y en particular el software libre se vea afectado de forma negativa.

El motivo de esto es que normalmente las pymes están obligadas a innovar para poder tener éxito en un mercado en el que las grandes empresas tienen el monopolio. Estas empresas tienen los recursos limitados y el uso de software libre es una alternativa sensata para innovar ya que al disponer del código fuente no se parte de cero sino que pueden reutilizar código de cosas ya hechas. Esto sería lo ideal, que las pymes dedicaran sus recursos a innovar pero las patentes obligan a comprobar que cualquier tecnología que utilicen en sus desarrollos no esté patentada y les provoquen futuros litigios, con el consiguiente coste asociado.

El hecho de patentar software puede provocar que no se pueda avanzar en diferentes campos de la informática y lo malo es que la empresa que ha patentado el software puede no tener ningún tipo de interés, es decir, ha hecho la patente para que otras empresas no puedan utilizar dicha tecnología. Estas empresas son las que se llaman «troles de patentes«.

Para patentar una idea uno tiene que ir a una oficina de patentes para explicar de qué se trata y, en caso de no estar patentado, pagar una cantidad y ya está, tiene la idea patentada. Se supone que dicha idea, para patentarse, debe «innovar» pero las oficinas de patentes no son muy estrictas en este aspecto porque si lo fueran patentarían mucho menos y recaudarían menos. Estos últimos días hemos visto patentes tan absurdas como que Apple patentara el desbloqueo con el dedo en los terminales con pantalla táctil pero hay otras como que Microsoft patente el apagado de apagado del ordenador para sistemas de entornos de ventana o que en 2004 Microsoft depositó una patente sobre el doble click en los dispositivos con capacidades limitados (como móviles y PDAs). Esta táctica se utiliza para luchar con otras empresas del sector y pedir indemnización al resto por usar lo patentado. Hoy en día, Microsoft gana más dinero por la venta de terminales con sistema operativo Android que terminales con sistema windows phone y esto es por tema de patentes.

Node.js

Node.js es un entorno Javascript que se utiliza en la parte servidora que se basa en eventos asíncronos. Esto significa que podemos crear un servidor que atienda peticiones y en caso de tener que realizar operaciones de I/O (entrada/salida) poder dedicarse a atender otras peticiones hasta que la operación I/O finalice, en cuyo momento seguirá realizando operaciones con el resultado de esa operación, sin que haya bloqueo alguno. Cuando se habla de servidor se habla de servidor TCP.

Node.js está basado en la máquina virtual V8 de Google que se utiliza en Chrome. Por lo que se puede leer dicha solución es muy rápida, más que Ruby, Python, o Perl.

Node.js utiliza un único thread. Esto supone ventajas en cuanto a eficiencía en casos extremos de carga. Por ejemplo, supongamos un servidor web Apache que recibe muchísimas peticiones. Cada petición obliga a Apache a arrancar un proceso para responderla (es una relación 1:1) mientras que con node.js siempre hay un único proceso que va encolando las peticiones y se van respondiendo muy rapidamente (es una relación 1:N). En caso de  que haya que realizar alguna operación de I/O, se realiza dicha operación y no se espera a que acabe sino que se sigue con el resto de peticiones y cuando se haya acabado la operación de I/O se manejará el evento y seguirá procesando el resultado de dicha petición (la que generó la operación de I/O) para seguir con el resto de peticiones cuando acabe. Esto es una forma de manejar entornos multi-hilo de una forma similar a la que se hace en JavaScript en la parte cliente.

La parte de desventajas viene cuando pensamos cómo utilizar node.js cuando tenemos un equipo con multiples cores. En este caso hay que utilizar alguna solución de balanceamiento en la que node.js puede ejecutarse en cada core en diferentes puertos y cuando el proceso que está arrancado en el proceso principal recibe una petición se lo pasa a uno de los que se están ejecutando de forma secundaria de forma que el proceso principal reparte el trabajo y cuando los secundarios acaban generan un evento en el proceso principal y le devuelven los datos.

Una descripción traducida de cómo funciona node.js es la siguiente:

El día comienza cuando un sirviente despierta al rey y le pregunta si necesita algo. El rey le da al sirviente una lit¡sta de tareas y se vuelve a dormir. El sirviente reparte las tareas al resto de sirvientes y se ponen a trabajar. Cuando un sirviente acaba una tarea, va a informar al rey. El rey sólo atiende a un sirviente a la vez, le escucha y hay veces que el rey le da más tareas al sirviente.  Aquí si nos fijamos, los sirvientes trabajan en paralelo pero sólo hay un sirviente informando al rey, de tal forma que el rey se puede concentrar mejor.

El proceso para instalar node.js en una máquina Debian es:

  1. Instalar los paquetes básicos:
    apt-get install libcurl4-openssl-dev openssl-dev openssl-lib
    build-essential libssl-dev curl git-core
  2. Descargar el código fuente de node.js:
    wget http://nodejs.org/dist/v0.6.3/node-v0.6.3.tar.gz
  3. Descomprimir el fichero descargado:
    tar zxvf  node-v0.6.3.tar.gz
  4. Meternos en el directorio creado:
    cd node-v0.6.3
  5. Compilar e instalar node.js:
    ./configure
    make
    make install

En este punto ya lo tenemos instalado. Para comprobar que funciona vamos a realizar un ejemplo básico.

En la parte servidora creamos el fichero test.js que contiene el siguiente código:

var http = require('http');
http.createServer(function (req, res) {
 res.writeHead(200, {'Content-Type': 'text/plain'});
 res.end('Hello World\n');
}).listen(8124);
console.log('Server running at port 8124');

En el código se puede ver lo siguiente:

  • Se carga la librería HTTP para poder montar un servidor web basado en node.js:
    var http = require('http');
  • Se aceptan peticiones por el puerto 8124 y cuando se reciba alguna petición se devolverá el texto «Hello World»:
    http.createServer(function (req, res) {
          res.writeHead(200, {'Content-Type': 'text/plain'});
          res.end('Hello World\n');
    }).listen(8124)
  • Se muestra por consola el mensaje «Server running at port 8124»:
    console.log('Server running at port 8124');

Para probar el ejemplo debemos ejecutar node en la parte servidora:

node test.js

Y en la parte cliente, abrir un navegador y poner la url:

http://[ip del equipo que ejecuta node.js]

Para ver más ejemplos con node.js recomiendo visitar:

Para ver más documentación:

Historia de LaTeX

TeX fué creado por Donald Knuth, profesor de la universidad de Stanford a raiz de los problemas que le estaba teniendo con la impresión en los volúmenes I a III de su obra «El arte de programar ordenadores». A raiz de los problemas relacionados con la baja calidad de la tipografía utilizada empezó a desarrollar su propio lenguaje de tipografía, TeX.

El desarrollo duró nueve años y Donald Knuth le puso una licencia libre a TeX de modo que cualquiera pudiera editar su código y distribuirlo siempre y cuando sea con un nombre diferente a TeX. Esto lo hizo debido a que quería un software de calidad y sin fallos, y no se fiaba que la gente que modificara el código como él quería. En 2008 Donald Knuth dejó de mejorar el código y desde entonces sólo se han corregido fallos. Tan seguro estaba Donald Knuth de la calidad de su código que ofrecía un cheque de 2.56 $ a todo aquel que encontrara algún fallo (los hubo).

El modo de versionamiento utilizado en TeX es curioso porque comenzó en 3 y actualmente está en la versión 3.1415926 y esto es debido a que cada nueva versión añade un número al anterior acercándolo a π.  En una especie de testamento, Donald Knuth quiere que al morir se cambie la versión de TeX a π y ya nadie podrá modificarlo.

Leslie Lamport debido a que gastaba mucho tiempo en maquetar los documentos empezó a desarrollar una serie de script o macros aplicables a TeX que maquetaban los documentos haciendo que el usuario de TeX sólo tuviera que preocuparse de lo que escribía y no de cómo quedaría. Esta serie de scripts se llamó LaTeX y actualmente es una referencia por la calidad de los documentos producidos.

FreeNAS

FreeNAS es una distribución derivada de FreeBSD orientada a proporcionar un entorno NAS completo.  El proyecto lo comenzó  Oliver Cochard  en 2005 pero fué en 2006 cuando hubo una versión estable. FreeNAS partió del proyecto mOnOwall y comenzó porque el autor quería una solución de almacenamiento basada en software libre.

FreeNAS tiene una interfaz gráfica muy simple realizada con PHP lo que facilita su uso y agiliza su configuración.

FreeNAS proporciona los siguientes servicios de almacenamiento remoto:

  • AFP: Este tipo de share permite compartir servicios entre dispositivos Apple. Es una buena elección si todos los equipos de la red utilizan Mac OS X.
  • CIFS: Este tipo de share es accesible por Windows, Mac
    OS X, Linux y BSD pero es más lento que los shares NFS. Si la red contiene solamente equipos Windows es una buena elección.
  • NFS: Este tipo de share es accesible por Mac OS X, Linux, BSD,
    and versiones profesionales/enterprise de Windows. Es una buena elección si la red contiene diferentes sistemas operativos.
  • FTP: Este tipo de share proporciona un acceso rápido desde cualquier sistema operativo que utilice un cliente FTP . FreeNAS soporta encriptación y chroot para FTP.
  • SSH: No es un tipo de share per se pero se puede utilizar para transferir ficheros de forma encriptada.
  • iSCSI: FreeNAS exporta unidades de disco que son accesibles por clientes que ejecuten el software iniciador iSCSI. Este tipo de share es muy interesante porque algunas soluciones de virtualización lo utilizan.

En el interior de FreeNAS los datos se pueden almacenar en diferentes sistemas de ficheros, destacando ZFS que tiene características tan interesantes como la deduplicación a nivel de bloque, snapshots, la comprobación de la integridad y reparación automática.

La instalación de FreeNAS requiere poco espacio por lo que puede realizarse en un pendrive o en una tarjeta compact flash para utilizar los discos duros unicamente para almacenar datos y en caso de actualizar la versión de FreeNAS tener que cambiar el dispositivo USB o compact flash. Esto es interesante para utilizarlo en equipos que incorporan un conector usb interno o equipos embebidos.

En caso de utilizar varios discos duros FreeNAS puede utilizar diferentes esquemas de almacenamiento a través de software:

  • RAID 0
  • RAID 1
  • RAID 5
  • JBOD
  • RAID 5+0
  • RAID 5+1
  • RAID 0+1
  • RAID 1+0
  • RAID Z

El RAID Z es una solución similar al RAID 5 que soluciona el problema del agujero de escritura.

Para instalarlo y utilizarlo recomiendo leer la publicación de Agosto de 2011 de la revista BSD Magazine

 

Revista BSD Magazine

Para las personas que estén interesadas en los sistemas operativos de la familia BSD, existe una revista online bastante interesante, BSD Magazine.

Para poder tener acceso a los contenidos hace falta registrarse proporcionando la dirección de mail y abrir una url que aparece en un correo  de confirmación, todo esto sin dar ningún dato personal.

Hay artículos muy interesantes como por ejemplo:

  • Una guía para principiantes de Packet Filter (2011-11)
  • Comparativa entre FreeBSD 8.2 y Ubuntu Server (2011-11)
  • Cómo usar VideoLAN (2011-9)
  • Cómo montar un servidor de detección de intrusiones con NetBSD  (2011-9)
  • Guía básica de FreeNAS (2011-8)
  • Encriptación de discos con FreeBSD (2011-7)

Podría seguir con muchos más ejemplos porque hay contenidos desde el año 2007 así que prefiero que los veais vosotros mismos.

Packet Filter y pfSense

Packet Filter es un firewall que fué publicado hace diez años, en 2001, en OpenBSD debido a problemas de licencias con el firewall (Ip Filter) que incluia anteriormente. Los problemas estaban relacionados con que la licencia que utilizaba IP Filter no permitía la libre modificación del código por lo que realmente no es software libre. En su licencia original ponía:

«Redistribution and use in source and binary forms are permitted provided that this notice is preserved and due credit is given to the original author and the contributors,»

Esto no aclaraba si se podía modificar el código o no (en caso de no poderse modificar, supondría que IP Filter no era libre y sería un problema para el proyecto OpenBSD). Ante este dilema, el autor, Darren Reed, dejó claro su postura en una modificación de la licencia que hizo posteriormente, en la que añadió a lo anterior lo siguiente:

«Yes, this means that derivative or modified works are not permitted without the author’s prior consent.»

Esto provocó por parte del lider de OpenBSD, Theo de Raadt, la eliminación del paquete del repositorio de OpenBSD, el que se consideraba uno de los sistemas operativos libres más seguros, se quedó sin firewall desde Mayo del 2001 hasta finales de año en que Packet Filter, una alternativa propuesta por Daniel Hartmeier era una alternativa sensata para utilizarse.

Con el tiempo, Packet Filter ha sido una buena elección porque a día de hoy se considera una referencia en el ámbito de los firewalls. OpenBSD lo incluye a la última versión pero FreeBSD no, ya que hay ciertas actualizaciones en Packet Filter que obliga a cambiar los ficheros de reglas.

PfSense es una distribución iniciada en 2004 derivada de FreeBSD en la que se le ha añadido un interfaz gráfica web muy clara. Debido a que el kernel de BSD está muy optimizado, PfSense (y OpenBSD + Packet Filter) funciona bastante bien en equipos «limitados». En mi caso lo he probado en un equipo Soekris 5501 instalándolo en una memoria compact flash y aún teniendo sólo 256 MD de ram y una CPU de 433 MHz funciona muy fluido en una empresa pequeña. Los datos que aparecen en su página web de que se ha descargado más de un millón de veces  y que hay más de 100.000 IPs públicas que lo utilizan indica que es un producto muy utilizado

VirtualBox

Para las prácticas del master es interesante tener varias máquinas, cada una de ellas configurada para una tarea concreta. Para poder hacer esto he decidido utilizar máquinas virtuales en mi ordenador y dentro de las opciones de virtualización disponibles la herramienta VirtualBox.

VirtualBox es una herramienta de virtualización para arquitecturas x86 y AMD64/Intel64 desarrollada por Oracle. Frente a otras herramientas existentes, VirtualBox es Open Source con una licencia GPL 2.

Se puede instalar en equipos con sistemas operativos GNU/Linux, Mac OS X, OS/2 Warp , Microsoft Windows, y Solaris/OpenSolaris.

Los sistemas operativos que se pueden instalar en una máquina virtual de VirtualBox puede ser Windows 2000, XP, 2003, Vista, 2008 Server, Windows 7, Linux, Mac OS X, Solaris 10U5+, OpenSolaris y los sistemas operativos de la familia BSD.

Aquí se hace una comparación de VirtualBox con otras soluciones de virtualización existentes y queda patente que es una solución muy potente a tener en cuenta para usar en nuestros equipos o empresas. Tiene algunas características que facilitan su uso:

  • Headless operation: Consiste en arrancar máquinas virtuales sin necesitar una interfaz gráfica para hacerlo.
  • El acceso a las máquinas virtuales se hace a través de RDP (Remote Desktop Protocol) que se puede hacer a través del escritorio remoto de Windows o con cualquier cliente de terminal server en Linux. En otras soluciones hace falta utilizar herramientas específicas para esto (en VmWare ESXi por ejemplo).
  • Tiene soporte para iSCSI por lo que se puede conectar una máquina virtual a un servidor de almacenamiento iSCSI directamente.

La instalación de máquinas virtuales no tiene mucho secreto, básicamente consiste en definir el sistema operativo de la máquina virtual, el disco y por último instalar el sistema operativo. Se pueden encontrar manuales de cómo hacerlo en la propia página web de VirtualBox.

El software libre en las empresas españolas

El 21 de Septiembre de 2011, CENATIC (Centro Nacional de referencia de Aplicación de las TIC basadas en fuentes abiertas) publicó un documento en el que detallan el uso de software libre en las empresas españolas entre los años 2010 y 2011.
Para cualquiera que quiera tenerlo, puede acceder a la url http://www.cenatic.es/dossier/encuesta-ine y descargarlo.
En este documento se toman como muestra 28.980 empresas de toda España, 16.715 de 10 ó más empleados y 12.265 de menos de 10 empleados. Esta cifra no es representativa, ya que en España hay 3.250.576 empresas, por lo que la muestra no llega a ser ni un 1% pero nos da una visión de cómo evoluciona el uso del software en las empresas estudiadas.

Los datos que destacan son:
– 3 de cada 4 empresas españolas, con más de diez personas empleadas, y 5 de cada 10 microempresas, utilizan software libre.
– En las grandes empresas es donde más extendido está el uso de los sistemas operativos libres (47, 2%), los servidores web (47%) y las aplicaciones de tipo ERP o CRM (34%).
– Las aplicaciones ofimáticas de código abierto son las soluciones libres más utilizadas entre las pymes (53,9% de las pequeñas empresas y 51,5% de las medianas).
– 9 de cada 10 empresas TIC apuestan por el uso del software de código abierto en sus infraestructuras TI.
– En todas las Comunidades Autónomas, el software libre está ampliamente implantado en la infraestructura TI de las empresas.
– El porcentaje de empresas que utilizan sistemas operativos libres ha aumentado del 9,5% en enero de 2010 al 26,40% en enero de 2011.

Desde mi punto de vista, este último dato es muy importante. En un año ha aumentado el uso de sistemas operativos libres un 17% mientras que en el periodo que va del año 2007 al 2010 ha aumentado un 1% anual (del 6.80% al 9.50%).

Otra información que se detalla posteriormente es el campo al que pertenece la empresa a la que se le ha hecho el estudio y se puede observar que en los sectores de la construcción, industria y servicios ha habido un aumento importante en el uso del sistema operativo libre Linux y mucho más cuanto estas empresas tienen menos de 25
0 empleados.

Estos dos datos me hacen pensar sobre los motivos de este aumento de uso del software del código abierto en las empresas españolas, los cuales creo que son los siguientes:
– Las empresas confian más y más en el software de código abierto porque consideran que es una alternativa real al software privativo ya que el software libre tiene
bastante madurez .
– Las empresas han notado el efecto de la crisis y han decidido usar el software de código abierto por la crisis, de este modo se ahorran costes.

Git

En la asignatura de casos de estudio nos han presentado la herramienta git.
Inicialmente no era una herramienta que, desde mi punto de vista, aportase mucho ya que vengo utilizando durante años la heramienta svn.

Cuando escuché que fué Linus Torvalds quién la creó y que se utiliza en el desarrollo del kernel de Linux pensé que algo debía tener que la diferencie del resto de herramientas de control de versiones que hay.

Cuando lo estudias más a fondo te das cuenta de que aporta cosas interesantes:

– Cada copia local que hay es en realidad una copia del repositorio completo. Esto en svn no es así, hay un repositorio central en el que está toda la historia de los cambios. Esta diferencia permite en git ver los cambios entre revisiones del software sin tener que acceder al repositorio central en el que están almacenados todos los cambios ya que en realidad esta información la tenemos en nuestro ordenador que es una copia del repositorio principal. Esto hace replantearse la filofía de trabajo ya que no hace falta tener conectividad permanente entre nuestro equipo y el repositorio principal. Normalmente en svn, cuando queremos dar por buena una modificación o mejora del código tenemos que indicárselo al repositorio haciendo un commit pero en git no es así, podemos hacer un commit en nuestro repositorio local y cuando tengamos conectividad con el repositorio principal, indicar que lo actualice con los commits que hemos hecho (push).Esto mismo hace que no haga falta tener conectividad por red continua. Si nos vamos de vacaciones y trabajamos en un proyecto con nuestro equipo, los cambios que hagamos y queramos dar por buenos (commit) se podrán subir al repositorio principal cuando tengamos conectividad con el repositorio principal.

– Git es más óptimo que svn en el espacio de disco que ocupan los cambios, lo que hace que sea ideal para proyectos grandes. He probado a descargarme el repositorio del kernel 2.6 y ocupa 1.1 GB, imaginaos si esto no estuviera bien resuelto cuánto ocuparía…

– Git tiene un potente sistema de ramas (branch) en las que se puede dividir el proyecto en partes y unirlas posteriormente. Esta característica es muy interesante para proyectos grandes en los que diferentes grupos se encargan del desarrollo de partes separadas.

– Git es muy rápido y esto ha sido demostrado por la gente de Netscape. Está especialmente indicado para proyectos grandes porque no pierde rapidez según crece.

Por estas cosas he decidido probarlo y sacar mis propias conclusiones.

Presentación del master en software libre

En una de las últimas clases del curso Arquitectura de servidores con software libre impartido por el grupo Libresoft de la Universidad Rey Juan Carlos, dieron una charla del Master oficial en Software Libre. El hecho de ser impartido por la misma gente que el curso me hizo interesarme ya que quedé bastante contento tanto con el contenido como por la forma de llevar el curso y lo mucho que se involucraban los profesores.

La primera impresión del master es buena ya que para tener posibilidades de acceder primero te hacen una pequeña entrevista. Esto me parece buena idea porque he estado en cursos anteriormente y había gente que no estaba nada preparada, retrasando al resto de los alumnos.

Las personas que han organizado el master han pensado en los alumnos y lo han planificado de tal forma que se sólo haga falta asistir a clase los Jueves y los Viernes, en caso de querer cursarlo en un año o los Jueves o los Viernes, en caso de querer cursarlo en dos años (como es mi caso). Las clases comienzan a partir de las 16:00 horas por lo que es compatible con los trabajos. Otro tema interesante es que no es totalmente necesario asistir a clase porque muchas de estas clases se graban en video y posteriormente se publican en internet. Las cuestiones que nos hacen los profesores y la documentación utilizada en el master están en el moodle del master. Unas preguntas que me hago son, ¿por qué no se graban todas las clases en video? ¿Por qué matricular a tan pocos alumnos? Esta última pregunta es debido a que en clase hay como mucho 20 alumnos pero, si se grabaran todas las clases y se publicaran no creo que hubiera problema alguno en que un alumno matriculado en otro país pudiera seguir las clases a través de internet y obtuviera la titulación.

Los profesores que nos van a impartir las asignaturas son la mayoría personas conocidas del curso,  fueron profesores o vinieron a dar alguna charla sobre un tema en concreto. Algo interesante es que son jóvenes y puedes hablar con ellos de casi cualquier cosa, te escuchan y razonan contigo de una forma muy coherente. Creo que el tener la posibilidad de hablar con ellos y que puedan aconsejarte, con la experiencia que tienen, es interesante.Esto mismo pasa también con los compañeros que aunque asistan como alumnos cada uno tiene experiencias diferentes en el mundo del software libre.

En cuanto al tema de asignaturas, las hay muy variadas,  economía, historía, aspectos legales, presentación de tecnologías con software libre, implantación de sistemas con software libre, motivación de desarrolladores, comunidades de software libre…como se puede observar, pretenden dar una visión global del software libre y no de una cosa en concreto. El especializarnos en un ámbito ya depende de nosotros pero primero debemos tener una base estable.

Inicialmente no hay muchas asignaturas técnicas, que es lo que esperaba que hubiera, y hay asignaturas que supongo que no me gustarán…pero espero corregirme según avance el master.