Definición de Open Source Nota: La traducción de open source sería código fuente abierto , pero preferimos utilizar el termino en inglés, debido a su gran aceptación. Open source no sólo significa acceso al codigo fuente. Las condiciones de distribución de un programa open-source deben cumplir con el siguiente criterio: 1. Libre Redistribución La licencia no debe restringir a nadie vender o entregar el software como un componente de una distribución de software que contenga programas de distintas fuentes. La licencia no debe requerir ningun tipo de cuota por su venta. 2. Código Fuente El programa debe incluir el código fuente, y se debe permitir su distribución tanto como código fuente como compilado. Cuando de algun modo no se distribuya el código fuente junto con el producto, debera proveerse un medio conocido para obtener el código fuente sin cargo, a través de Internet. El código fuente es la forma preferida en la cual un programador modificará el programa. No se permite el código fuente deliberadamente confundido (obfuscation). Tampoco se permiten formatos intermedios, como la salida de un preprocesador, o de un traductor. 3. Trabajos Derivados La licencia debe permitir modificaciones y trabajos derivados, y debe permitir que estos se distribuyan bajo las mismas condiciones de la licencia del software original. 4. Integridad del Código Fuente del Autor. La licencia puede restringir la distribución de codigo fuente modificado sólo si se permite la distribución de "patch files" con el código fuente con el propósito de modificar el programa en tiempo de construcción. La licencia debe permitir explícitamente la distribución de software construido en base a código fuente modificado. La licencia puede requerir que los trabajos derivados lleven un nombre o número de versión distintos a los del software original. 5. No Discriminar Personas o Grupos. La licencia no debe hacer discriminación de personas o grupos de personas. 6. No Discriminar Campos de Aplicación. La licencia no debe restringir el uso del programa en un campo especifico de aplicación. Por ejemplo, no puede restringir su uso en negocios, o en investigación genética. 7. Distribución de la Licencia. Los derechos concedidos deben ser aplicados a todas las personas a quienes se redistribuya el programa, sin necesidad de obtener una licencia adicional. 8. La Licencia No Debe Ser Específica a un Producto. Los derechos aplicados a un programa no deben depender de la distribución particular de software de la que forma parte. Si el programa es extraido de esa distribución y usado o distribuido dentro de las condiciones de la licencia del programa, todas las personas a las que el programa se redistribuya deben tener los mismos derechos que los concedidos en conjunción con la distribucion original de software. 9. La Licencia No Debe Contaminar Otro Software. La licencia no debe imponer restricciones sobre otro software que es distribuido junto con el. Por ejemplo, la licencia no debe insistir en que todos los demás programas distribuidos en el mismo medio deben ser software open-source. 10. Ejemplos de Licencias. Las licencias GNU GPL, BSD, X Consortium, y Artistic son ejemplos de licencias que consideramos que cumplen con la definición de Open Source. Tambien la licencia MPL cumple con la definición. SOFTWARE LIBRE Mantenemos esta definición de software libre para mostrar claramente qué debe cumplir un programa de software concreto para que se le considere software libre. El ``Software Libre'' es un asunto de libertad, no de precio. Para entender el concepto, debes pensar en ``libre'' como en ``libertad de expresión'', no como en ``cerveza gratis'' [N. del T.: en inglés una misma palabra (free) significa tanto libre como gratis, lo que ha dado lugar a cierta confusión]. ``Software Libre'' se refiere a la libertad de los usuarios para ejecutar, copiar, distribuir, estudiar, cambiar y mejorar el software. De modo más preciso, se refiere a cuatro libertades de los usuarios del software: • La libertad de usar el programa, con cualquier propósito (libertad 0). • La libertad de estudiar cómo funciona el programa, y adaptarlo a tus necesidades (libertad 1). El acceso al código fuente es una condición previa para esto. • La libertad de distribuir copias, con lo que puedes ayudar a tu vecino (libertad 2). • La libertad de mejorar el programa y hacer públicas las mejoras a los demás, de modo que toda la comunidad se beneficie. (libertad 3). El acceso al código fuente es un requisito previo para esto. Un programa es software libre si los usuarios tienen todas estas libertades. Así pues, deberías tener la libertad de distribuir copias, sea con o sin modificaciones, sea gratis o cobrando una cantidad por la distribución, a cualquiera y a cualquier lugar. El ser libre de hacer esto significa (entre otras cosas) que no tienes que pedir o pagar permisos. También deberías tener la libertad de hacer modificaciones y utilizarlas de manera privada en tu trabajo u ocio, sin ni siquiera tener que anunciar que dichas modificaciones existen. Si publicas tus cambios, no tienes por qué avisar a nadie en particular, ni de ninguna manera en particular. La libertad para usar un programa significa la libertad para cualquier persona u organización de usarlo en cualquier tipo de sistema informático, para cualquier clase de trabajo, y sin tener obligación de comunicárselo al desarrollador o a alguna otra entidad específica. La libertad de distribuir copias debe incluir tanto las formas binarias o ejecutables del programa como su código fuente, sean versiones modificadas o sin modificar (distribuir programas de modo ejecutable es necesario para que los sistemas operativos libres sean fáciles de instalar). Está bien si no hay manera de producir un binario o ejecutable de un programa concreto (ya que algunos lenguajes no tienen esta capacidad), pero debes tener la libertad de distribuir estos formatos si encontraras o desarrollaras la manera de crearlos. Para que las libertades de hacer modificaciones y de publicar versiones mejoradas tengan sentido, debes tener acceso al código fuente del programa. Por lo tanto, la posibilidad de acceder al código fuente es una condición necesaria para el software libre. Para que estas libertades sean reales, deben ser irrevocables mientras no hagas nada incorrecto; si el desarrollador del software tiene el poder de revocar la licencia aunque no le hayas dado motivos, el software no es libre. Son aceptables, sin embargo, ciertos tipos de reglas sobre la manera de distribuir software libre, mientras no entren en conflicto con las libertades centrales. Por ejemplo, copyleft [``izquierdo de copia''] (expresado muy simplemente) es la regla que implica que, cuando se redistribuya el programa, no se pueden agregar restricciones para denegar a otras personas las libertades centrales. Esta regla no entra en conflicto con las libertades centrales, sino que más bien las protege. Así pues, quizás hayas pagado para obtener copias de software GNU, o tal vez las hayas obtenido sin ningún coste. Pero independientemente de cómo hayas conseguido tus copias, siempre tienes la libertad de copiar y modificar el software, e incluso de vender copias. ``Software libre'' no significa ``no comercial''. Un programa libre debe estar disponible para uso comercial, desarrollo comercial y distribución comercial. El desarrollo comercial del software libre ha dejado de ser inusual; el software comercial libre es muy importante. Es aceptable que haya reglas acerca de cómo empaquetar una versión modificada, siempre que no bloqueen a consecuencia de ello tu libertad de publicar versiones modificadas. Reglas como ``Si haces disponible el programa de esta manera, debes hacerlo disponible también de esta otra'' pueden ser igualmente aceptables, bajo la misma condición. (Observa que una regla así todavía te deja decidir si publicar o no el programa). También es aceptable que la licencia requiera que, si has distribuido una version modificada y el desarrollador anterior te pide una copia de ella, debas enviársela. En el proyecto GNU, utilizamos ``copyleft'' para proteger de modo legal estas libertades para todos. Pero el software libre sin ``copyleft'' también existe. Creemos que hay razones importantes por las que es mejor usar copyleft, pero si tus programas son software libre sin ser copyleft, los podemos utilizar de todos modos. Visita la página Categorías de Software Libre (18.000 caracteres) para ver una descripción de las diferencias que hay entre el ``software libre'', ``software con copyleft (`izquierdo' de copia)'' y otras categorías de software se relacionan unas con otras. A veces las normas de control de exportación del gobierno y las sanciones mercantiles pueden restringir tu libertad de distribuir copias de los programas a nivel internacional. Los desarrolladores de software no tienen el poder de eliminar o sobrepasar estas restricciones, pero lo que pueden y deben hacer es rehusar el imponerlas como condiciones de uso del programa. De esta manera, las restricciones no afectarán a actividades y gente fuera de las jurisdicciones de estos gobiernos. Cuando se habla de software libre, es mejor evitar términos como: ``regalar'' o ``gratis'', porque esos téminos implican que lo importante es el precio, y no la libertad. Algunos términos comunes tales como ``piratería'' conllevan opiniones que esperamos no apoyes. Visita la página Palabras y frases confusas que vale la pena evitar, donde encontrarás una discusión acerca de estos términos. También tenemos una lista de traducciones de ``software libre'' a varios idiomas. Por último, fíjate en que los criterios establecidos en esta definición de software libre requieren pensarse cuidadosamente para interpretarlos. Para decidir si una licencia de software concreta es una licencia de software libre, lo juzgamos basándonos en estos criterios para determinar si tanto su espíritu como su letra en particular los cumplen. Si una licencia incluye restricciones contrarias a nuestra ética, la rechazamos, aun cuando no hubiéramos previsto el problema en estos criterios. A veces un requisito de una licencia plantea una situación que necesita de una reflexión minuciosa, e incluso conversaciones con un abogado, antes de que podamos decidir si la exigencia es aceptable. Cuando llegamos a una conclusión, a veces actualizamos estos criterios para que sea más fácil ver por qué ciertas licencias se pueden calificar o no como de software libre. El software libre es libre, por que es bueno. El open source es código abierto, por que es mejor. bueno == éticamente correcto mejor == tecnicamente superior ¿Qué es el software libre? “Free software as in free speech, not free beer” por Antonio Gallego de Torres, autor del libro "Enrutadores Cisco". © 2004. Se autoriza la difusión total o parcial siempre que se cite procedencia. ¿Qué es el Software Libre? (Open/Free Software) El software libre o abierto son programas de ordenador que se distribuyen libremente. Esto significa (1) que las instrucciones que componen el programa (el código fuente) están disponibles para su estudio y cambio y (2) que son gratuitos (al menos en los términos generales que matizaremos después). (1) el código fuente del programa está disponible para su estudio y manipulación: Se puede cambiar el programa y volver a distribuirlo, siempre que al ponerlo de nuevo en circulación se haga en las mismas condiciones de gratituidad y libre disposición del código fuente en las que se encontraba antes (en definitiva, que siga siendo software libre). Esto se traduce en que programadores de todo el mundo pueden estudiar los programas, corregir errores, añadir funciones a los mismos o adaptarlos para resolver nuevos problemas. (2) son gratuitos: el software abierto/libre se puede conseguir (al menos en su forma de código 'fuente') de forma gratuita, pagando sólo los gastos del soporte en el que se entrega, como por ejemplo un CD, o bajándolo directamente de Internet. En términos generales las licencias de distribución de software libre (por ejemplo la licencia GNU/GPL) no obligan a distribuir el programa gratis, pero permiten que cualquiera pueda hacerlo al precio que le venga en gana. Esto se traduce en que al final sólo se cobran los soportes, los costes de distribución Vemos a continuación qué son los programas y sus distintas presentaciones (código fuente, binarios) para terminar explicando la diferencia fundamental entre software abierto y software cerrado. ¿Qué son los programas de ordenador? Son las instrucciones que permiten al ordenador realizar una función. Un ordenador es una máquina que sigue una lista de instrucciones y realiza una tarea. Para comunicarse con el exterior tiene instrucciones que toman información (del teclado, ratón, discos...) y otras que le permiten sacar información (a una impresora, a una pantalla, a unos altavoces, a otro ordenador...). Típicamente un programa de ordenador toma una serie de datos (con las instrucciones de entrada), procesa la información (con instrucciones u operadores lógicos y aritméticos) y manda el resultado (con las instrucciones de salida) a un dispositivo donde podemos percibir el resultado. Los ordenadores representan internamente toda la información (tanto la de los programas como la de los datos que los programas manipulan) usando dos estados: unos y ceros. Cómo son máquinas electrónicas, representan los ceros y unos con un voltaje (por ejemplo en tecnología TTL un cero son cero voltios y un uno son 5 voltios). Lo que a nosotros nos interesa es que internamente representan los programas y los datos como tiras de unos y ceros, de forma que la memoria de un ordenador puede presentar un aspecto similar al siguiente: 101001010101011011110101001010110101100101010100 010101001010100010101000010111010101010101010100 101010110100101101001010111010101101001010101011 etc... Recuerda: el ordenador es una máquina, de forma que los unos y ceros estarán representados por campos magnéticos (memorias, discos), voltajes (señales viajando entre componentes), etc... Los componentes del ordenador van leyendo esas tiras de unos y ceros, las agrupan y las van interpretando. Programar ordenadores introduciendo unos y ceros es una tarea extremadamente compleja, propensa a errores y muy poco productiva. Uno de los primeros programas de ordenador que los ingenieros escribieron fue el ensamblador/desensamblador, un programa que realiza una traducción literal de los códigos de las instrucciones básicas del ordenador (el lenguaje ensamblador) en las tiras de unos y ceros que el ordenador entiende (el lenguaje máquina). El aspecto de un programa en ensamblador es el siguiente: DIRECCION DE MEMORIA CONTENIDO EN Base16 (HEXADECIMAL) INSTRUCCIONES y PARAMETROS 0C5A:010A 0C5A:010D 0C5A:010F 0C5A:0111 0C5A:0113 0C5A:0117 0C5A:0119 0C5A:011A 0C5A:011B 0C5A:011E 0C5A:011F E8FCCC 740A 3C0D 7406 3A06D59A 75F0 4E C3 BF3400 49 0CFE CALL CE09 JZ 0119 CMP AL,0D JZ 0119 CMP AL,[9AD5] JNZ 0109 DEC SI RET MOV DI,0034 DEC CX OR AL,FE El programa en código máquina aparece representado en la segunda columna, sólo que en vez de en binario (unos y ceros) en hexadecimal (base 16), para que ocupe menos espacio. El programa equivalente escrito en forma simbólica, no numérica, viene en la tercera columna. Hay una correspondencia directa entre ambas columnas. El programa ensamblador traduce la tercera columna en la segunda, y el desensamblador convierte la segunda columna en la tercera. La primera columna representa la posición de la memoria donde se almacena la información (el programa y los datos). Aun así, los programas en ensamblador siguen siendo muy difíciles de escribir, dependen de la máquina y una vez escritos, de entender. El siguiente paso fue desarrollar traductores mas sofisticados, que tomaran un fichero escrito en un lenguaje más similar al natural, en el que expresar ideas más complejas (ideas lógicas y matemáticas). Los primeros lenguajes 'de alto nivel' fueron el Fortran y el LISP. Lenguajes modernos son el Java, el C/C++, SQL, Perl y Python. Hay cientos de lenguajes. El aspecto de un programa escrito en Perl es el siguiente #!/usr/bin/perl -w for ($i=0 ; $i<=100 ;$i++) { print $i,"\t",cuad($i),"\t",fact($i),"\n"; } sub cuad { return $_[0]*$_[0]; } sub fact { if ($_[0]<=1) { return 1; } else { return $_[0]*fact($_[0]-1); } } Un programa especial (denominado compilador o intérprete) traduce estos bloques de código 'de alto nivel' (el código fuente) en las tiras de unos y ceros que el ordenador entiende (el código máquina o los binarios). El programador puede concentrarse en pensar en la función del programa (pensar en el diseño, los algoritmos, la lógica del programa), codificar el programa en un lenguaje de alto nivel (como el Java o el perl) y dejar que el ordenador traduzca sus ideas en programas binarios que producen resultados reales (que hacen que la circuitería del ordenador trabaje). De esta forma un programa escrito en este tipo de lenguaje es más fácil de portar a otras máquinas. Es importante comprender que la operación contraria (generar a partir de un fichero binario el código fuente) es muy difícil de realizar, y prácticamente imposible de automatizar (es lo que en matemáticas se denomina 'funciones de una sólo vía'). Hay gente muy lista que es capaz de examinar sistemas complejos (como un motor, o un programa escrito en lenguaje máquina) y deducir cómo funcionan y cómo han sido diseñados y fabricados. A este proceso se le denomina 'ingeniería inversa'. Pero es un proceso muy laborioso, bastante artesanal, que exige mucha pericia y que es casi imposible de mecanizar. Ahora podemos entender la diferencia entre código abierto y cerrado: un programa cerrado se distribuye en forma binaria (un archivo de unos y ceros). En general no se permite cambiarlo, ni redistribuirlo, se dan pocos detalles de su funcionamiento interno, en muchos casos se prohíbe explícitamente la ingeniería inversa sobre el producto y si construimos otros sistemas que dependan de un producto cerrado corremos el riesgo de que el fabricante cambie en un futuro (a veces adrede) los detalles internos de funcionamiento y que deje nuestros productos inservibles (por haber sido construidos sobre su sistema y depender de su estructura interna). Esto es especialmente grave cuando afecta al sistema operativo, el programa básico que hace que un ordenador arranque y espere nuestras instrucciones. Si uno quiere escribir programas para un sistema operativo cerrado debe 'pasar por el aro' del fabricante, usar las herramientas que este le proporciona, de la forma que este le dice. Los servicios que un sistema operativo cerrado proporciona están disponibles para el fabricante antes que para el resto de la comunidad de programadores de aplicaciones, con la ventaja competitiva que esto supone. En cambio el software libre se distribuye tanto en forma binaria (para que podamos empezar a usarlo inmediatamente) como en su forma lógica (el código fuente), de forma que podemos estudiar el programa, modificarlo (si nos interesa o nos atrevemos), compilar nosotros mismos el código y generar un fichero binario de nuestra confianza. Además, al conocer la estructura interna podemos diseñar sistemas que se integren perfectamente con el software libre. ¿Qué es GNU/Linux? Es un clon de UNIX (un sistema operativo) que a principios de los 90 un estudiante Finlandés llamado Linus Torvalds empezó a escribir como parte de su proyecto de fin de carrera. Hizo algo muy notable: a medida que lo iba escribiendo lo 'colgaba' de Internet. Rápidamente empezó a coordinar a decenas de calaboradores desinteresados de todo el mundo. Para simplificar lo llamaremos Linux. Ahora Linux es el ejemplo más notable de Software libre, pero hay muchos otros proyectos cuya filosofía es similar. Actualmente Linus Torvalds sigue siendo el arquitecto principal de Linux, vive en California, USA, y hasta hace poco trabajaba en la empresa de microchips Transmeta. De aspecto tiene un aire a Bill Gates. El parecido se queda ahí. El principal mantenedor junto con Torvalds de la parte crítica de Linux, (el núcleo o kernel) es un brasileño de 19 años, Marcelo Tossati. Buscarle en Internet, ya veréis que pinta tiene. Las apariencias engañan. El anterior en su puesto fue el galés Alan Cox. Otros ilustres contribuyentes al Open Source son Richard Stallman, el mexicano Miguel de Icaza (Gnome), , Donald Becker (que trabaja en la NASA y en sus ratos libres escribió los módulos de red Ethernet y ahora desarrolla los sistemas paralelos denominados Beowulf), y cientos de programadores más. Otros ejemplos de software libre: Sistema operativos (GNU/HURD, Linux, FreeBSD...), programas de diseño (GIMP), Servidores de Internet (Apache), Servidores de Correo (Sendmail), Bases de datos (MySQL), Herramientas para programar en la mayoría de los lenguajes de programación (compiladores, intérpretes, enlazadores, ensambladores), toda clase de herramientas de seguridad y telecomunicaciones (nmap, ethereal, tcpdump, whisker...), entornos de ventanas tipo windows (Gnome, KDE, Windows Maker…), etc... etc... PARA PROBAR LINUX: Hay muchas distribuciones (Red Hat, Mandrake, Debian, SuSe, Linex), pero todas se basan en el kernel de Linux. Una de las distribuciones más sencillas para empezar es la Knoppix, (metes un CD en el PC, lo reinicias y automáticamente carga el Linux, con la ventaja de que al final apagas el ordenador y queda todo como estaba). PARA EMPEZAR A PROGRAMAR: Python es un magnífico lenguaje para empezar. Linux está escrito básicamente en C. Tienes dos libros muy buenos en español sobre Python y C en esta página. PREGUNTAS FRECUENTES ¿Qué significa GNU? Es el acrónimo recursivo de “GNU No es Unix” ¿Quién manda en el mundo del Software Libre? Nadie. ¿Quién organiza un proyecto de Software Libre? Buenos técnicos, 'elegidos' por su prestigio, que además son buenos gestores. Lo hacen en sus ratos libres (en sus otros ratos algunos trabajan en sitios como la NASA). ¿Por qué no lo venden y se hacen ricos? No lo hacen por dinero, sino por el prestigio de la comunidad 'hacker'. Además, por dinero es imposible competir con las grandes empresas (la llamada barrera de entrada) ¿Cómo se hace dinero? Los programadores de sistemas como Linux encuentran trabajo en todos lados. ¿Cómo se hace más dinero? Hay empresas que venden servicios alrededor del software libre (cobran por instalarlo, enseñar a usarlo, mantenerlo, ampliarlo, adaptarlo...). IBM se está forrando prestando servicios sobre Linux. ¿Ahora que han tenido éxito, no pueden cambiar de idea y cerrar los sistemas? No hay marcha atrás, la licencia es muy clara. ¿Y si los programadores se cansan de regalar su esfuerzo? No parece que vaya a ocurrir. Además, vendrían otros. Quizás tú.