Definición de Open Source

Anuncio
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ú.
Descargar