La siguiente historia sirve para entender el contexto actual de lo que más tarde se describe.
GNU y la FSF
Para entender la situación que originó toda esta corriente debemos situarnos en la realidad que se vivía hace unos cuantos años atrás allá por los '70. En esos años las computadoras venían acompañadas de su software y el negocio de los fabricantes era vender computadoras y no sus sistemas operativos. En esa época no era difícil encontrar software gratis acompañado de sus fuentes. Esta política generó un ambiente de cooperación entre los usuarios de computadoras de la época que podían entonces intercambiar información y rutinas libremente. Se debe tener en cuenta que los usuarios eran universades, centros de desarrollo, grandes empresas y entidades gubernamentales.
Hacia los años '80 la situación fue cambiando bastante debido a que los fabricantes comenzaron a ver en el software un gran negocio, de hecho hoy día es más redituable que el hardware. La situación originada fue la siguiente: los departamentos de las universidades y centros de desarrollo utilizaban casi en forma exclusiva workstations y computadoras aún más grandes corriendo sistemas operativos UNIX. Cada vez que se decidía un cambio de modelo de computadora se debía no solo adquirir la computadora, sino también el sistema operativo y las herramientas de desarrollo para el mismo. Los precios eran muy altos debido al impacto del costo del sofware. A todo esto debe agregarse que los fabricantes ya no proveían los fuentes y que el intercambio de información que se vió en los '70 quedó bloqueado.
En 1983 Richard Stallman, que desarrollaba tareas en el departamento de Inteligencia Artificial del MIT, desidió iniciar un titánico proyecto con el objetivo de restaurar aquel ambiente de los años '70. Como toda computadora necesita un sistema operativo para funcionar el proyecto comenzó por allí.
Vale aclarar que Stallman tiene una forma de pensar un tanto particular, según él el software no debe venderse como tal, lo que debe venderse es el servicio que lo acompaña. De esta manera las compañías deberían "liberar" el software y cobrar por los servicios asociados, por ejemplo: asistencia al usuario, medio de transporte del mismo (discos, CDs, etc.), manuales, modificaciones particulares para un usuario, etc.
El concepto de "liberar" el software va incluso un poco más allá. Para Stallman el sofware no sólo debe ser gratis sino también "libre", es decir que el que adquiere un software debe poseer la libertad de modificarlo para acomodarlo a sus necesidades, esto implica en forma directa que el software debe ir acompañado de todo su código fuente. Esto es aún más "raro" si se lo compara con la norma actual, las empresas podrían estar de acuerdo en volver gratis su software y solo cobrar por los servicios pero dificilmente aceptarían entregar sus fuentes. Nace así la llamada FSF = Free Software Foundation.
Con esta filosofía Stallman inicia la creación de un nuevo sistema operativo llamado GNU, que significa "GNU isn't Unix" y como se puede ver es una definición circular. El nombre se pronuncia gñu (la g es casi muda), muy similar al nombre del animal (ñu) que es el emblema del proyecto. Este sistema operativo no se ha popularizado y dificilmente lo haga debido a razones que se exponen más adelante. A pesar de ello existe actualmente un kernel llamado Hurd que es el kernel de GNU.
GNU sería un sistema operativo con un kernel (núcleo) diferente al Unix, pero con herramientas de trabajo compatibles y a su vez compatible con los estándares POSIX. Esto facilitaría su uso y la migración desde Unix a GNU. Debido a que en el entorno Unix el lenguaje de programación más usado es el C, y que el mismo es adecuado para la programación de bajo nivel, tal es el caso de un sistema operativo, es que el comienzo del proyecto GNU se da con la creación de un compilador de C llamado GCC (Gnu C Compiler).
Consecuencias y frutos
Si bien como ya dije anteriormente GNU no es usado como sistema operativo el proyecto dio sus frutos. Gracias al esfuerzo de decenas, sino cientos, de voluntarios que trabajaron, y continuan trabajando en el proyecto, es que hoy en día todas las herramientas que deben acompañar a un sistema operativo del estilo de Unix han sido desarrolladas por GNU/FSF. Esto se logró ya a principios de los '90.
A modo de ejemplo nombraré algunos de los paquetes de software. Hay que destacar que los mismos cumplen con las consignas de la FSF y por lo tanto se pueden obtener en forma gratuita y todos sus fuentes están disponibles.
gcc | Compilador de C/C++ | cc |
gas | GNU Assembler | as |
ld,ar,etc | Utilidades que complementan al compilador | ld,ar |
flex | Analizador lexicográfico | lex |
bison | Parser o Generador de compiladores | yacc |
ls,df,etc | Utilidades de manejo de archivos | ls,df |
cat,etc | Utilidades de manejo de texto | cat |
make | Accesorio para automatizar el compilado de proyectos. | make |
sed | Utilidad para modificación de textos usando scripts. | sed |
bash,sh | Shells para interfaz de comandos | bash,sh |
g77 | Compilador Fortran | f77 |
emacs | Procesador de texto configurable | ? |
Estos son tan solo algunas de las utilidades del repertorio de GNU.
Una pregunta interesante sería: ¨provocó esto algún impacto en la industria? ¨tiene algún uso?
Si bien GNU no es popular como sistema operativo al menos dos versiones de Unix han sido creadas utilizando las herramientas de GNU, es decir que personas que no pertenecen a GNU/FSF han creado kernels compatibles con Unix usando todas las herramientas de GNU, de otra manera hubiera sido imposible crear un sistema operativo Unix tan completo como estos dos.
Los SO (sistemas operativos) de los que se habla son:
Ambos son de distribución gratuita y todos sus fuentes se encuentran disponibles.
El impacto de estos sistemas operativos ha sido enorme, las empresas productoras de sistemas operativos Unix se han visto forzadas a reducir sostenidamente los precios de sus sistemas operativos.
Por otro lado dos factores muy importantes han contribuido al desarrollo "explosivo" de estos dos SO:
Por lo tanto se desprende que el impacto ha sido fuerte y hoy en día es muy común encontrarse con que poderosos servidores de internet son PCs corriendo uno de estos SO. A modo de ejemplo la compañía de CDs Walnut Creek posee un servidor con un procesador Xeon de 500MHz, 4Gb de RAM, 1/2 Terabyte de disco conectado a internet con una conexión de 100 Mb/s corriendo Free BSD. Este servidor es capaz de "atender" a 5000 visitantes.
Hace menos de 6 años atrás revistas especialadas en el tema debatían la vigencia y el futuro de los SO Unix, hoy día no se tiene duda de que los mismos siguen con vida y en gran parte se debe a la popularización y abaratamiento de los mismos. De acuerdo con varias empresas de relevamiento de mercado Linux es el sistema operativo que mas ha crecido en internet y posee mas servers que cualquier otro UNIX o que Windows NT.
El rincón olvidado: DOS
DOS es el SO más usado en las PCs y aún cuando la misma corra Windows 95/8 el mismo se encuentra sobre un DOS (versión 7) y brinda un alto grado de compatibilidad con su versión anterior (6). Las herramientas de desarrollo para DOS cuestan alrededor de U¤S 500 en el exterior y aún más en Argentina, es decir que alguien que desee programar en C/C++ deberá desembolsar una alta cifra para lograrlo o caer en la ilegalidad. Si bien estas cifras no son importantes para empresas si lo son para individuos, colegios, universidades del estado, etc. Pero el precio no es el único factor. Cuando uno invierte una suma de dinero de ese tipo espera obtener un producto sólido y toda la ayuda necesaria para poder solucionar los problemas relacionados con dicho software. Lamentablemente las grandes empresas dedicadas al desarrollo de compiladores para DOS han olvidado esto y su único objetivo es competir por ver quien crea el compilador más gigante, más complejo y logra venderlo lo más rápido posible. El soporte técnico es un punto indispensable y es uno de los puntos débiles de los compiladores para DOS. Aún peor es nuestra situación en Argentina donde los representantes de estas megaempresas solo buscan tener un 40% de margen de ganancia sin realizar ningún esfuerzo. A todo esto debe agregarse que las actualizaciones de dichos programas son lentas y no son gratuitas.
En el año 1986 DJ Delorie y un grupo de colaboradores decidieron adaptar las herramientas de GNU a DOS, el resultado se conoce como djgpp (DJ's Gnu Programming Platform). Su objetivo es llevar al mundo de DOS las ventajas del "free software".
Algunos detalles técnicos del djgpp
La tarea de adaptar las herramientas GNU a DOS no fue algo trivial. En primer lugar todas estas herramientas han sido escritas para correr sobre SO tipo Unix y por lo tanto esperan que muchas de las rutinas de librería de C reaccionen como lo harían bajo Unix. A esto debe sumarse que la idea de DJ no es totalmente coincidente con la de la FSF, es decir que DJ tuvo en mente crear un paquete de desarrollo que no estuviera atado a todas las reglas de juego de la FSF. La más importante de ellas es que si uno crea un programa que utiliza las librerías de rutinas creadas por la FSF, que estan protegidas por la licencia LGPL, dicho programa debe cumplir los requisitos de los programas de la FSF, es decir que el autor debe hacer disponibles los fuentes del programa a sus clientes. Nota: este es un detalle técnico referente a DOS, las librerías de Linux pueden utilizarse sin este requisito ya que son dinámicamente enlazadas.
Por estas dos razones, técnicas y de propiedad intelectual, es que DJ se vio forzado a crear una librería de rutinas de C que cumpliera con los siguientes requisitos:
Esta tarea no fue nada fácil ya que hubo que crear más de 650 rutinas, que por supuesto no fueron creadas por una sola persona y parte de ellas provienen de la librería de la Univ. de Berkeley que no poseen restricciones, aunque actualmente casi no queda ni una de ellas ya que fueron gradualmente reemplazadas.
Otro punto de suma importancia es que el GCC es un compilador diseñado para microprocesadores de 32 bits y al momento en que DJ comenzó su trabajo el GCC podía generar programas para microprocesadores 386 o superiores de Intel. El problema es que DOS es un sistema operativo de 16 bits, debido a esto es que el djgpp necesitó un "DOS Extender", esto es que necesitó un programa que permitiera correr programas de 32 bits bajo DOS. Hoy en día el djgpp hace uso de un standard denominado DPMI (DOS Protected Mode Interface) que permite ejecutar programas de 32 bits bajo DOS. Debido a que DOS no posee servicios de DPMI (Win3.1, Win95 y OS/2 si) es que también se tuvo que desarrollar un servidor de DPMI (CWSDPMI por Charles Sandsman).
En la actualidad el djgpp es un entorno completo de programación el cual posee casi todas las herramientas creadas para GNU.
La Interfaz de usuario
Un punto sumamente importante en todo programa es la interfaz con el usuario. Un programa fácil de usar pero inferior que otro puede tener mayor éxito. Esto es un punto débil de la mayor parte de las utilidades Unix. Cabe destacar como importante excepción las utilidades diseñadas para X (X-windows). El djgpp está compuesto de utilidades Unix y por lo tanto su manejo no es trivial e incluso puede asustar a un usuario poco experimentado. Debido a esto es que en 1995 Robert Höhne (Alemania) decidió crear una IDE (Integrated Development Environment = Entorno de Desarrollo Integrado) para el djgpp. Una IDE es el programa que integra el editor de texto para escribir un programa, el sistema de ayuda, el compilador, el linker, el debugger y otras herramientas necesarias para el proceso de programación. Todos los productos comerciales para DOS poseen una y probablemente la más cómoda y difundida sea la de la empresa Borland, para ser más específico la incluída en la versión 3.X de sus compiladores de C/C++. Es por ello que Robert decidió realizar una IDE que se manejara en forma similar a la misma.
Las tareas del autor de esta nota
Hacia marzo de 1996 descubrí, a través de internet, el djgpp. Cansado de mi viejo compilador de 16 bits (Borland C++ 3.1) y reacio a pagar otros U¤S 371 para obtener una actualización del mismo el DJGPP me vino como anillo al dedo. DJGPP es un compilador poderoso de 32 bits que genera un código excelente y por sobre todas las cosas que está en evolución día a día. El soporte técnico es asombroso y debido a que todos sus fuentes están disponibles no hay secretos y cualquier problema puede solucionarse corrigiéndolo, a todo esto debe agregarse el costo 0.
En un principio adapté mis programas al djgpp y obtuve los beneficios del mismo, luego comenzó mi aporte al proyecto.
Durante mayo de 1996 conocí el proyecto de Robert y noté que tenía algunas fallas importantes:
Las dos primeras las solucioné yo y la tercera Robert siendo hoy en día un producto superior a muchos otros comerciales.
Más detalle sobre dichas tareas
Para solucionar el problema de la falta de sistema de ayuda mi primer intento fue el de utilizar un sistema de ayuda externo. Un sistema muy difundido en DOS es el de las Norton Guides, este programa queda residente en memoria y permite leer textos de ayuda desde disco mientras se ejecuta otro programa. El problema principal era que el formato de los textos de ayuda de las herramientas GNU era muy distinto al de las NG (Norton Guides) y que el programa para crear dichas NG no era gratuito (si existen lectores gratuitos). Por ello creé un programa capaz de convertir el formato de los textos de ayuda de GNU a NGs. Dicho programa se puede encontrar en Simtelnet (http://www.simtelnet.com/pub/simtelnet/gnu/djgpp/v2misc) o en cualquiera de sus mirrors.
Esta solución fue solo parcial debido a que exigía el uso de una herramienta externa por lo que decidí crear rutinas que se pudieran incorporar al programa de Robert. Esta segunda aproximación derivó en un grupo de rutinas que más tarde fueron incorporadas a la RHIDE (nombre del proyecto de Robert) y que componen el sistema de ayuda. Las rutinas son unos 111 Kb de código C++.
El segundo paso fue crear un procesador de texto especialmente diseñado para programación que posee, entre otras, las siguientes cualidades:
Las rutinas son más de 1560 Kb de código en C++.
También son de mi autoría las rutinas que utiliza la RHIDE para poder depurar (debug) programas que utilizan la pantalla gráfica, soportando programas que usan modos VGA y SVGA gráficos y de texto extendido.
Otros aportes al grupo de trabajo:
Tiene sentido desarrollar aplicaciones para DOS?:
Si, el sistema operativo DOS tiene la plataforma instalada más importante en el planeta y es excelente para el usuario que recién comienza a programar. La programación para Windows es compleja y no sirve a los fines didácticos. Si bien un usuario podría aprender utilizando Linux la realidad es que solo una minoría lo tiene instalado (entre 7 y 12 millones de personas se estima), en cambio todo el mundo posee DOS.
DOS también posee características que lo hacen excelente para el uso en sistemas "embedded" y en los próximos años se verán más y más equipos que en su interior poseen un DOS.
Otro uso importante de DOS es el de reciclar computadoras viejas y permitir que personas de bajos recursos no queden al margen de la revolución de la información que estamos viviendo. Con respecto a este tema fui contactado por José Lacal que lleva adelante una iniciativa de este tipo (http://www.volks-pc.org). José mostró un gran interés en incluir mi trabajo en su proyecto.
Se limita solo a DOS?:
No, actualmente ambos proyectos, tanto mi editor como RHIDE, se encuentran disponibles para Linux.