miércoles, 5 de octubre de 2016

Información sobre Software Libre (Parte 2)



Lenguajes de programación

Dado que las personas tienen serias dificultades para leer, escribir y modificar programas en lenguaje de máquina, pero son esas mismas personas las que deben escribir y mantener los programas, se inventaron los lenguajes de programación. A diferencia de los lenguajes máquina, que están diseñados con el único objetivo de facilitar al procesador la ejecución de las instrucciones a gran velocidad (podríamos llamarlo también lenguaje de ejecución), la finalidad de los lenguajes de programación es facilitar a los seres humanos la comprensión, la escritura y la modificación de los programas. El objetivo primordial de un programa expresado en un lenguaje de computación no es ser ejecutado directamente por una computadora (lo que es imposible), sino comunicar, de manera comprensible para un ser humano, lo que una computadora debe hacer para resolver un determinado problema.

Dado que la naturaleza de la computación está íntimamente ligada a las matemáticas, los lenguajes de programación generalmente son una mezcla un tanto idiosincrática de notación matemática entrelazada con una gramática rudimentaria, por lo general basada (remotamente) en el inglés. A modo de ejemplo, veamos cómo se expresa el mismo programa citado más arriba en un lenguaje de programación muy difundido, llamado “C”:


Aún para personas que no conocen el lenguaje C, este texto es más comprensible que el programa en lenguaje de máquina de más arriba, ya que hay algunos elementos claramente distinguibles.

Quizás lo más notable para el lego sean las notas aclaratorias en castellano, entre los símbolos “/*” y “*/”. Estos textos (llamados comentarios) no afectan la función del programa, pero sí son importantes para dejar plasmada la intención del programador. En otras palabras, cumplen el rol de “notas adhesivas”, en las que el programador aclara el objetivo de cada parte del programa. Esto es muy útil cuando otro programador intenta comprender cómo funciona el programa, o incluso cuando el mismo programador debe revisar ese mismo programa un tiempo después de haberlo escrito.

Más allá de los comentarios, si sabemos que en inglés “if ” quiere decir “si” (condicional, no afirmativo), y que “else  quiere decir “de lo contrario”, es relativamente sencillo advertir que la sentencia “if (x<0)" determina si el valor de la variable “x” es menor que cero y que, dependiendo del resultado, el procesador ejecutará la sentencia que está entre el “if” y el “else”, o de lo contrario la que sigue al “else”. También es fácil identificar los mensajes que serán mostrados al usuario, aunque el segundo de ellos (“%f\n”) contenga en realidad una codificación propia e idiosincrática del lenguaje C: son los que están entre comillas. También es plausible, para quienes hablan inglés, que el nombre de la función sqrt() es una abreviatura de square root,  o “raíz cuadrada”.

El mismo programa puede escribirse en distintos lenguajes de programación. Por ejemplo, en el lenguaje Python :


O en el lenguaje Smalltalk:


De un lenguaje de programación a otro, las convenciones cambian, y también algunos aspectos técnicos, pero en todos ellos reconocemos elementos comunes, y sobre todo vemos que su objetivo es facilitar la confección, comprensión y modificación del programa, al permitir que el programador trabaje en un nivel de abstracción que es confortable a una mente humana.

Leyendo el código fuente de un programa es donde resulta más fácil apreciar la naturaleza cultural del software, tal como lo reconoce la Carta de Recife, firmada por los asistentes a la II Conferencia Latinoamericana y del Caribe de Software Libre (LACFREE II). El programa no resuelve un problema, describe una solución, de la misma manera que una ecuación describe una relación entre sus términos, o que una partitura musical describe una sinfonía. El programa en sí no es activo, no hace nada: es la máquina la que, siguiendo el mecanismo descrito por el programa, actúa sobre el medio para resolver el problema.

Compilación

Los programas escritos en un lenguaje de programación no son comprensibles directamente por una computadora. Recordemos que éstas sólo saben obedecer instrucciones codificadas en su lenguaje de máquina. Antes de poder ejecutar un programa escrito en un lenguaje de programación, debemos traducirlo al lenguaje de la máquina sobre la que queremos que corra. Para cada combinación de procesador, lenguaje y sistema operativo existen traductores automáticos, llamados compiladores.
Se trata de programas que leen un programa escrito en un lenguaje de programación y, a partir de él, generan uno escrito en el lenguaje de ejecución adecuado para una determinada combinación de procesador y sistema operativo. El programa en lenguaje de máquina que vimos más arriba, de hecho, es el resultado de pasar el texto del programa C que vimos a continuación por un compilador llamado “gcc”.

Aquí se vuelve evidente otra gran ventaja de los lenguajes de programación sobre el lenguaje de máquina: si mi programa está expresado en un lenguaje de máquina, sólo podré ejecutarlo en máquinas equipadas con un determinado tipo de procesador. Por el contrario, si lo escribí en un lenguaje de programación, en principio basta con hacerlo traducir por el compilador adecuado para que el programa pueda correr sobre el procesador que yo quiera.

Código fuente

En inglés, se conoce al programa escrito en lenguaje de programación como source code, y al programa expresado en lenguaje de máquina como object code (código objeto) o executable code (código ejecutable). En castellano, a menudo se traduce source code con la frase “código fuente”, que no es completamente fiel a la intención de la expresión inglesa. Tendría más precisión técnica traducirlo como “texto original” del programa, ya que se trata del texto tal como lo escribió el programador, mientras que el código ejecutable es el fruto de una traducción automática realizada por un compilador.

Si bien es posible ejecutar un programa en la computadora adecuada contando sólo con el código ejecutable, cuando se trata de comprender el funcionamiento de un programa, de modificarlo, o de hacerlo funcionar en una máquina diferente, es imprescindible disponer de su texto original, es decir de su “código fuente”.

Código fuente y Software Libre

Para ser considerado libre, un programa debe ser distribuido de tal modo que el usuario pueda, entre otras cosas, estudiar el modo de funcionamiento del programa, adaptarlo a sus necesidades y distribuir, bajo las mismas condiciones, programas derivados. Para que estas libertades sean practicables, no basta con que la licencia del programa las permita. Además, es necesario que el código fuente del programa esté a disposición del usuario, ya que de lo contrario las tareas de comprender, adaptar y mejorar el programa se vuelven tan complicadas que es casi lo mismo que si estuvieran prohibidas. Por eso la definición de Software Libre elaborada por la Free Software Foundation aclara que un programa no puede ser considerado libre si su código fuente, su texto original, no está disponible.

(Extraído de Guía Práctica de Software Libre, su selección y aplicación local en América Latina y el Caribe, publicación de UNESCO, escrita por Fernando de Rosa y Federico Heinz)

No hay comentarios.:

Publicar un comentario