Tanto el nacimiento del editor de texto Vi como la geneaolgía hacia su derivado ViM van de la mano con la historia del software libre.
Comparado con las interfases gráficas al alcance de cualquier usuario de un teléfono inteligentes, los intérpretes de comando de UNIX podrían describirse como "extremandamente orientadas al texto". Al fin y al cabo, los ejecutables se invocan vía texto, los parámetros se indican vía texto, los flujos de datos van y vienen en el sistema en la forma de texto: escencialmente todo en el sistema opera a través de simbología de texto. No sorprende entonces que los usuarios de UNIX sean tan apasionados sobre sus editores de texto.
Consideremos primero a ED, el editor de texto para línea de comandos creado por Ken Thompson como base fundamental para desarrollar su sistema UNIX en una vieja PDP-7 (1969) de los Laboratorios Bell. Allí lo escribió directamente en ensamblador, implementándolo para trabajar con las terminales teletipos, y en 1971 - ya establecido UNIX en la máquina PDP-11 - lo portó al lenguaje C.
El prototípico ED es lo que llamaríamos un "editor de líneas". Fundamentalmente edita de a una línea por vez, lo que tenía sentido por entonces habida cuenta que las terminales de teletipo - especie de impresor unido a la línea de télex - funcionaban así, con un carro móvil similar a una máquina de escribir. ED permitía ver y almacenar cadenas de caracteres para formar una "línea", lo que hoy llamaríamos párrafo. Además, permitía editar la línea nuevamente para corregir errores, y desplazar texto en una pila de memoria específica para cada usuario de su sistema con múltiples operadores.
Ken Thompson inspiró su ED es una versión reducida de otro editor anterior en el que había trabajado, denominado QED (editor rápido) - programa originalmente pensado para oficiar de consola de edición de líneas para terminales teletitpo unidas al mainframe SDS 940 del Proyecto MAC. Thombson al fin y al cabo había sido el responsable de reescribir QED utilizando el lenguaje BCPL, de manera que pudiese funcionar en el sistema operativo MULTICS (padre putativo de UNIX).
ED se convertiría en el editor de líneas defacto de UNIX, y sigue siendo parte del estándar POSIX hasta nuestros días. Después de todo, "Ed es el editor de texto estándar".
Sin embargo, una vez que a medidados de la década de 1970 se hicieron más propicias y baratas las primeras terminales con pantalla de video en lugar de las viejas teletipos, la mayoría de los usuarios comenzaron a considerarlo anticuado y frustrante. Resultaba sumamente incordioso trabajar con ED en UNIX, sobre todo entendiendo que las pantallas de video permitían ahora "borrar" caracteres como si fuese arte de magia.
Entre los que destilaban esta opinión se encontraba el propio Coulouris, que consideró que los comandos que los programadores norteamericanos de ED eran sumamente crípticos. En su visión, eran inadecuados para los simples "mortales", y sólo los podían usar con confianza los más aguerridos Magos UNIX.
Pasemos ahora por la Universidad Queen Mary (RU), ya que juega un rol colateral pero importante en la historia de los editores de texto. Fue allí que en 1973 se instaló el primer sistema UNIX del Reino Unido, y también fue allí que el profesor George Coulouris se dedicó a programar un editor llamado EM, que podremos considerar la semilla genealógica. Esta creación de EM terminó derivando en el desarrollo de VI y muchos otros clones de VI.
Tras recibir sus primeras videoterminales VT05, y tras una larga serie de frustraciones al adaptarlas al lento y poco intuitivo manejo de ED, mientras actuaba como tutor en el Colegio Queen Mary, Coulouris decidió mejorar ED en base al código fuente original de Ken Thompson. Fue así que nació su EM, "ED para mortales", en febrero de 1976.
El EM de Coulouris estaba diseñado para funcionar de forma más práctica con las terminales de video. Consistía un editor visual que operaba de a una línea por vez, pero integraba la posibilidad de borrar, editar y reacomodar la línea de texto en una pantalla de video, tan solo con operar un cursor. Fue también uno de los primeros programas de UNIX en hacer amplio uso del "modo de entrada de terminal en bruto", entre los cuales las teclas presionadas eran gestionadas por el programa en ejecución (en lugar que lo hiciera el controlador de dispositivo de la terminal).
Pero George Coulouris no había sido el único descepcionado con el cavernícola trabajo de Thompson con ED. Cruzando el Atlántico muchos también se querían arrancar los pelos, inclídos los connacionales de Ken Thompson.
En el mismo año de 1976 Thompson se tomó su año sabático para visitar la UC Berkeley, oficiando como profesor adjunto invitado. En su periplo llevó consigo una cinta magnética con una copia de UNIX para la minicomputadora DEC PDP-11 universitaria (incluyendo en ella un compilador Pascal incompleto para UNIX, que necesitaba reparación). Bill Joy - estudiante adepto al centro de cómputo de la UC Berkeley - quedó a cargo de componer el sistema Pascal de Thompson, pero conforme fueron pasando los días, Joy notó que ED lo retrasaba mucho.
Cuando en verano de ese año Coulouris visió la UC Berkeley, trajo consigo de Inglaterra una cinta DECtape que contenía una copia de su propio EM y la mostró a la gente de la casa de estudios estadounidense. Algunos lo miraron con asco considerando que la novedad de editar texto en pantalla constituia una manera glotona de ocupar los escasos recursos de cómputo, pero la mayoría restante - incluyendo a Bill Joy - quedaron impresionados.
Fue así que, inspirados por el EM de Coulouris y por sus propios reajustes al ED de Ken Thomson, Bill Joy y Chuck Haley - ya por entonces graduados de la UC Berkeley - pudieron escribir un Editor "Nuevo", al que llamaron EN. Tuvo éxito pero al poco tiempo decidieron "extender" las magras capacidades de este EN dando con el EX ("Editor Extendido"). Fue un peronista 17 de octubre, pero de 1977, la fecha en la que Bill Joy estrenó el modo visual de pantalla completa para EX, con lo cual se convertiría en VI.
El editor VI era capaz de presentar, editar y refrescar texto ASCII en la pantalla completa de la terminal de video.
En sí, tanto VI como EX compartían el mismo código fuente. VI es básicamente el modo visual de EX; su nombre "vi" es el comando abreviado que se ingresa dentro del editor EX para pasar a este modo de edición visual. Por tal motivo, podemos pensar a VI como un EX provisto de un parámetro extra que le otorgaba la capacidad de editar el texto en una terminal multilínea, en lugar de hacerlo en una única línea.
Bill Joy utilizaba una videoterminal Lear ADM-3A para desarrollar VI. En esta, la tecla Escape se localiza a la extrema izquierda del teclado, posición donde actualmente se encuentra la tecla Tab. Este es el motivo por el cual muchos de los atajos y teclas de navegación que se utilizaron cobraron repercusión: en base al teclado de la ADM-3A.
Además de esta confluencia de teclado, es justo considerar que una vez graduado de Berkeley, Bill Joy desarrollaba su editor principalmente desde su casa, conectado a un sistema de cómputo de acceso remoto, y lo hacía a través de un módem de 300 baudios, extremadamente lentos.
"Desarrollar EX y VI me llevó un largo tiempo. Era realmente difícil de hacerlo, si consideramos que escribí el programa para que su uso fuese práctico incluso a través de una línea telefónica conectada a un módem de 300 baudios. Eso era lo que teníamos por entonces. Aquel fue el motivo por el cual tiene su funcionamiento particular, y por el cual que se pueden usar todos esos comandos de previa ejecución "en off" antes de presentar el texto reacomodado resultante. Apenas podía funcionar a pantalla completa a través de un módem lento, apenas podía hacerlo, y dejaba que desear. Pero era posible. Apenas. Este era el motivo por el cual tratábamos de usar EX lo más posible, y editar de a una línea por vez. Un módem de 1200 baudios ofrecía ya una gran mejoría. 1200 baudios era algo lento aún, mientras que 9600 baudios resultaba en un reacomodamiento de texto incluso más veloz lo que uno podría leer en pantalla, pero 1200 es más lento que eso. De cualquier manera, me concentré en optimizar el editor de manera que uno pudiese editar remotamente y sentirse productivo al menos mientras el programa reacomodaba el texto en la pantalla, incluso si lo hacía de forma más lenta de lo uno podría leer. Mas adelante, cuando las comunicaciones fueron mucho más veloces, se podía reacomodar el texto en menos tiempo de lo que uno podría leerlo. Hoy ya nadie es capaz de apreciar ni se da cuenta de esas decisiones de diseño, ya que incluso en uso remoto, el programa funciona casi sin retraso, y es prácticamente instantáneo si esto se lleva a cabo en un ordenador local".
Joy también compara el desarrollo de VI y EMACS:
El tipo que programó EMACS estaba directamente sentado ahí, en un laboratorio del MIT con lo que era escencialmente un canal de cable coaxial, como si hoy dijéramos un enlace de fibra óptica local. Trabajaban en una PDP-10 de 36 bits, una máquina poderosísima si la comparamos con nuestra PDP-11/45 de 16 bits. Allí tenían pantallas infinitamente más veloces. Ellos podían implementar montones de comandos específicos con refrescos completos de pantalla completo y todo eso. En cambio, yo me sentaba en mi casa en una especie de taller de rezagos de la Segunda Guerra Mundial, tratando de conectarme a Berkeley con un acoplador acústico en un terminal que apenas podía sacar el cursor de la última línea. Es un mundo que ahora está extinto.
Fue en 1979 que VI se convirtió en un fichero ejecutable por derecho propio (un programa), que se invoca desde el intérprete de comandos de UNIX.
Bill Joy hizo mención a muchas funcionalidades de VI originalmente inspiradas realmente en un editor bimodal denominado Bravo, programa que corría en la enormemente influyente estación de trabajo de interfaz gráfica Xerox Alto, obra cúlmine del Xerox PARC. El Bravo era su editor de documentos WYSIWYG, capacidad revolucionaria de editar visualmente e imprimir dichos resultados, utilizando múltiples tipografías proporcionales gracias a la adelantada pantalla de mapa de bits con que contaba la Xerox Alto.
Bill Joy fue también el responsable en Berkeley de la creación de la primer distribución UNIX en 1978, la BSD, que incluia al editor EX. Esto ayudo a amplificar la popularidad de este editor más allá de los claustros de la UC Berkeley.
Como la mayoría de sus usuarios pasaban todo si tiempo en el modo visual de EX, de modo que Bill Joy decidió ponerle un enlace directo al que llamó "VI" y lo incorporó a la segunda distribución de BSD de mayo de 1979. Joy también sostiene que la mayoría de la popularidad de Vi vino de mano de ya estar incluido en la cinta de BSD, mientras que por entonces otros editores (como el EMACS) debían conseguirse aparte, o podían costar cientos de dólares.
En base a VI se desarrollaron muchos clones. La idea fue tanto mejorar al editor original con funcionalidades adicionales, como aportar la experiencia VI a otras plataforamas de cómputo en la medida en la que iban apareciendo a lo largo de la década de los 80s (la Atari ST, Commodore Amiga, MS-DOS, OS/2, entre otras). El VIM de Bram Moolenaar de hecho comenzó como uno de estos portes.
Tim Thompson (sin relación con Ken) escribió la versión original de STeVIe (Editor ST para Entusiastas de VI), un clon de VI para la Atari ST, y en junio de 1987 publicó su código fuente como software libre en el grupo de noticias comp.sys.atari.st de USENET.
STeVIe sería luego portado retrospectivamente a UNIX, OS/2 y a la Amiga.
Es importante recalcar que STeVIe fue programado desde cero, sin utilizar el código original de VI. Aquel se basaba en el de ED, y como tal desarrollado bajo el paraguas comercial de AT&T. Teóricamente, esto implicaba que VI sólo podría ser utilizado por aquellos individuos o instituciones que contasen con una licencia de código fuente de AT&T.
Esto llevó a que muchos de los programadores de muchos de los clones de VI realmente terminaran optando por modificar el código fuente inicial impoluto de STeVIe - libremente accesible - en lugar de hacerlo desde el de VI, cuyo origen se encontraba sumido en los humos de severas disputas legales y comerciales.
El creador de ELVIS, Steve Kirkendall, comenzó a considerar escribir su propio editor una vez que el editor STeVIe se colgara en su máquina, llevandose consigo muchas horas de trabajo y la confianza en dicho editor.
En efecto, STeVIe como sus antecesores almacenaba el buffer de edición en la memoria RAM del equipo, lo que Birkendall consideró impráctico en el sistema operativo como su favorito MINIX. Una de las motivaciones principales de Kirkendall para escribir su propio clon de VI sería entonces el almacenamiento del búfer de edición en un fichero en disco en lugar de hacerlo en la volátil memoria RAM. Ello permitiría que - incluso ante un cuelgue del editor - una copia del texto permanecería a salvo y en disco podría posteriormente recuperarse desde dicho archivo temporal externo.
ELVIS fue pionero en muchas ideas luego adoptadas en clones porteriores. Fue admirado por su formas concisas de operar y por la cantidad de opciones disponibles, además de ser el primer clon en ofrecer resaltado sintático para lenguajes de porogramación comunes (C entre ellos), y generalizar el restaltado sintátcio a muchos tipos de ficheros mas.
Asimismo, ELVIS fue uno de los primeros clones de VI en contar con resaltado de sintaxis, función que permite analizar y remarcar con colores o subrayados las palabras clave y tokens de los lenguajes de programación.
Cuando le preguntaron porqué decidió el nombre ELVIS, Kirkendall mencionó que en parte era porque mucha gente le preguntaría. Además, es común que muchos de los clones de VI contaran en algún lugar con las letras VI en su nombre.
Cuando el creador de MINIX, Andrew Tanenbaum, preguntó a la comunidad técnica abroquelada alrededor de este sistema operativo multiusuario para que escogieran entre el STeVIe y el nuevo ELVIS para su adopción como editor de texto principal para dicho entorno, ELVIS resultó electo. Incluso hoy perdura como el editor por defecto de MINIX.
¡Y finalmente llegamos a VIM! Probablemente es clon de VI más popular de todos los tiempos, creció como una evolución para convertirse en un programa gigantesco con una vibrante comunidad que continúa creciendo. Casi es incorrecto llamarlo un clon de VI, pero desde el punto de vista histórico esto es exactamente lo que es VIM.
Está inspirado en el porte previo de STeVIe para la Commodore Amiga, de hecho Bram Moolenaar comenzó a trabajar en una "Imitación de VI" para la Amiga en 1988. Si, leyeron bien... VIM originalmente fue escrito en y para la Commodore Amiga. (Siempre me sorprendo al ver que no muchos programadores conocen este echo, y ello incluye a muchos que lo disfrutan a diario).
Su primer lanzamiento para la interfaz gráfica Workbench de la Commodore Amiga (la VIM v.1.14) se produjo en 1991. Como se dijo, el nombre original Vim viene a resultas de un acrónimo para "Imitación de Vi", pero cambió al más adecuado "VI Mejorado" en 1993.
La primer copia pública de VIM para la Amiga salió en el diskette nro. 591 de Fred Fish, programador conocido por su obra sobre el Depurador GNU DBG, pero sobre todo por distribuir toda una gran serie de diskettes de 3 1/2 pulgadas con compendios gratuitos de software libre para la Commodore Amiga. Los diskettes de Fish (oficialmente Biblioteca de Programas Amiga) fueron publicados de 1986 a 1994; los distribuía por correo a quienes los quisieran a lo largo del mundo a cambio del costo postal. Se podían copiar libremente en casas de comuputación y clubes de entusiastas de la Amiga.
Al basar VIM en el código de STeVIe en lugar del Vi original, Moolenaar era capaaz de distribuirlo sin tener que dar lugar al abono de la licencia de código fuente de AT&T, algo a tener en cuenta durante el pleno desarrollo de las Guerras UNIX de principios de los 90s. VIM de hecho fue publicado bajo la "Licencia VIM", que incluye algunas cláusulas caritativas que anima a sus usuarios a realizar donaciones para los niños de Uganda.
Moolenaar advocaba una ONG basada en Kibaale, Uganda, la cual se fundó para dar apoyo a los niños hueérfanos a resultas del SIDA. En 1994 ofició de ingeniero sanitario para el Centro de Niños de Kibaale y realizó varios viajes allí en los siguientes veinticinco años.
Siguiendo el ejemplo de VI, la interfaz de VIM, no se basa en menúes o íconos, sino en comandos dados a través de una interfaz de texto. VIM cuenta con un modo de interfaz gráfica que permite a sus usuarios utilizar menúes y barras de herramientas, pero el modo VIM más popular aún continúa siendo la interfaz de usuario basada en texto, en sistemas operativos similares a UNIX.
VIM cuenta con un Modo de Compatibilidad con VI, pero no usar dicho modo permite desplegar mayores funcionalidades a las ofrecidas por el VI original. Entre ellas se cuentan el soporte de texto Unicode, expresiones regulares, autocompletado, resaltado de sintaxis, y muchas características pequeñas que dan lugar a un ambiente de desarrollo integrado tipo IDE sumamente potente.
Algunas fechas importantes de los primeros días del desarrollo de VIM:
1988: (Vim 1.0) Desarrollo de Vi IMitation para la Amiga
1991: (Vim 1.14) Primer lazamiento público en el Fred Fish disk #591
1993: (Vim 1.22) Porte para UNIX renombrado como Vi Improved
1994: (Vim 3.0) Ventanas múltiples
1996: (Vim 4.0) Incorpora una GUI opcional
1998: (Vim 5.0) Resaltadode sintaxis
2001: (Vim 6.0) Encarpetado y multilenguaje
2006: (Vim 7.0) Revisor ortográfico al vuelo y pestañas
A diferencia de otros clones de VI, VIM continúa su desarrollo en la actualidad, a través de una gran comunidad técnica que incluye usuarios y programadores. Las nuevas funcionalidades que se le han agregado con el correr de los años lo han mantenido en la modernidad y desplegando potencia.
También se le han incoprporado muchos agregados de terceros en forma de plugins. Combinándolos con un poderoso lenguaje de guionado, el VimScript, VIM puede trasnforamrse en una herramienta de producción increíblmenete útil.
Vim ahora cuenta ya con más de 3 décadas.
El editor de texto de Brem Moolenaar se ha convertido en una leyenda entre los desarrolladores de software, y en repetidas ocasiones se lo ha considerado uno de los más utilizados, y en no pocas el favorito de muchos en el ambiente GNU/Linux.
Moolenaar continuó incluso actualizando VIM hasta unas pocas semanas antes de su fallecimiento en 2023.
El cómputo actual como lo conocemos ha sido confomado en gran medida por individuos como Bram, y no hay demasiadas herramientas libres han sido tan importantes para escribir otras como lo ha sido VIM. Aunque al activarlo sólo veamos un cursor parpadeante, conocer su senda de desarrollo nos impacta. Sabemos ahora que nada sale de un repollo: son mayoría las creaciones de software crecen enmarañadas a partir de ideas, corazón y trabajo creativo de programadores previos, sólo interesados en ayudar a los demás.