Continuando con el traspaso del trabajo de mi memoria al blog, vamos con la segunda parte:

2.-El Problema del Lenguaje y el Código Fuente.

Otro concepto que es necesario aclarar, es el de “código fuente”. Sin embargo, antes de explicar lo que es el código fuente, y para entender su importancia, debemos aclarar el problema del lenguaje.

Las computadoras al ser máquinas que manejan información necesitan de un lenguaje. Teniendo en consideración que los circuitos de la máquina responden de manera simple y natural solamente a dos estímulos, esto es, la existencia o ausencia de voltaje, su lenguaje óptimo es uno binario. Esto significa que las letras, números, signos de puntuación y otros caracteres son sustituidos  por números de ocho dígitos, formados por la combinación de dos valores: ceros y unos que  se usan como abstracción de la presencia y ausencia de voltaje[1]. Existen varios lenguajes de máquina, pero el más utilizado es el lenguaje ASCII[2] y sus variantes.

Si el software es un conjunto de instrucciones para el computador, dichas instrucciones deben  estar escritas en lenguaje de máquina para que éste las entienda, pero, debido a la complejidad de dicho lenguaje (visualmente sólo se aprecian grupos de ceros y unos), trabajar con él es prácticamente imposible para el operador humano. Pese a lo anterior, en los primeros tiempos la interacción entre el computador y el operador  se hacía en lenguaje máquina, lo que acarreaba grandes problemas, y restringía de manera notable el campo de, la entonces incipiente, tecnología de la información. Este problema vino a ser solucionado con la invención de los compiladores.

Los compiladores son programas o herramientas encargadas de compilar. Un compilador toma un texto (código fuente) escrito en un lenguaje de alto nivel y lo traduce a un lenguaje comprensible por las computadoras (código objeto)[*].

La existencia de los compiladores permite a los programadores escribir sus programas en un lenguaje fácilmente comprensible para ellos y otras personas, lo que agiliza su trabajo y permite la rápida revisión en caso de errores, salvando todas las dificultades que el lenguaje máquina significa. Ese lenguaje se denomina lenguaje de programación de alto nivel[3].

El software antes de ser compilado, es decir cuando todavía se encuentra en lenguaje de programación, se denomina código fuente[*]. Teniendo acceso a éste, una persona con los conocimientos necesarios, puede  determinar el funcionamiento e incluso introducir modificaciones al software.

[1]La explicación del funcionamiento del lenguaje máquina escapa al objeto de este trabajo, pero, creemos que es necesario demostrar su complejidad, por lo que nos valdremos de un ejemplo, la palabra ANA en ASCII es 01000001 01001110 01000001.

[2]Sigla en inglés de “American Standar Code for Information Interchange” -Código Americano Estandarizado para el Intercambio de Información-. En estricto sentido el lenguaje ASCII consta de solamente 7 dígitos o bits, pero existen complementos que agregan un octavo dígito o bit con la finalidad introducir acentos y caracteres inexistentes en el idioma inglés, como por ejemplo el ISO-8859-1 que posee caracteres apropiados para el español, portugués, francés, danés y otras lenguas latinas

[3]Según el Diccionario Informático Alegsa, lenguaje de programación de alto nivel es un “tipo de lenguajes de programación que permite al programador escribir programas (algoritmos) que son más o menos independientes de un tipo particular de computadora (del hardware). Estos lenguajes son considerados de alto nivel porque son más parecidos al lenguaje natural humano y más lejanos al lenguaje de las máquinas.”

Thomas Vinje y Jonathan Zuck en la BCN (Biblioteca del Congreso Nacional)

Ayer Miércoles 18 de Junio ’08 tuve la suerte de ser invitado por el profesor guía de mi memoria a asistir a una charla/mesa redonda en la Biblioteca del Congreso Nacional, la que tenía como principales expositores a dos de las más importantes autoridades a nivel global en temas de interoperabilidad, defensa de la propiedad intelectual, estándares abiertos y mercado de software. Por un lado el señor Jonathan Zuck y por el otro, el abogado y profesor Thomas Vinje.

Para darles una idea rápida sobre la postura de cada uno diremos que el abogado Thomas Vinje participó en los famosos juicios contra Microsoft en Europa por sus productos Windows Media Player e Internet Explorer, juicios en los que la compañía salió derrotada. Por su parte el señor Jonathan Zuck preside una organización de empresas de software en EEUU (Association for Competitive Technology) y es un importante orador a favor de la protección del software mediante patentes, y otros mecanismos.

Las charlas partieron con una breve introducción del Senador Guillermo Vásquez quién deslizó una gran noticia: en la comisión del Senado el proyecto de ley que modifica la ley de propiedad intelectual mantiene la redacción del nuevo artículo 8º, que traía desde el Primer Trámite Constitucional. Lo que a mi parecer es una excelente noticia para el mundo del software libre y los usuarios de software en general. (Pronto les hablaré de ello).

Luego, tanto en la charla como en la mesa redonda, el abogado Vinje defendió y propuso como principios necesario para la existencia de un mercado sano de software:

1.- Una “adecuada” protección a la propiedad intelectual y

2.- La interoperabilidad y como elementos necesarios, entre otros, para que dicha interoperabilidad exista: a) el uso de estándares abiertos (en lo posible obligatorio para la autoridad y bajo criterios señalados por ésta); b) una legislación que permita la ingeniería inversa (bajo principios similares a los del fair use estadounidense).

Por su parte, Jonathan Zuck planteó que la interoperabilidad existe porque a los “grandes” sus clientes les “exigen” que interoperen con los “pequeños”, o sea casi por generación espontánea; además que los estándares no deben ser exigidos por la autoridad, sino que se deben crear como estándares “de facto”, para él este mecanismo es mucho más eficiente; además defendió un argumento (a mi gusto el más falaz de todos) sobre “el tipo de competencia que queremos” el que dice más o menos así: “Si permitimos y fomentamos los estándares abiertos y la ingeniería inversa, todo se estandariza y se unifica a tal nivel que significaría una tranca a la innovación, por lo que la competencia no se daría por el mejor producto, ya que todos serían iguales, sino simplemente, por el precio. Situación que por efecto de las economías de escala termina sacando a los pequeños del mercado -ellos no pueden entrar a una competencia de precios-”
Olvida que si hablamos de estandarización de formatos e ingeniería inversa restringida a lo necesario para lograr la interoperabilidad, no estamos estandarizando las aplicaciones en sí, ya que cada desarrollador podrá mejorar su aplicación en TODOS los otros aspectos que no tienen que ver con los formatos. Además, no debemos olvidar que el costo de la licencia es el más importante, pero no el único aspecto que influye en el TCO.

Cabe mencionar que asistió un representante del Gobierno, (del ministerio de Economía) que nos explicó el norte que sigue nuestro Gobierno. Dichos criterios van en la misma senda que lo consagrado en normas como el Decreto 81. De tal forma que es mucho más cercano a lo planteado por el abogado Vinje. Esperemos que no aparezca un nuevo Ferreiro.

En resumen, fue una gran experiencia. Para mi lo más grato fue escuchar de la boca de alguien como Thomas Vinje conclusiones muy similares a las plasmadas en mi memoria. Y sin duda, confirmar que nuestra autoridad tiene plena conciencia de los alcances de esta discusión.

p.d. disculpa a la gente del Planeta ubuntu-cl por el off-toppic, pero seguro que esto les interesa.