# "Curses!: Una historia del hardware y software de interfase en UNIX" ROGUE nos permite dilucidar en cierta parte la senda tecnológica seguida y que incluso continúa siendo relevante actualmente en las herramienetas de programación más utilizadas. ##TERMINALES TELETIPO Y UNIX DE INVESTIGACIÓN La historia comienza desde hace muchos años. Desde mediados del siglo XIX se inventó el TELÉGRAFO, pero para usarlo se necesitaba dominar el uso del código Morse, y hacerlo de forma efectiva. También tenía limitaciones serias en la cantidad de líneas telegráficas que se podían tender, y como entrenar a los telegrafistas (siempre existió el deseo de disminuir la cantidad de habilidades necesarias para poder comunicarse con este dispositivo). Este deseo llevó a la invención de muchas TELE-IMPRESORAS, incluso algunas que empleaban teclados y mecanismos similares a los del piano para sus modulaciones. Para principios del siglo XX estos habían evolucionado a máquinas un poco más prácticas, fundamentalmente máquinas de escribir eléctricas conectadas a una línea telegráfica o enlace en serie, que contactaban a otra máquina al otro extremo de la línea. Básicamente se ponía la teletipo en "emisión", y se mecanografiaba en un lugar, y se recibía una copia impresa en la otra máquina distante a muchos kilómetros. Era mucho más sencillo de aprender y de entrenar así a la gente para que las utilizara, lo que las hizo especialmente útiles gracias a los circuitos dedicados a la difusión de noticias periodísticas ("cables" o "télex"). El estándar primigenio convenido por estas máquinas teletipo fue el código Baudot, de 5 bits (incidentalmente, la velocidad actualmente se mide en "baudios"). ##MULTICS A mediados de la década de 1960, la inductria del cómputo (aparecida desde la década de 1940) se encontró en la evolución desde un modelo de COMPUTO POR LOTES (máquinas que utilizaban tarjetas perforadas como método de entrada de datos) a los SISTEMAS DE TIEMPO DE COMPUTO COMPARTIDO, multiusuario y multitarea. De este modo AT&T, General Electric y Bell Labs obraron juntas para desarrollar un sistema de cómputo de tiempo compartido de estas características, el MULTICS, que visionaba la computadora como una utilidad (una premonición de la actual "nube"). Habría una gran computadora en un edificio especializado, y los usuarios accederían a sus programas y utilidades de manera remota, a través de un servicio de comunicación por suscripción. El sistema que tenían que inventar debía ser extremadamente robusto, ya que tenía que hacer todo tipo de tareas de computación, y para todos. El sistema operativo MULTICS originalmente estuvo pensado para funcionar en un mainframe particularmente grande, una computadora GE-645 que contaba con 2,25MB de memoria RAM, cifra enorme a mediados de los 60s. Para conectarse a ella resultó bastante obvia la opción de usar las viejas TELETIPOS. La telefónica Bell poseía por entonces a la principal fabricante, Teletype Corp, adquirida desde la década de 1930, de modo que los investigadores de los Laboratorios Bell que trabajan en MULTICS decidieron hacer uso de sus Teletipos Modelo 37 para tareas de comunicación. Estas eran de avanzada, simplemente porque contaban con mayúsculas y minúsculas, además de la capacidad de utilizar cintas de papel de cinco perforaciones como medio propio de entrada y de salida. ##UNIX En 1969 los Laboratorios Bell abandona el proyecto MULTICS, y su dirección técnica negó a sus antiguos desarrolladores adquirir nuevas computadoras grandes; básicamente, para evitarse el problema de apuntar a tal tipo de desarrollo. Muchos de sus desarrolladores más avezados querían seguir utilizando un buen sistema de tiempo compartido, pero no les fue aceptada la idea de adquirir una de las caras mainframes nuevas. Sólo encontraron en las instalaciones del laboratorio una vieja máquina PDP-7 con escasos 9KB de memoria RAM. A falta de algo mejor, comenzaron a trabajar con ella para desarrollar un sistema, simplemente porque les permitía contar con potencia de cómputo gratuita. Comenzaron a elaborar un muy pequeño sistema de tiempo de cómputo compartido para ella: el UNICS. Eventualmente demostraron que era práctico, y terminaron comprando una computadora más potente para el mismo: una PDP-11 con 24K de memoria RAM. Esta inverción permitió que el sistema - ahora llamado UNIX - pudiese realmente correr en ella de forma autocontenida. ##MANEJO DE TELETIPOS En UNIX el manejo de las terminales se reveló como un problema complejo resuelto de manera simple. Por entonces, para ingresar a la máquina se utilizaba un puerto de conexión serial, o un módem de discado telefónico adosado al mismo. En UNIX "todo es un archivo" y tenia un nodo denominado /dev/tty y un número que indicaba el número de teletipo correspondiente. Primeramente usaban un programa llamado ioctl, un "control de entrada y salida" utilizado para defenir las caracteristicas de los teletipos. El sistema había sido concebido con una gran predisposición para los teletipos del modelo 37, y los detectaba gracias a "magia" (como les decían a estas opciones cuyo código estaba imbuído directamente en el sistema operativo). Mas adelante los "magos de UNIX" fueron agregando soporte para otros modelos de teletipos a través de instrucciones al comando stty, que permitía definir las características de las distintas teletipos utilizadas. Incluso en 1972 se instruia "utilizar con cuidado este sistema pues podía obstruir la efectiva comunicación del teletipo con el UNIX". Para el momento en que la 6ta edición del UNIX hizo su aparición en 1975, la complejidad de integrar todas las teletipos y terminales disponibles en un mercado rebozante hizo comprender finalmente que el uso y abuso de rutinas de stty implicaba un gran problema, por lo que se intentó incluir paquetes con las espeficaciones de algunas terminales populares en lugar de intentar definir todas las distintas opciones de las mismas. ##Terminales CRT y BSD En 1970 comienzan a aparecer las primeras unidades de presentación de videos como terminales de computadora. Al principio no eran impresionantes, pero comenzaron a mejorar de forma aguda en este período gracias a la tecnologías de semiconductores y miniaturización de la electrónica, lo que permitían unidades autocontenidas, provistas de pantalla, teclado, y puerto de comunicación serial. A finales de los 70s aparece la primer terminal sumamente vendida, la VT100 de DEC, que se convirtió en el estándar defacto. Podía dibujar rápidamente mayúsculas y minúsculas, borrar la pantalla, mover un cursor en ella, en una matriz de 80x24, y para 1980 la VT220 mejoró su desempeño y precio. Ante estas, Bell Labs fue lenta en abandonar sus teletipos. Se habían abocado grandes esfuerzos allí a controlar las terminales gráficas con tecnología de vectores, que utilizan un trazador sobre una pantalla de tubos catódicos. En particular, la Tektronik 1406 era sumamente capaz para gráficas y planos en base a vectores definidos por software. En estos se envían comandos para trazar líneas, controladas por un tubo de rayos catódico móvil que excita una pantalla de fósforo de muy larga duración. Su pantalla se borraba entera, con un flash de luz verde. En lugar de ello, a finales de los 70s y principios de los 80s en la Universidad de California en Berkeley se abocó a la adquisición y uso de nuevas terminales Siegler ADM3, mucho más veloces y con caracteres instantáneos en memoria ROM (apodadas "teletipos de vidrio"), y las fueron adaptando progresivamente en los centros de computación que dependían de la institución educativa. Además contaban con un teclado cuyas letras H J K y L contaban con flechas en él, para direccionar el cursor de escritura. Las funciones avanzadas de alguna de estas terminales, como usar letras en negrita, video invereso, subrayado, a color, etcétera, se comienzan a incorporar a mansalva, y muchos fabricantes comienzan a crear sus propias videoterminales pensadas para competirles en precio, a la vez que intentando abocarse especialmente con alguna de estas funciuones de video o presentación avanzada. Ciertas marcas eran incluso mututamente incompatibles. Todo ello requirió software más avanzado si se deseaba mantener compatibillidad entre todas ellas y los sistemas operativos de base a los que debían controlar. Esto daría origien a la liberaía VI, CURSES y eventualmente, ROGUE. El editor de texto "canónico" de UNIX es ED, se trata de un editor orientado a lineas diseñado para ser operado desde un teletipo que imprime hojas de papel. Está bien diseñado para ello, y opera muy adecuadamente... si la entrada es un teclado, y si la salida esa una máquina de escribir. En efecto, no es fácil de utilizar, y para ello fue eventualmente modernizado por otro programador en la forma de EM, que se distinguía por ser algo más amistoso. EM fue adoptado por Bill Joy y otros en la Universidad de Berkeley, logrando eventualmente el EX y una biblioteca de programación adjunta denominada TERMCAP, que definía las capacidades de las distintas terminales en boga. Agregaron estos programas en una cinta magnética para la distribución de la versión de UNIX propia de la uUiversidad, el BSD. Una de las cosas más populares del EX fue de hecho su "modo visual", al que se podía activar en las videoterminales. Al ingresar "visual" en el prompt de comandos, en lugar de utilizar las antiguoa órdenes de estilo teletipo - donde se debe recordar la línea de trabajo, y se indica crípticamente qué se quiere hacer -, se visualiza directamente todo en la pantalla de video de la terminal. Por entonces, esto era muy nuevo y revolucionario. Para que todo esto funcionase se delimitó cierto código para reescribir la pantalla, y en lugar de incorporarlos de forma fija en el editor, se dispusieron en un fichero aparte, que cobró forma de base de datos que describía las características del modelo de terminal. Ciertamente también era críptico para leer y editar, pero constituia una mejora con respecto a dejarlo fijo en el código del editor. De esta manera, la biblioteca TERMCAP podía consultar esta base de datos archivada y comprender cómo hacer el manejo de la terminal, y hacerlo con independencia de dispositivos. Finalmente, si se utilizaba el comando vi, directamente se entraba a EX en modo visual. En 1979 el desarrollo de vi se entrega a otra hackeresa, Marian Horton. Para 1980 sale la versión 4BSD, que incluye la bibliuoteca CURSES. Ken Arnold tomó el código de reescritura de pantalla del código fuente de VI, y la incorporó en una biblioteca que permitía describir cómo tenía que verse la pantalla. CURSES se encargaba entonces de hacer la mínima cantidad de movimientos de cursor y reescrituras en la pantalla. Esto permitía hacer mucho más eficiente la velocidad de refresco en una pantalla de una matriz de caracteres, permitiendo trabajar de forma interactiva de manera más cómoda. Y a partir de esta biblioteca CURSES se podía escribir programas realmente muy interesantes, mejorando la presentación, utilizando caracteres, letras y números. Permitía las TUI, interfaces de usuario en base a texto. Ciertamente las primeras aplicaciones en utilizar la biblioteca fueron algunos comandos de UNIX similares en función al WHO, y demás aplicaciones de gestión del sistema, pero la primer aplicación realmente extendida que hacía uso de CURSES fue el juego de exploración de mazmorras ROGUE. ##GRÁFICOS DE MAPAS DE BITS, GUERRAS UNIX, CÓDIGO ABIERTO A principios de los 80s, los Laboratorios Bell se dedicaba a desarrollos de avanzada en todas las áreas, y en esta particular destacaba su terminal gráfica BLIT para UNIX. Esta podía presentar interfases gráficas de usuario (GUI) con ventanas programables, descargar código para su ejecución interna a través de su enlace serial, etc. Pero no se vendió fuera de Bell Labs. En 1982, Marian Horton demostró en la convención USENIX un paper denominado "nCurses y TERMINFO", demostrando una reimplementación de CURSES, y que la biblioteca TERMCAP que tenía problemas de velocidad, con una base de datos que tenía información legible. Para 1984 se hizo fuerza por parte de BSD de integrar las terminales con gráficas de mapas de bits, lanzándose para ellas en 1986 se lanza la especificación de servicios y clientes gráficos de UNIX, al que se llamó "Sistema Xwindow". Esta se realizó bajo una licencia de difusión abierta concebida en el MIT, lo que la hizo inmediatamente popular, y la convertiría en cimiento del ecosistema de código abierto moderno. ##CODIGO ABIERTO En los siguientes años se producen una serie de hitos importantes. En 1982 Pavel Curtis fue comisionado por Marian Horton para clonar la librería pCurses de forma independiente, para poder demostrar a la gente por fuera de los laboratorios Bell las mejoras realizadas a CURSES. En 1984 Richard Stallman da inicio a los trabajos en el PROYECTO GNU para poder publicar un sistema operativo clon de UNIX que no contase con ningún código fuente encumbrado propiedad de AT&T/Bell Labs, al cual se lo pudiese distribuir de manera libre. En 1986 surge 4.3BSD, el último BSD que contenía código fuente propiedad de AT&T en sí. En 1991 vemos la primer aparición del kernel LINUX, y también de 386BSD de la hackeresa Lynne Jolitz, un clon al que le removieron mucho del viejo código encumbrado de AT&T. pCurses había languidecido desde 1986, cuando había salido su última versión, pero en 1993 resurgió como n-curses, y este es lo último que salió con código de Ken Arnold. Este fue también un gran año, pues aparecen Slackware y NetBSD, y hasta mediados de los 90s contamos con grandes ponentes de lo que hoy constituye el Movimiento del Código Abierto, decidods de abandonar los vestigios del UNIX de Investigación de AT&T y mudarse a una base de GNU/Linux, a la vez que prestan más atención a la manera en la cual el licenciamiento de su software afectará el crecimiento y proyección del mismo. ##VI y sus EDITORES Pasaron ya casi 50 años desde el desarrollo del editor ED, pero aún el intérprete de comandos, la Shell de UNIX, nos habla como si se estuviese dirigiendo a un teletipo en los laboratorios Bell en 1969. Las ideas que surgieron de allí avanzan, pero son "pegajosas": influencian a las nuevas generaciones de soft3ware que usamos para leer y escribir. VisualStudio CODE es probablmente más avanzado que VIM, pero aún está influenciado por la manera en la cual las ADM3 y las VT100 operaban en la Universidad de Berkeley, tenían teclas de Control, flechas en HJKL, y aún se pueden activar los atajos de Vi en VisualStudio CODE, porque el software que usamos incluencia lo que queremos en el software futuro.