1 puntos por GN⁺ 2023-10-01 | 1 comentarios | Compartir por WhatsApp
  • Conocimientos que antes cualquier hacker daba por sentados —como la estructura de bits de ASCII, RS-232, terminales de hardware y módems— dejaron de transmitirse en el proceso de iniciación a medida que cambiaron los equipos y los entornos de red
  • Expresiones como tty, SIGHUP, core dump, README y Ctrl-D son vestigios de herramientas desaparecidas; conocer su origen ayuda a entender mejor el Unix moderno y las prácticas de desarrollo
  • ASCII, las máquinas de 36 bits, el octal, la configuración de RS-232, MIME, termios, curses y el control de terminales ANSI muestran capas de compatibilidad histórica que siguen presentes en los sistemas actuales
  • Antes de la Internet masiva, UUCP, USENET, BBS, FidoNet, FTP, Gopher, el timesharing comercial y las WAN académicas se repartían funciones de transferencia de archivos, correo, foros y colaboración
  • El desarrollo basado en repositorios públicos se formó pasando por las cintas de DECUS, FTP y correo electrónico, los grupos de código fuente de USENET, patch(1), SCCS/RCS/CVS, SourceForge y Subversion, hasta llegar a Git en 2005

Huellas de Unix dejadas por hardware desaparecido

  • Que los hackers jóvenes ya no conozcan la estructura de bits de ASCII ni sus peculiares caracteres de control no es un problema individual, sino consecuencia de que los terminales de hardware y RS-232 desaparecieran de la vida cotidiana
  • Los terminales de antes no eran ventanas de software, sino terminales de pantalla de video (VDT) conectados a una computadora central; antes de eso se usaban dispositivos tipo teletipo que imprimían en papel
  • El tty de Unix viene de la abreviatura de teletype; el lp de /dev/lp viene de line printer, y /dev/drum en algunos BSD Unix proviene de los primeros dispositivos de tambor rotatorio
  • \r, Carriage Return, es la acción de enviar el cabezal de impresión al margen izquierdo; Unix manejaba el final de línea con un solo \n, pero otros sistemas operativos siguieron usando \r\n
    • El motivo del orden \r\n fue que, en el hardware inicial, el carriage return tardaba más que el tiempo de transmisión de un carácter, por lo que había que ejecutarlo primero
  • La forma en que varios usuarios compartían la CPU de una computadora central se llamaba timesharing, y sus huellas siguen en la estructura de múltiples terminales virtuales del Unix moderno

RS-232, módems y comandos AT

  • RS-232 es un protocolo de hardware desarrollado a principios de la década de 1960 para que los teletypewriters y los módems se comunicaran; antes de USB, un enlace “serial” normalmente significaba RS-232
  • Un módem era un dispositivo que permitía enviar señales digitales por la línea telefónica, y los hackers usaban mucho los módems externos en forma de caja separada
    • Los módems internos eran vulnerables al ruido de RF dentro del gabinete, y las luces indicadoras de los módems externos eran útiles para diagnosticar problemas
    • El éxito de la conexión y las fallas de sincronización podían distinguirse hasta cierto punto por los pitidos y siseos del módem
  • En SIGHUP de Unix, HUP significa Hang Up, y originalmente señalaba la situación en la que se cortaba la conexión del módem y desaparecía el terminal de control
  • La velocidad de los módems pasó de 110 bps a 56 kbps a fines de los años 90; en el periodo estable de aproximadamente 1984 a 1991, 9600 bps era lo habitual
    • Por eso muchos equipos serial-protocol que aún existen usan 9600 bps como valor predeterminado
  • El prefijo de comandos AT del Hayes Smartmodem se volvió de facto universal después de 1981, y se podía marcar un número telefónico agregándolo después de ATDT
    • El patrón de bits de AT tenía una forma fácil de reconocer para el receptor aun sin conocer la velocidad de transmisión, lo que favorecía la sincronización automática
    • Incluso en 2017 se encontraron comandos AT en funciones de control de módems celulares 3G/4G de smartphones, y en una variante ampliamente distribuida se usaba AT+QLINUXCMD= como prefijo para pasar comandos a una instancia de Linux en el firmware del chip

“core”, máquinas de 36 bits y octal

  • Entre 1955 y 1975 aproximadamente, antes de la memoria de semiconductores, la memoria dominante era la core memory, hecha con pequeños anillos de ferrita y cables de cobre; de ahí surgieron términos de Unix como in core y core dump
  • Después de 2000, cuando los sistemas multiprocesador se volvieron comunes incluso en computadoras de escritorio, core también pasó a usarse como abreviatura de processor core, y el antiguo sentido relacionado con memoria se entiende cada vez menos
  • La jerarquía de bytes de 8 bits y palabras de 16/32/64 bits no se volvió prácticamente universal sino después de 1983; antes tenía mucho peso la tradición de arquitecturas con palabras de 36 bits
    • La DEC PDP-10 y la Symbolics 3600 Lisp machine eran máquinas representativas de 36 bits
    • La cancelación de la PDP-10 en 1983 marcó el fin de esta línea, y la Symbolics 3600 resistió alrededor de 10 años más
  • Una palabra de 36 bits se dividía naturalmente en doce campos de 3 bits, por lo que la representación octal resultaba natural; se consideraba que podía distinguirse entre la familia de 32 bits y la de 36 bits viendo si en los volcados de memoria aparecían dígitos mayores que 7
  • La sintaxis en la que un 0 inicial en los literales numéricos de C significa octal proviene de la historia de B y de la PDP-7/PDP-11; Java, Python y varios otros lenguajes heredaron esta huella al seguir las reglas léxicas de bajo nivel de C
    • Python 3, Perl 6 y Rust eliminaron la peligrosa sintaxis octal con leading-0, pero Go la mantuvo
    • Aunque el conjunto de instrucciones x86 suele explicarse en hexadecimal, para gran parte de él la representación octal resulta más natural si se entiende como campos de 3 bits

El infierno de la configuración RS-232 y el mundo de 7 bits

  • Un enlace TCP/IP suele parecer un flujo limpio de bytes de 8 bits, pero en los equipos RS-232 ambos lados tenían que hacer coincidir la velocidad de línea, el entramado de bytes, la paridad y los stop bits
  • Después de 1984 se volvió común 8N1 —8 bits, sin paridad, 1 stop bit—, pero antes se usaban muchas combinaciones, y si la configuración no coincidía solo se veía basura aleatoria de 8 bits llamada baud barf
  • La razón por la que la interfaz de terminal POSIX/Unix termios(3) tiene tantas opciones complejas cuyo significado hoy no resulta evidente es que había que manipular estas configuraciones RS-232
  • Si la paridad estaba activada, podía dañarse el bit alto de los datos binarios de 8 bits, y a las redes y el software que no corrompían el bit alto 0x80 se les llamaba 8-bit clean
    • La codificación MIME para correo electrónico y MIME64 surgieron por entornos donde seguían existiendo estas restricciones de 7 bits
    • Antes de MIME, en entornos Unix se usaban uuencode/uudecode para convertir datos de 8 bits a 7 bits, y todavía hoy pueden encontrarse ocasionalmente
  • También había una mezcla de conectores RS-232 DB-25 y DB-9, y se necesitaban equipos como gender changers, adaptadores DB-25↔DB-9, breakout boxes y null modems
    • Después de 2000 apareció la trampa de que tanto el RS-232 estándar de DB9/DB25 como el TTL serial de las placas de circuito se etiquetaran como RS232
    • TTL serial usa niveles de 3.3 V o 5 V, mientras que RS-232 estándar usa oscilaciones de voltaje mucho mayores; conectarlos sin un level shifter daña los componentes del lado TTL
  • RS-232 desapareció del conocimiento común a mediados y fines de los años 90, pero no desapareció por completo de las computadoras de uso general hasta alrededor de 2010, y aún permanece en equipos POS, consolas de diagnóstico de routers comerciales, consolas de depuración embebidas, sensores GPS y dispositivos IoT

WAN y comunidades antes de Internet

  • Hoy las WAN prácticamente convergieron en la Internet TCP/IP, pero desde fines de la década de 1970 hasta mediados de la de 1990 coexistieron varias WAN pre-Internet
  • UUCP significa Unix to Unix Copy Program; después de salir de Bell Labs en 1979 y hasta antes de la expansión de la Internet pública a mediados de los 90, ofreció networking de bajo costo entre sitios Unix mediante módems y la red telefónica
    • Originalmente era un sistema store-and-forward para propagar actualizaciones de software, pero sus usos principales terminaron siendo el correo electrónico y USENET, iniciado en 1980
    • En una estructura de tarifas telefónicas dividida entre tarifa plana local y cobro por distancia para llamadas de larga distancia, el tráfico UUCP podía encadenar saltos locales para evitar la transmisión directa de larga distancia
  • USENET, a partir de grupos para compartir código fuente, se convirtió en una semilla de las prácticas modernas de open source, y nombres de archivos de metadatos de proyecto como README, NEWS e INSTALL se consolidaron allí a comienzos de los 80
    • El Great Renaming de 1987 fue una reorganización de la jerarquía de nombres de grupos de USENET
    • En 1993, cuando AOL abrió el acceso a USENET para sus usuarios, comenzó el “September that never ended”, y la llegada masiva de usuarios nuevos dificultó la adaptación cultural
  • Las direcciones UUCP tenían forma de bang-path, como …!bigsite!foovax!barbox!user, y a comienzos de los 90, con el aumento del acceso a Internet, fueron reemplazadas por el formato user@hostname
    • Durante la transición también existieron direcciones híbridas que combinaban ruteo UUCP y ruteo de Internet usando %
  • Un BBS normalmente era un sistema en una computadora con un solo módem, al que se conectaba una persona por vez, y que ofrecía mensajes, subida y descarga de archivos, y juegos
    • El primer BBS se operó en Chicago en 1978, y durante los 18 años siguientes aparecieron y desaparecieron más de 100.000 BBS
    • Desde 1984, FidoNet dio soporte a correo electrónico entre BBS y a un sistema de foros similar a USENET
    • XMODEM, YMODEM y ZMODEM son casi el único recuerdo que queda de la cultura BBS, y todavía en 2018 algunos equipos de Cisco recibían parches mediante cargas XMODEM por puerto serial
  • También existieron servicios comerciales de timesharing como AOL, CompuServe, GEnie, The Source y Prodigy, además de WAN académicas como CSNET, BITNET, EARN y VIDYANET; el término listserv proviene del reflector de correo electrónico de BITNET

FTP, Gopher y el acceso a la información antes de la Web

  • Antes de que la World Wide Web se volviera universal en unos pocos años a comienzos de los 90, desde 1971 la transferencia de archivos entre sitios de Internet solía hacerse con ftp y el File Transfer Protocol
  • Cuando los navegadores web pudieron hablar directamente el protocolo FTP, el uso de ftp quedó absorbido en gran medida por los navegadores, y el prefijo de URL ftp: indica que se debe comunicar con un servidor FTP
  • En 1991, el mismo año en que Tim Berners-Lee creaba la World Wide Web, hackers de la University of Minnesota crearon Gopher, un protocolo de hipertexto centrado en menús
  • Gopher compitió durante algunos años con la Web temprana, pero su adopción se desaceleró a comienzos de 1993, cuando la universidad decidió cobrar licencias por la implementación
  • Los primeros navegadores web soportaban el protocolo Gopher y la visualización de documentos, pero para el año 2000 Gopher prácticamente había desaparecido, y solo algunos servidores seguían operando por nostalgia e ironía

Emuladores de terminal y el legado de los VDT

  • Los emuladores de terminal del Unix moderno son casi la última forma heredada de las primeras pantallas que imitaban al teletype, es decir, las glass TTY y las terminales dumb
  • El primer dispositivo de este tipo se despachó en 1969, y entre los modelos recordados está la ADM-3 de 1975
  • Los primeros VDT, como el ASR-33, solo podían mostrar mayúsculas, y Unix y Linux en 2018 conservaban el comportamiento de cambiar a un modo que convierte toda la entrada a mayúsculas si el nombre de inicio de sesión empieza con una mayúscula
  • Las “smart terminal” que aparecieron desde 1975, como la ADM-3A, y la DEC VT-100 de 1978, dejaron como herencia el ancho de 80 caracteres proveniente de las tarjetas perforadas y los tamaños de pantalla base de 24x80 o 25x80
  • Las funciones de control como cursor addressing, negrita, subrayado y reverse-video se volvieron comunes, y para abstraerlas se usaban la base de datos terminfo de Unix y la biblioteca curses(3)
  • Después de 1979 se extendieron los códigos de control de terminal ANSI basados en la DEC VT-100, y a comienzos de los 90 la compatibilidad ANSI era casi universal en los VDT
  • Hacia 1992, cuando las pantallas color bitmapped de las computadoras personales alcanzaron el dot pitch y la visualización nítida de texto de los VDT monocromos, el mercado de VDT se desplomó rápidamente en la computación de propósito general
  • La línea de comandos de Unix viene de la era de las printing terminal, anterior a los VDT, y de ahí viene también el uso de la palabra “printing” para referirse a generar salida
  • Las interfaces bidimensionales basadas en caracteres como vi(1), top(1) y mutt(1) eran interfaces visuales avanzadas de la era VDT, y más tarde, cuando el término GUI se generalizó, recibieron el nombre de TUI
  • El screensaver nació como software que cambiaba la imagen de la pantalla para evitar el phosphor burn-in de los CRT; en las pantallas flat screen, su propósito original desapareció

Primeras pantallas bitmapped y estética de 8 bits

  • El primer ejemplo de un sistema de producción que llevó a las pantallas actuales con manipulación a nivel de píxel fue el Alto de Xerox PARC, en 1973
    • La pantalla del Alto era de 608x808 píxeles, y el recuerdo de que era de clase 1024x1024 es una confusión con pantallas posteriores
    • En 1981, Dandelion alcanzó 1024x809, y el intento de comercializarlo como Xerox Star fracasó
    • En 1982, la Sun-1 de Sun Microsystems ofrecía 1024x800 píxeles, y las estaciones de trabajo de clase Sun se convirtieron en objetos que muchos hackers querían tener
  • Las computadoras personales a color ofrecían primitive bitmapped display desde 1975, pero el modo Hi-res de la Apple II apenas llegaba a 280x192
  • Como los hackers necesitaban una buena visualización de texto para programar y conocían los gráficos de estaciones de trabajo de clase 1024x1024, a menudo veían las pantallas color basadas en TV para consumidores como juguetes casi inútiles
  • La original Macintosh de 1984 fue la primera máquina de consumo con una bitmapped display exclusivamente en blanco y negro de 512x342, y pronto IBM EGA y sus clones ofrecieron 640x350 en 16 colores
  • Recién alrededor de 1990 los monitores color de 1024x1024 llegaron a la gama alta del mercado de consumo, y al generalizarse hacia 1992, los fabricantes de PC empezaron a presionar a los proveedores de estaciones de trabajo
  • Algunos jóvenes hackers de mediados de los 80 intentaron exprimir el máximo rendimiento de las pantallas color de baja resolución y del hardware de sonido temprano, y sus resultados —chunky graphics, pixelated sprites y sonidos chirpy/buzzy— se usan en juegos del siglo XXI como nostalgia 8-bit

Cultura de juegos antes de las GUI

  • Antes de que las pantallas a color bitmapped se volvieran comunes, había una fuerte tradición de juegos que funcionaban solo con interfaces de texto y gráficos de celdas de caracteres en VDT
  • La familia de Trek se remonta a 1971: juegos en los que el jugador controlaba la Enterprise y combatía contra Klingons, Romulans y otros
    • Detrás de una interfaz muy rudimentaria diseñada para teletype, se escondía un wargame relativamente sofisticado donde importaban la iniciativa, la sorpresa táctica y la logística
  • Colossal Cave Adventure fue el primer dungeon-crawling adventure game, de 1977; de ahí salieron “You are in a maze of twisty little passages, all alike” y xyzzy
    • Debido a los nombres de archivo de 6 caracteres del PDP-10, los primeros usuarios también llamaban ADVENT a este juego
    • También existe ADVENT, un port moderno a C
  • Zork fue el sucesor directo de ADVENT, publicado por primera vez en 1979 por hackers del MIT en el PDP-10, y más tarde logró éxito comercial
    • Expresiones como zorkmid, Great Underground Empire y grue vienen de aquí
  • Los roguelike son una familia de juegos que toma su nombre de Rogue (1980), donde se peleaba contra monstruos y se buscaban tesoros en mazmorras con mapas vistos desde arriba
    • Hack apareció en 1982 y Nethack en 1987
    • Nethack fue uno de los primeros programas cuyo grupo de desarrollo se organizó de forma consciente como una colaboración distribuida por Internet, y esa novedad quedó reflejada en el nombre del proyecto
  • Los descendientes de Rogue fueron los juegos TUI más populares y exitosos; aunque desaparecieron del conocimiento común después de mediados de los años 90, todavía hoy conservan una pequeña base de fans dedicados

La estructura de bits de ASCII y los caracteres de control

  • ASCII evolucionó a partir de una familia de códigos de caracteres para teletype a principios de los años 60, y probablemente sobreviva mucho tiempo porque los 127 code points bajos de Unicode fueron diseñados como ASCII
    • Si conoces UTF-8, todo archivo ASCII también es un archivo UTF-8 válido
  • El modificador Control del teclado básicamente borra los 3 bits superiores del carácter ingresado, deja solo los 5 bits inferiores y lo mapea a un carácter de control en el rango 0–31
    • Ctrl-SPACE, Ctrl-@ y `Ctrl-`` significan NUL
  • Los teclados muy antiguos implementaban Shift alternando 32 o 16 bits según la tecla; por eso las relaciones entre minúsculas y mayúsculas, y entre números y símbolos, tienen regularidad en ASCII
  • El ASCII original de 1963 era distinto del ASCII de 1967 que se usa hoy: no tenía tilde ni barra vertical, 5E era una flecha hacia arriba y no un caret, y 5F era una flecha hacia la izquierda y no un guion bajo
  • Muchos de los caracteres de control 0–31 son restos de protocolos de teletype; algunos sobreviven en texto o convenciones de Unix, y otros en protocolos de datos binarios
    • NUL: terminador de cadenas en C
    • EOT / Ctrl-D: entrada de end of file en terminales Unix
    • BEL / Ctrl-G: campana del teletype o señal de atención del VDT
    • BS, HT, LF, FF, CR, ESC, DEL: conjunto relativamente conocido de caracteres de control
    • DC1/DC3: se usaban como control de flujo por software XON/XOFF, y también se implementaron en Unix, CP/M y DOS
    • SUB / Ctrl-Z: carácter de end-of-file en DOS y Windows, heredado de CP/M y de los sistemas operativos de minicomputadoras DEC; en Unix se usa como tecla de suspensión de procesos
    • ESC: se sigue usando como introducer de secuencias de control en VT100, VDT ANSI y emuladores de terminal modernos
  • El valor 0x7F de DEL proviene de que en paper tape se podía sobrescribir cualquier carácter ASCII perforando 7 agujeros, y el lector de cinta saltaba DEL y NUL
  • En los VDT, la tecla Meta o Alt normalmente sumaba 128 al keycode ASCII, pero muchos emuladores de terminal modernos también usan el método de anteponer ESC a la tecla modificada
  • La estructura de bits de ASCII se puede examinar con ascii(1), y las tablas ASCII del texto también fueron generadas con esa herramienta

El lento nacimiento de la colaboración distribuida

  • Hoy damos por sentados el control de versiones distribuido público y la colaboración remota, pero sus herramientas base y convenciones de uso tardaron mucho en formarse
  • Uno de sus primeros antepasados fue el intercambio de cintas de DECUS, el Digital Equipment Corporation Users' Group fundado en 1961
    • Los usuarios de DEC hacían circular magnetic tape con software de public-domain, y para 1976 esta práctica ya estaba establecida
    • La convención README entró al mundo Unix a través de USENET, pero parece ser un rastro propagado desde las cintas de DECUS
  • En los años 70 hubo colaboración académica de software mediante el envío de código fuente por email y la publicación de distribuciones en sitios FTP
    • El email de red se inventó en 1971, y para 1973 ya era tan usado que representaba el 75% del tráfico de ARPANET
    • TeX de Donald Knuth, iniciado en 1978, es un ejemplo representativo que sobrevivió de esa época
  • Después de 1980, se volvió rápidamente una convención publicar código fuente en newsgroups dedicados de USENET y que colaboradores externos enviaran parches por email
    • comp.sources.unix era un lugar habitual donde los hackers de Unix buscaban código nuevo
  • El desarrollo completamente descentralizado necesitaba version control, patching y forge
    • SCCS nació en 1972, pero recién salió de Bell Labs en 1977, y su licencia propietaria frenó su difusión
    • RCS fue una alternativa libremente reutilizable aparecida en 1982
    • patch(1) apareció en 1984; antes de eso, lo habitual era intercambiar archivos modificados completos
  • Nethack es un roguelike iniciado en 1987, y fue un ejemplo temprano de desarrollo completamente distribuido: los desarrolladores intercambiaban por email archivos completos y luego parches, y usaban SCCS/RCS para gestionar copias locales
  • CVS apareció en 1990 y, después de que en 1993 se le agregara funcionamiento remoto por red, grandes proyectos como FreeBSD y NetBSD lo adoptaron rápidamente
  • Linux fue anunciado en 1991 como un esfuerzo de colaboración distribuida, pero su desarrollo inicial funcionaba con parches por email, como Nethack, y todavía no existía un repositorio público de Linux
  • SourceForge fue el primer software forge dedicado, aparecido en 1999; al principio solo soportaba CVS, pero aceleró la adopción de Subversion, lanzado en 2000
  • Subversion se volvió conocimiento común entre 2000 y 2005, y cuando Linus Torvalds creó Git en 2005, los sistemas de control de versiones anteriores quedaron rápidamente obsoletos

Flujo temporal que conviene recordar

  • En 1969, Ken Thompson comenzó el trabajo que se convertiría en Unix, se envió el primer VDT comercial y se intercambió el primer paquete en ARPANET
  • En 1970, se lanzó la DEC PDP-11, que luego influyó mucho en familias de arquitecturas como Intel y ARM
  • En 1971, en la ARPANET temprana se inventaron el correo electrónico de red y el uso del símbolo @
  • En 1973, la Xerox Alto fue pionera de la workstation: una computadora personal en red con pantalla de alta resolución y mouse
  • En 1977, Unix se portó a Interdata, convirtiéndose en la primera versión cuyo kernel estaba escrito en su mayor parte en C; se publicó SCCS y se lanzó Colossal Cave Adventure
  • En 1980, se inventó Rogue y comenzó USENET
  • En 1981, se lanzó la IBM PC, y con la implementación de TCP/IP en la VAX-11/780 de 4.1BSD Unix, las culturas de ARPANET y Unix empezaron a converger
  • En 1983, se canceló la PDP-10 y ARPANET se convirtió en Internet tras una transición técnica
  • En 1987, ocurrieron el Great Renaming de USENET, la invención de Perl y el inicio del proyecto Nethack
  • En 1991, comenzaron Linux y la World Wide Web, respectivamente, y se inventó Python
  • En 1993, Linux obtuvo capacidades TCP/IP y pasó de ser un juguete de aficionados a un OS serio; la apertura de USENET por parte de AOL inició el “September That Never Ended”, y Mosaic agregó gráficos e imágenes a la Web
  • En 1994, el Internet público despegó en Estados Unidos y se anunció USB
  • Entre 1995 y 1996 fue el punto máximo de las culturas UUCP/USENET y BBS, y también el período en que colapsaron bajo la presión del Internet público
  • En 1999, comenzó SourceForge, y cuando Linux empezó a funcionar en PC, se derrumbó el mercado de workstations Unix propietarias, como las de Sun
  • En 2005, los principales fabricantes dejaron de producir CRT y migraron a flat-panel; AOL dejó de dar soporte a USENET y Git se lanzó por primera vez
  • Entre 2007 y 2008, la transición de las PC de consumo a 64 bits puso fin a la era de 32 bits, y iPhone y Android se lanzaron por primera vez con OS basados en Unix

1 comentarios

 
GN⁺ 2023-10-01
Comentarios de Hacker News
  • Lo interesante es que la forma en que este texto lo conecta con el mundo moderno es bastante imprecisa. Por ejemplo, justo después de explicar que el prefijo de comandos Hayes AT tiene una propiedad útil para la sincronización automática de la velocidad de línea, dice que en 2017 los comandos AT todavía se usan para controlar módems celulares 3G/4G.
    Pero los módems modernos no se conectan en serie, y tampoco existe el concepto de velocidad de línea. Esa propiedad no tiene relevancia para el hardware moderno; es mucho más plausible explicar que fue fácil extender bases de código existentes a un entorno nuevo.
    “IoT devices still speak RS-232” también es una afirmación peligrosamente equivocada. RS-232 usa voltaje positivo para 0 y negativo para 1, cada uno en el rango de 3 a 15 V, así que si conectas RS-232 directamente a la interfaz serial de un dispositivo IoT moderno, es muy probable que lo dañes. Lo que comparten el serial antiguo y los puertos seriales de dispositivos modernos queda fuera del alcance de RS-232; por ejemplo, el framing 8N1 no lo define RS-232.
    La frase “todos los archivos ASCII son UTF-8 válidos” también es ambigua. ASCII es un conjunto de caracteres, no define la representación en disco, y un archivo ASCII guardado empaquetando caracteres en 7 bits no es UTF-8 sin manipulación. Considerando que antes se hablaron de varias longitudes de palabra y formatos de transmisión que no eran 8-bit clean, es una afirmación extraña.
    Decir que Git volvió obsoletos rápidamente a todos los sistemas de control de versiones anteriores también es exagerado si pensamos en Perforce. Git fue una gran mejora frente a CVS y SVN, pero decir que convirtió en reliquia todo lo anterior parece una afirmación de alguien que no conoce una gran parte de la industria del software.
    Claro, esto es hilar demasiado fino, pero si el tono general del texto es presumido y puntilloso, no es injusto criticarlo con el mismo estándar.

    • La frase “los dispositivos IoT todavía usan RS-232” en realidad es bastante acertada. Parece que estás pensando en dispositivos modernos de bajo voltaje, pero en entornos industriales Modbus y RS-485/RS-232 siguen muy vivos, y el IoT también está muy activo.
      Tampoco es correcto decir que los módems modernos no se conectan en serie. Quizá no en una forma que necesariamente llamaríamos RS-232, pero hasta hace unos años normalmente usaban líneas USB, y USB también es un bus serial.
      Los comandos AT todavía se usan en casi todos los módems, incluso en el teléfono que llevas en el bolsillo. Es la forma en que un módem celular establece una llamada en la red telefónica, y el venerable ATDT se sigue usando para configurar llamadas de red. El conjunto de comandos AT servía para controlar propiedades de la llamada, como el establecimiento de la llamada, la velocidad máxima y los protocolos permitidos; la negociación automática es una etapa aparte en la capa de red/módem. Los módems antiguos te dejaban escuchar ese proceso por el parlante, pero ahora simplemente no lo oyes.
    • Si nos ponemos puntillosos, UTF-8 tampoco define la representación en disco; es solo una codificación de caracteres del conjunto de caracteres Unicode. Aun así, en el sentido de que define una representación en bits, la frase “ASCII también es válido como UTF-8” es correcta.
      Cómo se transportan estos conjuntos de caracteres sobre otros protocolos queda fuera de su alcance.
    • No sé quién decidió que “los módems modernos no se conectan en serie y no tienen concepto de velocidad de línea”. Ahora mismo estoy depurando en la segunda pantalla un microcontrolador conectado por un enlace serial a un módem LTE Cat M1.
      Por defecto es una línea 115200 8n1, también se puede cambiar la velocidad, y hay autodetección de velocidad. Después de que el módem indica con una línea separada que está listo, si envías AT a la velocidad deseada normalmente responde alrededor del tercer intento.
    • Este texto busca dar explicaciones a nivel de conocimiento general. No pretende cubrir toda la industria del software, sino solo lo que un hacker probablemente sabría.
      En ese sentido, hoy Git es de facto el único sistema de control de versiones usado para la colaboración distribuida en código fuente.
    • Esto sí parece una reacción excesivamente puntillosa. Por el contexto, basta con entender que se refiere a ASCII almacenado en bytes de 8 bits.
  • Como explicación complementaria de un veterano, en los módems telefónicos 56K era realmente el máximo. Dentro de la red telefónica se transmitían muestras de 8 bits 8 mil veces por segundo, lo que daba 64 Kbps, pero a veces el bit menos significativo se robaba para otras señales y no era audible para el cliente telefónico.
    En lugar de intentar que el módem se sincronizara con ese bit robado, era más fácil usar solo los 7 bits confiables, y por eso quedaban 56 Kbps. https://en.wikipedia.org/wiki/Robbed-bit_signaling
    Los 9600 bps usados de hecho como velocidad de terminal son una convención más antigua que los módems de 9600 bps. Hacia mediados o fines de los 80, un módem de 9600 bps era algo impresionante, y para un usuario de terminal era lo bastante rápido, además de ser una velocidad que las terminales de la época podían manejar. Recuerdo una terminal, creo que una Volker-Craig 4404, que no podía seguirle el ritmo a 9600 bps y había que bajarla a unos 4800 bps.

    • La razón por la que 9600 bps se volvió la velocidad estándar en terminales fue que, con framing de 10 bits (inicio/byte/parada), permitía enviar una pantalla completa de 80×24 en menos de 2 segundos, sin imponer una carga excesiva de interrupciones o DMA a hosts de una fracción de MIPS al atender a varios usuarios.
      Los multiplexores de terminales de minicomputadoras normalmente agrupaban la transmisión cuando podían: traían por DMA un bloque de caracteres desde memoria, lo enviaban y luego mandaban al CPU solo una interrupción de “completado”. Incluso en modo carácter, solo avisaban al CPU cuando el búfer de recepción se llenaba o cuando llegaba un carácter de secuencia como retorno de carro.
      Por eso muchas mainframes y minicomputadoras usaban terminales en modo bloque. La aplicación usaba una API de formularios, y la edición y la entrada se manejaban en la terminal. La computadora enviaba el formulario completo a la terminal, y después de que el usuario corregía errores e incluso hacía validaciones como campos numéricos/alfanuméricos, enviaba el contenido de los campos a la computadora mediante una acción explícita de “terminado”.
      Incluso en uso completamente interactivo, estos sistemas preferían un modo de línea, donde el contenido de la línea actual solo se transmitía ante ciertas acciones y la edición de línea ocurría en la terminal. El modo “raw” al estilo UNIX, aunque reducía un poco el costo de la terminal, tenía demasiado overhead para la cantidad de usuarios que el sistema debía soportar.
    • Aun teniendo un módem de 56k, hasta que la banda ancha se masificó mucha gente quedó atada a conexiones de 28.8. Las líneas telefónicas rurales rara vez manejaban 56k de forma confiable.
    • ¿4800 bps? En otros tiempos éramos felices con que saliera 2400.
      Tristemente, yo tenía una placa de 1200, y mi tío decía que su primer módem fue de 300.
      También recuerdo la configuración de 110, que quizá se remonte hasta el puente aéreo de Berlín de 1948.
  • Cuando toqué por primera vez el uso de comandos AT en un módem 4G, me dio mucha risa. Esa sensación familiar seguía funcionando tal cual. Aunque se extrañaban un poco el marcado y el sonido del módem
    Sorprende que la industria de módems 3G/4G no haya creado una mejor forma de hablar con el dispositivo. Incluso ISDN tenía una API decente ampliamente implementada

    • Ni siquiera tiene que ser 3G/4G. Si manejas Wi-Fi en un ESP8266, probablemente estés usando comandos AT. Claro que casi no se parecen al conjunto de comandos Hayes
      En cualquier caso, provoca nostalgia, asombro y terror en partes iguales
      https://docs.espressif.com/projects/esp-at/en/latest/esp32/A...
    • Cuando hice experimentos de comunicación satelital, me sorprendió tener que hacer el handshake con el conjunto de comandos AT al conectarme a Iridium
    • Hoy en día la mayoría de los módems 3G/4G se conectan por USB y, en los chipsets de Quectel, soportan QMI y/o MBIM, que son más fáciles de usar desde software que AT
      Aun así, queda un puerto de comunicación virtual para hablar por AT, y todavía puede ser necesario para algunas tareas de diagnóstico
      Configurar una conexión de datos con QMI/MBIM es mucho más fácil y eficiente que andar toqueteando AT y PPP
    • No supe si reír o llorar cuando mandé comandos AT para hacer que un módem celular descargara un archivo binario por HTTPS. Entiendo querer seguir usando un conjunto de comandos familiar, pero lo estiraron hasta dejarlo irreconocible respecto de su forma original
    • ¿Cómo debería verse un protocolo mejor? En muchas áreas, la compatibilidad hacia atrás es una ventaja bastante buena
  • Más que decir que “los archivos históricos de USENET se pueden encontrar en Google Groups”, recomendaría archive.org. Hay muchas colecciones excelentes de grupos USENET guardados como archivos mbox, y se pueden descargar
    Basta con instalar algo como mboxgrep, importarlos en un lector de correo o simplemente leerlos como archivos de texto
    Este es un ejemplo
    https://archive.org/details/usenet-comp

  • A mediados de los años 80, desde una computadora de una universidad en Londres (creo que era la CDC Cyber de Imperial) intenté conectarme a una computadora de otra universidad (creo que Queen Mary) para probar un paquete de álgebra simbólica que solo estaba en una minicomputadora Unix
    Pasé dos horas completas solo encontrando la configuración de terminal y los valores correctos para el software intermedio, y terminé sintiendo que era mejor programar yo mismo todo lo que pudiera en una máquina de 8 bits, 2 MHz y 64K

    • Exacto. En aquella época, era bastante probable que quienes estudiaban Ciencias de la Computación en el Reino Unido hubieran aprendido de forma práctica código máquina Z80 o 6502 hackeando Elite, Jet Set Willy y Manic Miner en una ZX Spectrum/BBC Micro
  • El software tiene el problema de “seguir construyendo encima”. En construcción puedes reutilizar edificios y componentes existentes, actualizar algunas cosas internas o demoler y construir de nuevo
    Pero el software no hace eso. Instalamos tuberías de plomo, cable CAT-3, aislamiento de crin de caballo y ventanas de vidrio simple en un rascacielos nuevo. Porque es más fácil seguir construyendo sobre tecnologías viejas de hace décadas que inventar mejores PVC, CAT-6, aislamiento proyectado y ventanas triples; o porque no queremos volver obsoletos los estándares que todavía usan los edificios viejos, y sus dueños no quieren pagar la actualización
    Así terminamos con un rascacielos que funciona, pero por alguna razón hay que enseñarle aislamiento de crin de caballo al nuevo ingeniero

    • La gente siempre intenta crear tecnologías de software completamente nuevas y mejores. Pero al hacerlo se rompe la compatibilidad hacia atrás con lo existente, lo que dificulta mucho su adopción
      Por eso la mayoría queda como proyectos de investigación experimentales y, con suerte, solo las mejores partes van entrando gradualmente en proyectos existentes con el tiempo
    • Me parece interesante que haya tantas reacciones que parecen considerar que no hay nada valioso que aprender de más de 60 años de evolución de las computadoras
      Lo que se está pasando por alto es por qué muchas de estas “tecnologías viejas y horribles” siguen existiendo. Han resistido la prueba del tiempo. La tecnología moderna no las mantiene por pura nostalgia. En general siguen siendo útiles porque resuelven problemas con elegancia, ofrecen abstracciones útiles sobre sistemas más modernos o porque no se puede evitar la compatibilidad con sistemas existentes
      Claro que estas tecnologías viejas también tienen defectos. En unas décadas, todo el código de ustedes también los tendrá
      ¿Cuál era el XKCD sobre estándares?
  • Como alguien nacido en 1997 y que trabaja en la industria del software, algo que aprendí es que la ingeniería de software a veces se parece más a entender la historia de los sistemas. Me gusta leer textos así porque a veces hacen que algún concepto encaje de golpe

  • Desde mi perspectiva trabajando en sistemas embebidos, mucho de esto sigue siendo relevante. RS-232 en sí, es decir, la especificación de la capa física, se usa menos, pero el protocolo de comunicación UART que está debajo sigue muy vigente
    Por ejemplo, una placa de desarrollo Beaglebone puede arrancar subiendo el bootloader por XModem

    • Muchos microcontroladores pequeños todavía reflashean dispositivos mediante puertos UART y protocolos seriales. Es el mínimo común denominador de las interfaces de hardware y la forma más simple que funciona
  • En realidad, existía una interfaz TTY más antigua que usaba originalmente el ASR-33, llamada bucle de corriente, derivada de los circuitos telegráficos. En la década de 1970 empezaron a aparecer ASR-33 de modo dual que también soportaban RS-232 y, al final, RS-232 reemplazó por completo al bucle de corriente
    La KIM-1(https://en.wikipedia.org/wiki/KIM-1) usaba este método, y la interfaz de bucle de corriente(https://en.wikipedia.org/wiki/Current_loop) todavía es bastante común en contextos de control industrial. También es la base de MIDI(https://en.wikipedia.org/wiki/MIDI#Electrical_specifications)

    • Los bucles de corriente se usan donde los cables pueden ser muy largos. Si inyectas 20 mA en un extremo, sabes que puedes obtenerlos en el otro sin importar la longitud, algo que no ocurre con los métodos basados en voltaje
    • Los bucles de corriente siguieron siendo comunes incluso hasta los años 80, y se usaban en cualquier lugar donde se necesitaran tramos largos de cable. Según recuerdo, la VAX 780 soportaba 19200, pero solo con un bucle de 20 mA
  • FF (Form Feed), es decir, Ctrl-L, era interpretado por muchas terminales de visualización como el comando “borrar pantalla”, y los emuladores de terminal por software a veces todavía lo hacen
    Esto se usaba comúnmente en Usenet como marca de spoiler, porque el resto del mensaje no se mostraba hasta que el usuario avanzaba con una tecla como PgDn. En la pantalla se veía como ^L, lo que indicaba que había más contenido después, y el resto de la pantalla se borraba hasta que ^L salía de la pantalla al hacer scroll