Archivo de la Categoría ‘Cuadernos’
¿Qué es el Software Libre?
Mucho se ha hablado ya del Software Libre y de los Modelos de Negocio asociados al mismo, pero parece que muchos no terminan de saber qué es y en qué consiste exactamente.
Así que a raíz de un “twitt” de @micronauta en el que hace referencia al mapa conceptual del Software Libre actualizado, creo conveniente recogerlo y añadir la definición dada por la GNU España, que transcribo literalmente (vamos, copiar y pegar):
¿Qué es el Software Libre?
El software libre es, ante todo, una forma ética de entender el software o los programas de ordenador. Eso incluye tanto la fabricación de los programas como su distribución y su utilización. Por lo tanto, el software libre no está orientado (ni es patrimonio exclusivo) únicamente a la gente capaz de escribir un programa, o a la gente que posee empresas y por tanto está en condiciones de hacer negocio con los programas de ordenador. Por contra, el software libre tiene que ver con el usuario tanto como con los desarrolladores o los comerciantes. O tal vez incluso más, ya que es la libertad de los usuarios el único objetivo del movimiento del software libre.
Así que el software libre como concepto y el movimiento que lo hace crecer y evolucionar es un concepto (y un movimiento) ético. Mucha gente se confunde y considera el movimiento del software libre como un movimiento eminentemente técnico. Mientras que esto último puede ser cierto para otros movimientos similares (por ejemplo, el movimiento Open Source) no lo es en absoluto cuando hablamos de software libre.
Pero, ¿qué es, exactamente, el software libre?. La definición mantenida por la Fundación para el Software Libre dice que para que un programa de ordenador sea considerado software libre debe respetar cuatro derechos o libertades considerados como fundamentales para el usuario de ese programa:
-
Los usuarios deben tener derecho a utilizar el programa, sin restricciones, donde quiera, como quiera y para lo que quiera.
-
Los usuarios deben tener derecho a estudiar cómo funciona el programa y, si lo desean, a adaptarlo a sus necesidades específicas.
-
Los usuarios deben tener derecho a distribuir copias a sus amigos, empleados, conocidos, empleadores y, en fin, a cualquier persona que deseen.
-
Los usuarios deben tener derecho a mejorar el programa, publicar y distribuir sus mejoras al público (o a quien deseen) de modo que más personas salgan beneficiadas de los cambios.
Mucha gente se pregunta por qué es tan importante para nosotros que el usuario disponga de esos derechos, hasta el punto de montar un movimiento y ser parte integrante (¡y trabajadora!) del mismo. Sin duda eso requiere de una explicación, que presentamos aquí repasando derecho por derecho.
El derecho a utilizar
El primer derecho o libertad, el que trata sobre el derecho a utilizar software, puede sorprender. ¿Acaso no tiene la gente derecho a utilizar un programa que ha comprado en una tienda, por ejemplo?. La respuesta es que cuando una persona “compra” un programa de ordenador que no es software libre (programas privativos, los llamamos) por lo general no dispone del derecho de utilización ilimitada que nosotros consideramos inevitable: el usuario está limitado a utilizar el programa para determinados objetivos (prohibido usar este programa de forma comercial) o en determinados sitios (prohibido usar este programa en el país X y el país Y) o en un número determinado de máquinas (prohibido usar este programa en más de una máquina al mismo tiempo). Estas restricciones son muy habituales cuando hablamos de software privativo, y pensamos que son inadmisibles. Por eso hacemos énfasis en el derecho a utilizar: es vulnerado constantemente por las compañías y empresas que fabrican y distribuyen software privativo.
El derecho a entender
Por otra parte tenemos la segunda libertad para el usuario: el derecho a entender cómo funcionan los programas que nos distribuyen, y a adaptarlo a nuestras necesidades. De nuevo, este derecho fundamental se ve vulnerado cuando de software privativo hablamos: por lo general, el software privativo se distribuye en forma de ejecutables (equivalentes a los ficheros “.exe” en entornos windows) sin que le acompañe el código fuente correspondiente. El código fuente de un programa es su forma entendible y modificable por un programador. En cierto modo, es como el manual de instrucciones de algún aparato. Si compramos un mando a distancia universal, ajustado de fábrica a nuestro televisor, y no viene con instrucciones, no seremos capaces de utilizarlo en nuestro otro televisor, el de la cocina. Por contra, si tenemos acceso a las instrucciones, podremos sintonizar el mando con tantos televisores como queramos. En eso consiste adaptar los artefactos que utilizamos a nuestras necesidades. En el caso de los programas de ordenador, para ello necesitamos el código fuente.
El derecho a distribuir
De aquí nos vamos al tercer derecho o libertad: el derecho a distribuir programas de ordenador de forma gratuita o, alternativamente, cobrando algo a cambio de hacerlo. Este es tal vez el punto que mejor comprenden los usuarios de programas privativos cuando quieren aprender qué es el software libre. Es natural, ya que la industria del software privativo hace contínuos esfuerzos para intentar convencer a la sociedad de que copiar programas de ordenador es algo que no debe hacerse. Nosotros, por el contrario, pensamos que el poder ser copiado sin necesidad de grandes recursos (con una unidad de grabación basta) y la característica peculiar de que la copia no pierde calidad respecto al original no es algo malo: por el contrario, es casi lo mejor que tiene el software. Copiar programas de ordenador y distribuirlas es algo que beneficia a la sociedad. Es de sentido común. Realizar copias de programas privativos es algo ilegal en la mayoría de los países. Por eso proporcionamos software libre: es perfectamente legal copiarlo. De esta forma tanto el usuario como la sociedad se benefician, y nadie sale perdiendo (la copia original no funciona peor por haber hecho una o millones de copias). Es importante un detalle: el software libre no tiene por qué ser gratis. Es perfectamente posible distribuir software libre a cambio de dinero. Así es como pueden ganarse la vida los programadores y distribuidores. Ahora bien, eso no justifica el hecho de vulnerar los derechos de la gente que paga por obtener una copia del programa: el usuario puede distribuir sus propias copias, cobrando por ello si lo desea.
El derecho a mejorar
El último derecho o libertad fundamental, el derecho a mejorar el software y distribuir las mejoras, es tal vez el que más controversia genera. Obviamente, el usuario de software privativo no puede mejorar los programas que utiliza: aunque quisiera y supiera hacerlo, por lo general no tiene acceso al código fuente. Y aunque lo tuviera (puede distribuirse el código fuente y no obstante no ser software libre) sería ilegal modificar ese código fuente. Sin embargo, el software libre siempre se distribuye con su código fuente, y además es totalmente legal modificarlo. La objeción típica a este derecho suele ser: “bien, vale, tengo el código fuente. Pero YO no sé modificarlo para mejorarlo. ¿De qué me sirve entonces tenerlo?”. La respuesta a esa pregunta (muy habitual y muy comprensible) es que para mejorar o modificar un programa no es necesario hacerlo uno mismo. De la misma forma que una persona puede llevar su coche a un taller a que se repare (o se le introduzcan algunas mejoras) y además puede hacerlo al taller que más le guste (el fabricante del coche no puede poner restricciones) el usuario de software debe poder contratar a un profesional (o a una empresa, o pedir a su primo el informático que lo haga gratis) que mejore el software libre que ha comprado o que ha descargado de internet. Si el mismo usuario compra o descarga software privativo y quiere mejorarlo, entonces depende totalmente de la compañía que le vendió (o proporcionó via internet) el programa. Si la compañía decide que las mejoras deseadas por el usuario no son rentables o no son convenientes por alguna otra razón, no las incorporará al programa. El resultado es que con software privativo el usuario siempre pierde. Con software libre, por el contrario, el usuario es libre y no está atado a ninguna compañía ni empresa. Además, el usuario puede distribuir el programa que incorpora sus mejoras gratuitamente o por un pago (aquí aplica el tercer derecho explicado anteriormente). Y otra cosa importante: el usuario también tiene derecho a no distribuir sus mejoras si no quiere. Una persona puede descargar o comprar software libre, introducirle mejoras, y no redistribuir ni hacer públicas dichas mejoras.
Como hemos visto, estos cuatro derechos o libertades a los que llamamos las libertades fundamentales del usuario de software libre no son caprichosas ni aleatorias: se trata de un concepto muy pensado cuyo único objetivo es hacer que la sociedad sea celosa de sus derechos también cuando compra o descarga programas de ordenador.
Arquitectura “Net-Centric” - Visión General
Las arquitecturas NetCentric utilizan las tecnologías de Internet para conectar personas y procesos de negocio. De acuerdo a este modelo, la "lógica de presentación" se muestra y ejecuta habitualmente en un Navegador Web presente en un PC, PDA, teléfono o cualquier otro canal de acceso.
A diferencia de un entorno Cliente/Servidor , el contenido visualizado en un navegador a menudo contiene varios elementos de información multimedia obtenidos de diferentes servidores mediante el acceso a través de una red TCP/IP . Una Intranet es un sistema TCP/IP cerrado, como una red corporativa que limita el acceso sólo a usuarios autorizados. Si la red TCP/IP constituye un sistema abierto accesible por cualquiera en el mundo, se utiliza el nombre de Internet . El término Extranet se usa cuando la red TCP/IP conecta a determinados "socios comerciales " (clientes, proveedores, colaboradores, etc.) con usuarios de una Intranet.
Los clientes en una arquitectura NetCentric - también llamados Clientes Web - se comunican con Servidores Web mediante el protocolo HTTP . El diseño de este protocolo permite al cliente establecer una conexión con un Servidor Web sobre una red TCP/IP . El cliente realiza entonces una solicitud de documentos - llamados páginas web - o de cualquier otro tipo de elemento de información multimedia, como gráficos, animaciones, audio, video o código ejecutable como Applets Java y Controles ActiveX . Una vez que el servidor responde a la petición, el cliente cierra la conexión con el Servidor tan rápidamente como la abrió. Desde el punto de vista del usuario, es una simple interacción petición/respuesta - pide algo, lo recibe y éste es el final del diálogo con el servidor.
Los Clientes Web también son capaces de enviar información de vuelta al Servidor Web utilizando el protocolo HTTP. Esta información que se envía de esta manera normalmente suele proporcionarla el proprio usuario en un formulario HTML , o bien es generada por código que se ejecuta en el navegador, como es el caso de Applets Java, Controles ActiveX o algún tipo de lenguaje de script . Cuando no se ejecuta ningún código (o muy poco) en el cliente Web, nos referimos a éste como "cliente ligero " o "thin client ". En cambio, cuando es necesario ejecutar grandes cantidades de código en el cliente Web, lo llamaremos "cliente pesado " o "thick client ". Típicamente, los clientes pesados se utilizan con propósitos de validación, para proporcionar un elemento de presentación complejo (como una estructura en árbol) o cuando es deseable que parte de la lógica de negocio resida en la capa de cliente.
La comunicación HTTP entre Clientes Web y Servidores Web sólo es capaz de enviar y recibir páginas estáticas . Para proporcionar contenido dinámico que incluya información específica del usuario o información extraída de una Base de Datos , se hace necesaria la utilización de programas adicionales en la parte del Servidor para crear estas páginas. Originariamente, estos programas se ejecutaban en el Servidor Web usando la Interfaz de Entrada Común (Common Gateway Interface) o CGI y se solían escribir en Lenguaje C o PERL . En cualquier caso, dado que estos programas se volvieron cada vez más sofisticados, se introdujeron soluciones de "middleware " adicionales llamadas Servidores de Aplicaciones Web (Web Application Servers ). Dichos Servidores de Aplicaciones Web permitieron el uso de tecnologías especializadas en proporcionar contenido dinámico como ASP (ActiveServer Pages), JSP (JavaServer Pages) y Servlets . Así mismo, estos servidores se diseñaron para gestionar la ejecución de programas más que para servir páginas web, de forma que pudieran concentrarse en la escalabilidad , balanceado de carga , tolerancia a fallos , optimización de rendimiento e interfaces de "back-end " mejores de lo que los Servidores Web permitían por sí solos. Aunque a día de hoy aún quedan algunos sistemas heredados (legacy) que usan CGIs para proporcionar contenido dinámico, prácticamente todos los desarrollos nuevos para aplicaciones transaccionales NetCentric se apoyan en algún tipo de Servidor de Aplicaciones Web como JBoss , Apache Tomcat , BEA WebLogic , IBM WebSphere , etc.

Determinar el número de capas a desplegar y cómo distribuir la lógica de negocio entre dichas capas constituyen decisiones clave de diseño . Un enfoque estándar contruir aplicaciones consiste en separar dicha lógica en tres capas principales: presentación , lógica de aplicación y gestión de los datos . En una arquitectura de 3 capas (three-tier ), éstas están físicamente distribuídas de tal forma que cada una se ejecuta en una máquina diferente y se comunica con las demás a través de la red.
En la arquitecturas NetCentric, la tendencia es mover la lógica de negocio a la capa del Servidor de Aplicaciones Web, e implementar únicamente la presentación en la capa cliente. Por esta razón, los sistemas NetCentric se implementan típicamente en más de tres capas (arquitecturas "n-tier" ). Adicionalmente, el Servidor de Aplicaciones Web también maneja la comunicación con las Bases de Datos así como con los Sistemas Heredados.
Arquitectura “NetCentric” - Concepto y Definición
Actualmente la gran mayoría de los Sistemas de Información y las correspondientes aplicaciones que utilizamos en Internet están basados en la Arquitectura Net-Centric o NetCentric .
"NetCentric " constituye un Modelo de Arquitectura que amplía las posibilidades - tanto dentro como fuera de la empresa - más allá de lo que había sido posible con los modelos tradicionales de "Cliente/Servidor" y "Host".
Originalmente, el concepto fue presentado al Departamento de Defensa de los Estados Unidos de América (DoD) por David Alberts, Vice Admiral Art Cebrowski y John Gartska mediante una serie de artículos a finales de los 90. El DoD estableció el modelo netcentric como la base arquitectónica de su concepto del Global Information Grid (GIG), para integrar todos sus sistemas de información. Conforme al DoD Architectural Framework , se pretende proporcionar un Modelo de Arquitectura consistente que permita compartir información y reutilizar sus componentes a lo largo del DoD. La visión del DoD sobre NetCentric es cumplir con el Modelo de Arquitectura Orientada a Servicios o SOA ( Service-Oriented Architecture ), así como de XML y otros estándares de Servicios Web (Web Services ).
Existen varias definiciones del término en el mercado tecnológico, pero según la Wikipedia :
"Una arquitectura ligera, masivamente distribuída y horizontal que distribuye componentes y/o servicios a través de una cadena de valor de información empresarial utilizando Tecnologías de Internet y otros Protocolos de Red como principal mecanismo para sustentar la distribución y procesamiento de Servicios de Información."
Sin embargo, podríamos definirlo:
"Una arquitectura que soporta múltiples canales de acceso electrónico a fuentes de información dispares (Bases de Datos internas, servidores de información externas) accesibles por usuarios internos, clientes y proveedores mediante tecnologías abiertas y estándares comúnmente aceptados."
En este sentido, los "múltiples canales de acceso " se refieren a diferentes dispositivos o mecanismos por los que los usuarios acceden a la información, como pueden ser ordenadores personales (PCs), teléfonos móviles , asistentes personales digitales (PDAs), quioscos , teléfonos , etc.
En cuanto a las tecnologías implicadas y los estándares comúnmente aceptados, nos referimos a TCP/IP , HTML , WAP , ActiveX , DCOM , CORBA , Java , COM+ y demás.
Por todo ello, NetCentric posibilita compartir datos y contenidos entre personas y aplicaciones . Estas aplicaciones proporcionan las capacidades de publicación , interacción o transaccionalidad , constituyendo la base del Comercio Electrónico o eCommerce .















