rretamar
June 4th, 2008, 02:27 AM
¿ Qué es el llamado "Software libre" ?
Prólogo: En esta serie de entregas intentaré aclarar que es el software libre, intentando de que las explicaciones puedan ser comprendidas incluso por gente sin conocimientos de informática. Para ello algunos conceptos serán simplificados y no se entrará en detalles para no confundir al lector. Espero que luego de leer estos textos tengas una idea algo más clara sobre esta modalidad que está creciendo día a día en forma imparable, y es una muestra más de que las utopías pueden a veces hacerse realidad.
¿ Empezamos ?
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
Para para empezar con el tema...explicaré brevemente (y de la forma más sencilla posible...no tengas miedo) cómo se hacen los programas. Entender esto es muy importante
para poder comprender lo que viene después. Empecemos.
Hacer un programa es en cierta forma similar a preparar una buena comida: se parte de una receta, se "cocinan" los ingredientes y se obtiene un delicioso (si todo sale bien)
menú.
Para que un programa funcione, las computadoras necesitan que dicho programa esté escrito en lo que se conoce como "lenguaje de máquina" o "binario", esto es una serie de
"órdenes" muy pero muy sencillas, que combinadas entre sí logran órdenes más complejas para que el programa haga lo que deseamos hacer. Hacer un programa escribiéndolo
directamente en código de máquina, por más sencillo que sea, es directamente una pesadilla. Para que te hagas una idea, un simple programa que pide que se ingresen dos
números en la pantalla, los sume y muestre el resultado, puede tener varias páginas de largo.
A continuación y a modo de ejemplo se muestra cómo se ve un binario:
http://i32.tinypic.com/123uo74.gif
Un programa en "código de máquina" o también llamado "binario"
¿ Ehhhhhh ? ¡ Eso parece chino, japonés o sánscrito !
Efectivamente. La computadora entiende el programa escrito en "lenguaje de máquina", pero un humano no.
Entonces...¿ Hay una manera más fácil de hacer un programa, que no sea escribirlo en japonés...perdón....en "lenguaje de máquina" ?
¡ Bingo ! Ahí quería llegar. Normalmente los programas no se escriben así (suspiro de alivio....). En lugar de eso, se usa un "lenguaje de programación", que es una forma ENTENDIBLE POR UN HUMANO para decirle a la PC que haga lo que queremos que haga. Estos lenguajes utilizan instrucciones muy fáciles de comprender y que facilitan enormemente la escritura de programas muy complejos.
Ejemplo de un programa escrito en un lenguaje de programación: suma de dos números (este lenguaje del ejemplo se llama "Pascal"):
Program Sumador;
Var
A, B, Resultado: Integer; // Voy a usar tres variables que van a almacenar un número entero cada una
Begin
WriteLn('Programa Sumador Criollo'); // Mostrar texto en la pantalla
A := 5; // Le asigno el valor de 5 a la variable A
B := 2; // Le asigno el valor de 2 a la variable B
Suma := A + B; // Guardo en la variable "suma" el resultado de la suma de las variables A y B
Write('El resultado es: ');
Write(Suma); // Muestro en la pantalla el valor de la variable "Suma"
End. // Fin del programa
Como se ve en el ejemplo anterior, incluso sin haber visto nunca un programa, es mucho más entendible que el "lenguaje de máquina". Las frases que se encuentran a la
derecha de las líneas (luego de // ) son "comentarios", o sea texto que agrega el programador y si bien no cumple ninguna función dentro del programa en sí, sirven para
explicar qué hace cada línea. Muy útil por ejemplo si otra persona mira luego el programa y necesita entender lo que va haciendo. Hay muchos lenguajes de programación,
y cada uno tiene su propio "vocabulario". Algunos son más fáciles de "leer" que otros, pero todos son entendibles por una persona en mayor o menor grado.
Otros lenguajes de programación: C, Basic, C++, Fortran, Java, Cobol, PHP, Lisp, Logo, Forth, Python, Ruby, Perl, Ensamblador, Prolog, xBase, etc. etc.
(la lista es muy extensa).
Especialización: Hay lenguajes de programación de propósito general, pero otros están orientados a realizar programas para tareas muy específicas. Por ejemplo PHP se usa para programar sitios web (el mismo foro/portal "Ubuntu Forums" está hecho con PHP), Fortran para programas de uso científico (muy apto para cálculo numérico), Cobol en aplicaciones de gestión administrativa como las usadas en bancos, Prolog es apto para uso en inteligencia artificial, Logo "el de la tortuguita" se emplea para uso educativo (introducir a los niños a la programación), etc. etc.
A este conjunto de instrucciones entendibles por los humanos y que "describen" las cosas que tiene que hacer un programa usando un lenguaje de programación, se lo llama
"código fuente". Volviendo a las comparaciones con la cocina, podríamos comparar al código fuente con la "receta" para preparar una apetitosa comida.
Pero...la computadora no entiende eso...por sí misma no entiende ni jota de un lenguaje de programación....sólo entiende japonés...o mejor dicho, sólo entiende
programas en "código de máquina" (o "binarios"). Ahí entra en escena el héroe de la película. Que no es Chuck Norris...sino un programa muy especial llamado "Compilador".
¿ Qué hace el compilador ?
En pocas palabras: un compilador hace las veces de "traductor". CONVIERTE EL CODIGO FUENTE EN LENGUAJE DE MAQUINA (O "BINARIO"). Recién después de esta "traducción" la
computadora podrá hacer funcionar nuestro programa y nos podremos enterar cuánto es la suma de cinco y dos. Un programa "en código de máquina" (o sea que ya está
compilado) tiene la extensión .exe ,entre otras (en Windows). Los archivos con las extensiones DLL, SYS, COM y OCX también son "binarios".
En síntesis:
* Las computadoras necesitan que los pogramas estén en "código de máquina" (también llamado "binario") para que puedan funcionar.
* El código de máquina es chino básico para un humano. Prácticamente inentendible, a tal punto que hacer un programa directamente de esa forma sería una pesadilla.
* Los humanos escriben los programas usando un lenguaje de programación, que pueden entender fácilmente. Estas intrucciones se llaman "código fuente" (la "receta").
* Entonces, muestro héroe, el señor compilador, convierte ese código fuente en código de máquina para que la computadora pueda entenderlo y ejecutarlo.
Código fuente (escrito por un humano) ---> Compilador (traductor) ---> Binario (en lenguaje de máquina y entendible por la computadora)
Receta ---> Chef + ingredientes + proceso de preparado y cocción ---> Una rica comida
De lo visto anteriormente se pueden sacar algunas conclusiones interesantes:
* Para hacer un programa, un programador lo escribe usando un lenguaje de programación, usa un compilador y obtiene el binario, que va a ser lo que ejecutará el usuario de ese programa. No es necesario tener el código fuente para que el programa se pueda ejecutar. Con sólo tener el binario basta para que pueda funcionar.
* Una vez obtenido el "binario", no es posible [1] conocer lo que hace el programa.
* Leyendo el código fuente de un programa, una persona puede saber lo que hace ese programa. Un programador (o un usuario muy avanzado) -provisto de un compilador- podría modificar ese código fuente, para corregir errores, agregar nuevas prestaciones al programa, o lo que se le ocurra.
Estas características aparentemente sin importancia, hacen una diferencia ENORME entre los diferentes modelos de licenciamiento/comercialización del software.
Basta por hoy. En la próxima entrega vendrá una introducción a las distintas licencias del software y sus implicancias para el usuario.
[1]: Esto no es del todo cierto: existe un proceso llamado "desensamblado", que es algo así como un "descompilador" que a partir de un binario permite obtener un listado
de instrucciones más o menos entendibles (código fuente). El problema es que lo que se obtiene no es directamente el "código fuente" original, sino algo mucho más
primitivo, y es tremendamente difícil de entender (además de muy extenso...un simple programa para sumar dos números al ser descompilado puede convertirse en un código
fuente de decenas y decenas de líneas). Volviendo a la analogía "culinaria", es como intentar obtener la receta exacta a partir de un plato ya cocinado y que tenga muchos
ingredientes.
No todo es blanco o negro: existen lenguajes que en lugar de un compilador, cuentan con un "intérprete" que lee el código fuente y lo ejecuta "en el momento". Normalmente esto se traduce en una mayor lentitud de ejecución con comparación con el binario "compilado", amén de algunas ventajas. Hay otros matices como los compiladores "just in time" y los bytecodes, pero es algo que excede por mucho a este texto introductorio.
Saludos ! :D
Prólogo: En esta serie de entregas intentaré aclarar que es el software libre, intentando de que las explicaciones puedan ser comprendidas incluso por gente sin conocimientos de informática. Para ello algunos conceptos serán simplificados y no se entrará en detalles para no confundir al lector. Espero que luego de leer estos textos tengas una idea algo más clara sobre esta modalidad que está creciendo día a día en forma imparable, y es una muestra más de que las utopías pueden a veces hacerse realidad.
¿ Empezamos ?
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
Para para empezar con el tema...explicaré brevemente (y de la forma más sencilla posible...no tengas miedo) cómo se hacen los programas. Entender esto es muy importante
para poder comprender lo que viene después. Empecemos.
Hacer un programa es en cierta forma similar a preparar una buena comida: se parte de una receta, se "cocinan" los ingredientes y se obtiene un delicioso (si todo sale bien)
menú.
Para que un programa funcione, las computadoras necesitan que dicho programa esté escrito en lo que se conoce como "lenguaje de máquina" o "binario", esto es una serie de
"órdenes" muy pero muy sencillas, que combinadas entre sí logran órdenes más complejas para que el programa haga lo que deseamos hacer. Hacer un programa escribiéndolo
directamente en código de máquina, por más sencillo que sea, es directamente una pesadilla. Para que te hagas una idea, un simple programa que pide que se ingresen dos
números en la pantalla, los sume y muestre el resultado, puede tener varias páginas de largo.
A continuación y a modo de ejemplo se muestra cómo se ve un binario:
http://i32.tinypic.com/123uo74.gif
Un programa en "código de máquina" o también llamado "binario"
¿ Ehhhhhh ? ¡ Eso parece chino, japonés o sánscrito !
Efectivamente. La computadora entiende el programa escrito en "lenguaje de máquina", pero un humano no.
Entonces...¿ Hay una manera más fácil de hacer un programa, que no sea escribirlo en japonés...perdón....en "lenguaje de máquina" ?
¡ Bingo ! Ahí quería llegar. Normalmente los programas no se escriben así (suspiro de alivio....). En lugar de eso, se usa un "lenguaje de programación", que es una forma ENTENDIBLE POR UN HUMANO para decirle a la PC que haga lo que queremos que haga. Estos lenguajes utilizan instrucciones muy fáciles de comprender y que facilitan enormemente la escritura de programas muy complejos.
Ejemplo de un programa escrito en un lenguaje de programación: suma de dos números (este lenguaje del ejemplo se llama "Pascal"):
Program Sumador;
Var
A, B, Resultado: Integer; // Voy a usar tres variables que van a almacenar un número entero cada una
Begin
WriteLn('Programa Sumador Criollo'); // Mostrar texto en la pantalla
A := 5; // Le asigno el valor de 5 a la variable A
B := 2; // Le asigno el valor de 2 a la variable B
Suma := A + B; // Guardo en la variable "suma" el resultado de la suma de las variables A y B
Write('El resultado es: ');
Write(Suma); // Muestro en la pantalla el valor de la variable "Suma"
End. // Fin del programa
Como se ve en el ejemplo anterior, incluso sin haber visto nunca un programa, es mucho más entendible que el "lenguaje de máquina". Las frases que se encuentran a la
derecha de las líneas (luego de // ) son "comentarios", o sea texto que agrega el programador y si bien no cumple ninguna función dentro del programa en sí, sirven para
explicar qué hace cada línea. Muy útil por ejemplo si otra persona mira luego el programa y necesita entender lo que va haciendo. Hay muchos lenguajes de programación,
y cada uno tiene su propio "vocabulario". Algunos son más fáciles de "leer" que otros, pero todos son entendibles por una persona en mayor o menor grado.
Otros lenguajes de programación: C, Basic, C++, Fortran, Java, Cobol, PHP, Lisp, Logo, Forth, Python, Ruby, Perl, Ensamblador, Prolog, xBase, etc. etc.
(la lista es muy extensa).
Especialización: Hay lenguajes de programación de propósito general, pero otros están orientados a realizar programas para tareas muy específicas. Por ejemplo PHP se usa para programar sitios web (el mismo foro/portal "Ubuntu Forums" está hecho con PHP), Fortran para programas de uso científico (muy apto para cálculo numérico), Cobol en aplicaciones de gestión administrativa como las usadas en bancos, Prolog es apto para uso en inteligencia artificial, Logo "el de la tortuguita" se emplea para uso educativo (introducir a los niños a la programación), etc. etc.
A este conjunto de instrucciones entendibles por los humanos y que "describen" las cosas que tiene que hacer un programa usando un lenguaje de programación, se lo llama
"código fuente". Volviendo a las comparaciones con la cocina, podríamos comparar al código fuente con la "receta" para preparar una apetitosa comida.
Pero...la computadora no entiende eso...por sí misma no entiende ni jota de un lenguaje de programación....sólo entiende japonés...o mejor dicho, sólo entiende
programas en "código de máquina" (o "binarios"). Ahí entra en escena el héroe de la película. Que no es Chuck Norris...sino un programa muy especial llamado "Compilador".
¿ Qué hace el compilador ?
En pocas palabras: un compilador hace las veces de "traductor". CONVIERTE EL CODIGO FUENTE EN LENGUAJE DE MAQUINA (O "BINARIO"). Recién después de esta "traducción" la
computadora podrá hacer funcionar nuestro programa y nos podremos enterar cuánto es la suma de cinco y dos. Un programa "en código de máquina" (o sea que ya está
compilado) tiene la extensión .exe ,entre otras (en Windows). Los archivos con las extensiones DLL, SYS, COM y OCX también son "binarios".
En síntesis:
* Las computadoras necesitan que los pogramas estén en "código de máquina" (también llamado "binario") para que puedan funcionar.
* El código de máquina es chino básico para un humano. Prácticamente inentendible, a tal punto que hacer un programa directamente de esa forma sería una pesadilla.
* Los humanos escriben los programas usando un lenguaje de programación, que pueden entender fácilmente. Estas intrucciones se llaman "código fuente" (la "receta").
* Entonces, muestro héroe, el señor compilador, convierte ese código fuente en código de máquina para que la computadora pueda entenderlo y ejecutarlo.
Código fuente (escrito por un humano) ---> Compilador (traductor) ---> Binario (en lenguaje de máquina y entendible por la computadora)
Receta ---> Chef + ingredientes + proceso de preparado y cocción ---> Una rica comida
De lo visto anteriormente se pueden sacar algunas conclusiones interesantes:
* Para hacer un programa, un programador lo escribe usando un lenguaje de programación, usa un compilador y obtiene el binario, que va a ser lo que ejecutará el usuario de ese programa. No es necesario tener el código fuente para que el programa se pueda ejecutar. Con sólo tener el binario basta para que pueda funcionar.
* Una vez obtenido el "binario", no es posible [1] conocer lo que hace el programa.
* Leyendo el código fuente de un programa, una persona puede saber lo que hace ese programa. Un programador (o un usuario muy avanzado) -provisto de un compilador- podría modificar ese código fuente, para corregir errores, agregar nuevas prestaciones al programa, o lo que se le ocurra.
Estas características aparentemente sin importancia, hacen una diferencia ENORME entre los diferentes modelos de licenciamiento/comercialización del software.
Basta por hoy. En la próxima entrega vendrá una introducción a las distintas licencias del software y sus implicancias para el usuario.
[1]: Esto no es del todo cierto: existe un proceso llamado "desensamblado", que es algo así como un "descompilador" que a partir de un binario permite obtener un listado
de instrucciones más o menos entendibles (código fuente). El problema es que lo que se obtiene no es directamente el "código fuente" original, sino algo mucho más
primitivo, y es tremendamente difícil de entender (además de muy extenso...un simple programa para sumar dos números al ser descompilado puede convertirse en un código
fuente de decenas y decenas de líneas). Volviendo a la analogía "culinaria", es como intentar obtener la receta exacta a partir de un plato ya cocinado y que tenga muchos
ingredientes.
No todo es blanco o negro: existen lenguajes que en lugar de un compilador, cuentan con un "intérprete" que lee el código fuente y lo ejecuta "en el momento". Normalmente esto se traduce en una mayor lentitud de ejecución con comparación con el binario "compilado", amén de algunas ventajas. Hay otros matices como los compiladores "just in time" y los bytecodes, pero es algo que excede por mucho a este texto introductorio.
Saludos ! :D