1 pontos por GN⁺ 2023-10-01 | 1 comentários | Compartilhar no WhatsApp
  • Conhecimentos como a estrutura de bits do ASCII, RS-232, terminais de hardware e modems, que antes todo hacker conhecia naturalmente, deixaram de ser transmitidos no processo de iniciação à medida que os equipamentos e o ambiente de rede mudaram
  • Expressões como tty, SIGHUP, core dump, README e Ctrl-D são vestígios de ferramentas desaparecidas; conhecer sua origem ajuda a entender melhor o Unix moderno e as práticas de desenvolvimento
  • ASCII, máquinas de 36 bits, octal, configurações de RS-232, MIME, termios, curses e controle de terminal ANSI mostram as camadas de compatibilidade histórica que permaneceram nos sistemas atuais
  • Antes da internet de massa, UUCP, USENET, BBS, FidoNet, FTP, Gopher, timesharing comercial e WANs acadêmicas cuidavam, cada um à sua maneira, de transferência de arquivos, e-mail, fóruns e colaboração
  • O desenvolvimento baseado em repositórios públicos foi se formando ao passar por fitas do DECUS, FTP e e-mail, grupos de código-fonte da USENET, patch(1), SCCS/RCS/CVS, SourceForge e Subversion, chegando ao Git em 2005

Rastros do Unix deixados por hardware desaparecido

  • O fato de hackers mais jovens não conhecerem mais a estrutura de bits do ASCII e seus caracteres de controle peculiares não é um problema individual, mas resultado do desaparecimento dos terminais de hardware e do RS-232 do cotidiano
  • Antigamente, um terminal não era uma janela de software, mas um terminal de vídeo (VDT) conectado a um computador central; antes disso, usavam-se dispositivos da família teletype que imprimiam em papel
  • O tty do Unix vem da abreviação de teletype; o lp de /dev/lp significa line printer; e o /dev/drum de alguns Unix BSD vem dos primeiros dispositivos de tambor giratório
  • \r Carriage Return é a ação de levar a cabeça de impressão de volta ao lado esquerdo da linha; o Unix passou a tratar o fim de linha com apenas \n, mas outros sistemas operacionais continuaram usando \r\n
    • A ordem \r\n surgiu porque, no hardware inicial, o carriage return levava mais tempo do que a transmissão de um caractere e por isso precisava ser executado primeiro
  • A forma de vários usuários compartilharem a CPU de um único computador central era chamada de timesharing, e seus vestígios ainda permanecem na estrutura de múltiplos terminais virtuais do Unix moderno

RS-232, modems e comandos AT

  • O RS-232 é um protocolo de hardware desenvolvido no início dos anos 1960 para permitir a comunicação entre teletypewriters e modems; antes do USB, um link “serial” normalmente significava RS-232
  • Um modem era o dispositivo que permitia enviar sinais digitais por linhas telefônicas, e hackers usavam bastante modems externos em formato de caixa separada
    • Modems internos eram vulneráveis ao ruído de RF dentro do gabinete, e as luzes indicadoras dos modems externos eram úteis para diagnosticar problemas
    • Era possível distinguir em certa medida uma conexão bem-sucedida de uma falha de sincronização pelos bipes e chiados do modem
  • No SIGHUP do Unix, HUP significa Hang Up e originalmente indicava a situação em que a conexão do modem era encerrada e o terminal de controle desaparecia
  • A velocidade dos modems subiu de 110bps até 56kbps no fim dos anos 1990, e no período de estabilidade entre cerca de 1984 e 1991, 9600bps era o mais comum
    • Por isso, muitos equipamentos com protocolo serial que ainda existem usam 9600bps como valor padrão
  • O prefixo de comando AT do Hayes Smartmodem tornou-se de fato universal depois de 1981, e era possível discar anexando um número de telefone após ATDT
    • O padrão de bits de AT tinha uma forma fácil de reconhecer mesmo quando o receptor não sabia a velocidade de transmissão, o que favorecia a sincronização automática
    • Mesmo em 2017, comandos AT foram encontrados em funções de controle de modems celulares 3G/4G de smartphones, e em um tipo amplamente distribuído, AT+QLINUXCMD= era usado como prefixo para encaminhar comandos a uma instância Linux no firmware do chip

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

  • Entre cerca de 1955 e 1975, antes da memória semicondutora, a memória dominante era a core memory, feita de pequenos anéis de ferrite e fios de cobre; foi daí que surgiram termos do Unix como in core e core dump
  • Depois de 2000, com a popularização de sistemas multiprocessados até mesmo em desktops, core também passou a ser usado como abreviação de processor core, e o antigo sentido ligado à memória foi sendo cada vez menos compreendido
  • A hierarquia de bytes de 8 bits e palavras de 16/32/64 bits só se tornou praticamente universal depois de 1983; antes disso, a tradição das arquiteturas de palavra de 36 bits era forte
    • O DEC PDP-10 e a Lisp machine Symbolics 3600 eram máquinas de 36 bits representativas
    • O cancelamento do PDP-10 marcou em 1983 o fim dessa linhagem, embora a Symbolics 3600 tenha resistido por cerca de mais uma década
  • Uma palavra de 36 bits podia ser dividida em 12 campos de 3 bits, o que tornava natural a representação em octal, e acreditava-se que era possível distinguir dumps de memória de linhagens de 32 bits e de 36 bits observando se apareciam dígitos maiores que 7
  • Na sintaxe de literais numéricos da linguagem C, o 0 inicial indicando octal vem da história do B e do PDP-7/PDP-11, e várias linguagens como Java e Python herdaram esse vestígio ao seguir as regras lexicais de baixo nível do C
    • Python 3, Perl 6 e Rust removeram a sintaxe perigosa de octal com zero à esquerda, mas Go a manteve
    • O conjunto de instruções x86 também costuma ser descrito em hexadecimal, mas grande parte dele é mais natural de entender em octal quando se pensa em campos de 3 bits

O inferno das configurações de RS-232 e o mundo de 7 bits

  • Links TCP/IP normalmente parecem fluxos limpos de bytes de 8 bits, mas equipamentos RS-232 exigiam que os dois lados combinassem velocidade de linha, framing de bytes, parity e stop bit
  • Depois de 1984, 8N1 — 8 bits, no parity, 1 stop bit — tornou-se comum, mas antes disso várias combinações eram usadas, e quando a configuração não batia aparecia apenas lixo aleatório de 8 bits chamado de baud barf
  • O motivo de a interface de terminal POSIX/Unix termios(3) ter tantas opções complexas que hoje parecem pouco significativas é que ela precisava manipular essas configurações de RS-232
  • Quando a parity estava ativada, o bit mais alto de dados binários de 8 bits podia ser corrompido, e redes e softwares que não estragavam o bit alto 0x80 eram chamados de 8-bit clean
    • A codificação MIME para e-mail e o MIME64 surgiram por causa desses ambientes onde as restrições de 7 bits ainda persistiam
    • Antes do MIME, uuencode/uudecode eram usados em ambientes Unix para converter dados de 8 bits em 7 bits, e ainda podem ser encontrados ocasionalmente hoje
  • Os conectores RS-232 também misturavam DB-25 e DB-9, e era preciso usar equipamentos como gender changer, adaptadores DB-25↔DB-9, breakout box e null modem
    • Depois de 2000, surgiu a armadilha de a designação RS232 ser usada tanto para o RS-232 padrão em DB9/DB25 quanto para TTL serial em placas de circuito
    • TTL serial opera em níveis de 3,3V ou 5V, enquanto o RS-232 padrão usa variações de tensão muito maiores; conectá-los sem um level shifter pode danificar os componentes do lado TTL
  • O RS-232 desapareceu do conhecimento comum em meados para o fim dos anos 1990, mas não sumiu completamente dos computadores de uso geral até por volta de 2010, e continua presente em equipamentos de PDV, consoles de diagnóstico de roteadores comerciais, consoles de depuração embarcados, sensores GPS e dispositivos IoT

WANs e comunidades antes da internet

  • Hoje, as WANs praticamente convergiram para a internet TCP/IP, mas do fim dos anos 1970 até meados dos anos 1990 coexistiram várias WANs pré-internet
  • UUCP é a sigla de Unix to Unix Copy Program e, depois de sair dos Bell Labs em 1979, forneceu conectividade de baixo custo entre sites Unix por modems e pela rede telefônica até a popularização da internet pública em meados dos anos 1990
    • Originalmente era um sistema store-and-forward para propagação de atualizações de software, mas seus principais usos passaram a ser email e a USENET, iniciada em 1980
    • Em uma estrutura tarifária em que as ligações eram divididas entre tarifa fixa local e cobrança por distância, o tráfego UUCP podia encadear hops locais e contornar o envio de longa distância
  • A USENET, a partir de grupos de compartilhamento de código-fonte, virou a semente de práticas modernas de open source, e nomes de arquivos de metadados de projeto como README, NEWS e INSTALL se consolidaram ali no começo dos anos 1980
    • O Great Renaming de 1987 foi uma reorganização da hierarquia de nomes dos grupos da USENET
    • Em 1993, quando a AOL abriu o acesso à USENET para seus usuários, começou o “September that never ended”, e o enorme fluxo de novos usuários dificultou a adaptação cultural
  • Endereços UUCP usavam o formato bang-path, como …!bigsite!foovax!barbox!user, e foram substituídos pelo formato user@hostname com o aumento do acesso à internet no começo dos anos 1990
    • No período de transição, também houve endereços híbridos que combinavam roteamento UUCP e roteamento de internet com %
  • BBS eram sistemas em que normalmente uma pessoa por vez se conectava a um computador com um modem, para acessar mensagens, upload e download de arquivos e jogos
    • A primeira BBS operou em Chicago em 1978 e, nos 18 anos seguintes, mais de 100 mil BBS surgiram e desapareceram
    • A partir de 1984, a FidoNet passou a oferecer email entre BBS e um sistema de fóruns parecido com a USENET
    • XMODEM, YMODEM e ZMODEM são talvez a única lembrança realmente remanescente da cultura BBS, e ainda em 2018 alguns equipamentos da Cisco recebiam patches por upload via XMODEM pela porta serial
  • Também existiam serviços comerciais de time-sharing como AOL, CompuServe, GEnie, The Source e Prodigy, além de WANs acadêmicas como CSNET, BITNET, EARN e VIDYANET; e a palavra listserv vem do refletor de email do BITNET

Acesso à informação antes de FTP, Gopher e da web

  • Antes de a World Wide Web se universalizar em poucos anos no começo dos anos 1990, a transferência de arquivos entre sites da internet desde 1971 normalmente era feita por ftp e pelo File Transfer Protocol
  • Quando os navegadores passaram a falar diretamente o protocolo FTP, o uso de ftp foi em grande parte absorvido pelos navegadores, e o prefixo de URL ftp: indica que é preciso se comunicar com um servidor FTP
  • Em 1991, no mesmo ano em que Tim Berners-Lee criava a World Wide Web, hackers da University of Minnesota criaram o protocolo de hipertexto orientado por menus Gopher
  • O Gopher competiu com a web inicial por alguns anos, mas sua adoção desacelerou no começo de 1993, quando a universidade decidiu cobrar licenciamento pelas implementações
  • Navegadores web iniciais suportavam o protocolo Gopher e a exibição de seus documentos, mas em 2000 o Gopher já havia praticamente desaparecido, com apenas alguns servidores mantidos por nostalgia e ironia

Emuladores de terminal e o legado dos VDTs

  • Os emuladores de terminal do Unix moderno são algo muito próximo da forma final herdada dos primeiros displays que imitavam teletypes, os glass TTYs, e dos dumb terminals
  • O primeiro dispositivo desse tipo foi lançado em 1969, e um modelo bem lembrado é o ADM-3 de 1975
  • Os primeiros VDTs, como o ASR-33, só conseguiam exibir maiúsculas, e o Unix e o Linux de 2018 mantêm o comportamento de mudar para um modo que converte toda a entrada para maiúsculas quando o nome de login começa com letra maiúscula
  • “Smart terminals” como o ADM-3A, que surgiu em 1975, e o DEC VT-100, de 1978, deixaram como legado a largura de 80 caracteres vinda dos cartões perfurados e os tamanhos de tela padrão 24x80 ou 25x80
  • Funções de controle como cursor addressing, bold, underline e reverse-video se tornaram comuns, e para abstraí-las o Unix usa o banco de dados terminfo e a biblioteca curses(3)
  • Depois de 1979, os códigos de controle ANSI baseados no DEC VT-100 se espalharam e, no começo dos anos 1990, a compatibilidade ANSI em VDTs era quase universal
  • Por volta de 1992, quando os displays coloridos bitmapped de computadores pessoais alcançaram o dot pitch e a nitidez de texto dos VDTs monocromáticos, o mercado de VDTs entrou em colapso rapidamente no uso geral
  • A linha de comando do Unix veio da era dos terminais de impressão, anterior aos VDTs, e é daí que vem o uso da palavra “printing” para significar exibir saída
  • Interfaces bidimensionais baseadas em texto como vi(1), top(1) e mutt(1) eram interfaces visuais avançadas da era dos VDTs e, mais tarde, quando o termo GUI se popularizou, passaram a ser chamadas de TUI
  • O screensaver começou como software que alterava a imagem da tela para evitar phosphor burn-in em CRTs, e em telas planas seu propósito original desapareceu

Displays bitmapped iniciais e a estética 8-bit

  • O primeiro exemplo de um sistema de produção que levou aos displays modernos de manipulação por pixel foi o Alto da Xerox PARC, em 1973
    • O display do Alto tinha 608x808 pixels, e a lembrança de que ele seria da classe 1024x1024 é uma confusão com displays posteriores
    • Em 1981, o Dandelion atingiu 1024x809, e a tentativa de comercializá-lo como Xerox Star fracassou
    • Em 1982, o Sun-1 da Sun Microsystems oferecia 1024x800 pixels, e workstations desse nível da Sun viraram objeto de desejo de muitos hackers
  • Computadores pessoais coloridos ofereciam displays bitmapped primitivos desde 1975, mas o modo Hi-res do Apple II tinha apenas 280x192
  • Como hackers precisavam de boa exibição de texto para programar e conheciam os gráficos de workstations da classe 1024x1024, muitos viam os displays coloridos de consumo baseados em TV como brinquedos quase inúteis
  • O Macintosh original de 1984 foi a primeira máquina de consumo com display bitmapped monocromático de 512x342, e logo depois o IBM EGA e seus clones passaram a oferecer 640x350 em 16 cores
  • Só por volta de 1990 monitores coloridos de 1024x1024 chegaram ao segmento premium do mercado consumidor, e quando se popularizaram por volta de 1992 os fabricantes de PCs começaram a pressionar os vendors de workstations
  • Em meados dos anos 1980, alguns hackers jovens tentaram extrair o máximo de desempenho de displays coloridos de baixa resolução e do hardware de som inicial, e os resultados — chunky graphics, sprites pixelados e sons chirpy/buzzy — passaram a ser usados como nostalgia 8-bit em jogos do século XXI

Cultura de jogos antes da GUI

  • Antes de os bitmapped color displays se tornarem comuns, havia uma forte tradição de jogos que funcionavam apenas com interfaces de texto e gráficos de células de caracteres de VDT
  • A linhagem de Trek remonta a 1971 e consistia em jogos nos quais o jogador controlava a Enterprise para lutar contra Klingons, Romulanos e outros
    • Por trás de uma interface muito rudimentar, projetada para teletype, escondia-se um wargame relativamente sofisticado em que initiative, tactical surprise e logistics eram importantes
  • Colossal Cave Adventure foi o primeiro dungeon-crawling adventure game, de 1977, e expressões como “You are in a maze of twisty little passages, all alike” e xyzzy vieram desse jogo
    • Por causa dos nomes de arquivo de 6 caracteres do PDP-10, os primeiros usuários também chamavam esse jogo de ADVENT
    • Também existe o port moderno em C ADVENT
  • Zork foi o sucessor direto de ADVENT, lançado pela primeira vez em um PDP-10 por hackers do MIT em 1979, e depois obteve sucesso comercial
    • Expressões como zorkmid, Great Underground Empire e grue vieram daí
  • Roguelike é uma família de jogos cujo nome vem de Rogue, de 1980; o formato consistia em lutar contra monstros e procurar tesouros em masmorras mostradas como mapas top-down
    • Hack apareceu em 1982, e Nethack em 1987
    • Nethack foi um dos primeiros programas cuja equipe de desenvolvimento foi conscientemente organizada como uma colaboração distribuída pela internet, e essa novidade se refletia no nome do projeto
  • Os descendentes de Rogue foram os jogos TUI mais populares e bem-sucedidos e, embora tenham desaparecido do senso comum desde meados dos anos 1990, ainda mantêm hoje uma pequena base de fãs dedicada

A estrutura de bits do ASCII e os caracteres de controle

  • O ASCII evoluiu da família de códigos de caracteres de teletype do início dos anos 1960 e provavelmente continuará existindo por muito tempo, já que os 127 primeiros code points do Unicode foram projetados como ASCII
    • Se você conhece UTF-8, então todo arquivo ASCII também é um arquivo UTF-8 válido
  • A tecla modificadora Control no teclado basicamente apaga os 3 bits mais altos do caractere digitado, deixando apenas os 5 bits inferiores, e o mapeia para um caractere de controle na faixa de 0 a 31
    • Ctrl-SPACE, Ctrl-@, `Ctrl-`` todos significam NUL
  • Teclados muito antigos implementavam Shift como um mecanismo que alternava 32 ou 16 bits dependendo da tecla, e por isso as relações entre minúsculas e maiúsculas no ASCII, e entre números e símbolos, têm certa regularidade
  • O ASCII original de 1963 era diferente do ASCII de 1967 usado hoje: não tinha tilde nem vertical bar, e 5E não era caret, mas uma seta para cima, enquanto 5F não era underscore, mas uma seta para a esquerda
  • Muitos dos caracteres de controle de 0 a 31 são vestígios de protocolos de teletype; alguns permanecem em texto ou convenções do Unix, e outros em protocolos de dados binários
    • NUL: terminador de string em C
    • EOT / Ctrl-D: entrada de end of file em terminais Unix
    • BEL / Ctrl-G: campainha do teletype ou sinal de atenção do VDT
    • BS, HT, LF, FF, CR, ESC, DEL: conjunto relativamente conhecido de caracteres de controle
    • DC1/DC3: usados como controle de fluxo por software XON/XOFF e implementados também em Unix, CP/M e DOS
    • SUB / Ctrl-Z: caractere de end-of-file no DOS e no Windows, herdado do CP/M e dos sistemas operacionais de minicomputadores DEC; no Unix, é usado como tecla de suspensão de processo
    • ESC: continua em uso como introducer de sequências de controle em VT100, ANSI VDT e em emuladores de terminal modernos
  • O valor 0x7F de DEL vem do fato de que, em paper tape, qualquer caractere ASCII podia ser sobrescrito com 7 furos; os leitores de fita ignoravam DEL e NUL
  • A tecla Meta ou Alt em VDTs normalmente somava 128 ao keycode ASCII, mas emuladores de terminal modernos também usam bastante o método de inserir ESC antes da tecla modificada
  • A estrutura de bits do ASCII pode ser examinada em ascii(1), e as tabelas ASCII do texto também foram geradas com essa ferramenta

O lento nascimento da colaboração distribuída

  • Hoje consideramos natural o controle de versão distribuído aberto e a colaboração remota, mas as ferramentas e práticas de uso que servem de base para isso demoraram muito para se formar
  • Um dos primeiros ancestrais foi o compartilhamento de fitas do DECUS, o Digital Equipment Corporation Users' Group, fundado em 1961
    • Usuários da DEC faziam circular magnetic tapes com software de domínio público, e em 1976 essa prática já estava estabelecida
    • A convenção README entrou no mundo Unix via USENET, mas parece ter sido propagada a partir das fitas DECUS
  • Nos anos 1970 já existia colaboração em software acadêmico com troca de código-fonte por email e publicação de distribuições em sites FTP
    • O email em rede foi inventado em 1971 e, em 1973, já era tão amplamente usado que representava 75% do tráfego da ARPANET
    • O TeX de Donald Knuth é um caso representativo ainda vivo desse período, iniciado em 1978
  • Depois de 1980, tornou-se rapidamente uma prática estabelecida publicar código-fonte em newsgroups dedicados da USENET e receber patches de contribuidores externos por email
    • comp.sources.unix era um lugar cotidiano onde hackers Unix buscavam código novo
  • Para um desenvolvimento totalmente descentralizado, eram necessários version control, patching e forge
    • O SCCS nasceu em 1972, mas só saiu dos Bell Labs em 1977, e sua licença proprietária retardou sua difusão
    • O RCS foi uma alternativa livremente reutilizável lançada em 1982
    • patch(1) surgiu em 1984; antes disso, era comum trocar arquivos inteiros alterados
  • Nethack é um jogo roguelike iniciado em 1987 e foi um caso inicial de desenvolvimento totalmente distribuído, no qual os desenvolvedores trocavam arquivos inteiros e depois patches por email, usando SCCS/RCS para gerenciar cópias locais
  • O CVS surgiu em 1990 e, depois que ganhou capacidade de operação remota em rede em 1993, grandes projetos como FreeBSD e NetBSD o adotaram rapidamente
  • O Linux foi anunciado em 1991 como um esforço de colaboração distribuída, mas o desenvolvimento inicial ainda seguia o modelo de patches por email, como no Nethack, e ainda não havia um repositório público do Linux
  • O SourceForge surgiu em 1999 como o primeiro software forge dedicado; no começo suportava apenas CVS, mas acelerou a adoção do Subversion, lançado em 2000
  • O Subversion virou senso comum entre 2000 e 2005, e quando Linus Torvalds criou o Git em 2005, os sistemas de controle de versão anteriores rapidamente se tornaram obsoletos

Fluxo temporal para lembrar

  • Em 1969, Ken Thompson começou o trabalho que viria a se tornar o Unix, o primeiro VDT comercial foi lançado e o primeiro pacote foi trocado na ARPANET
  • Em 1970, o DEC PDP-11 foi lançado e depois exerceu grande influência sobre famílias de arquiteturas, incluindo Intel e ARM
  • Em 1971, no início da ARPANET, foram inventados o e-mail em rede e o uso do símbolo @
  • Em 1973, o Xerox Alto liderou as workstation, computadores pessoais em rede com display de alta resolução e mouse
  • Em 1977, o Unix foi portado para o Interdata, tornando-se a primeira versão com a maior parte do kernel escrita em C; o SCCS foi lançado; e Colossal Cave Adventure foi lançado
  • Em 1980, Rogue foi inventado e a USENET começou
  • Em 1981, o IBM PC foi lançado e o TCP/IP foi implementado no 4.1BSD Unix do VAX-11/780, começando a unir a ARPANET e a cultura Unix
  • Em 1983, o PDP-10 foi cancelado e a ARPANET, após mudanças técnicas, tornou-se a Internet
  • Em 1987, aconteceram o Great Renaming da USENET, a invenção do Perl e o início do projeto Nethack
  • Em 1991, Linux e a World Wide Web começaram, e Python foi inventado
  • Em 1993, o Linux ganhou recursos de TCP/IP e passou de brinquedo de hobby a um SO sério; a abertura da USENET pela AOL deu início ao “September That Never Ended”; e o Mosaic adicionou gráficos e imagens à Web
  • Em 1994, a internet de massa decolou nos EUA e o USB foi anunciado
  • 1995~1996 foram o auge da cultura UUCP/USENET e BBS, e também o período em que ela ruiu sob a pressão da internet de massa
  • Em 1999, o SourceForge começou, e o Linux passou a rodar em PCs, derrubando o mercado de workstation Unix proprietárias da Sun e de outras empresas
  • Em 2005, os principais fabricantes deixaram de produzir CRT e migraram para flat-panel; a AOL encerrou o suporte à USENET; e o Git foi lançado pela primeira vez
  • Em 2007~2008, a transição dos PCs de massa para 64 bits encerrou a era de 32 bits, e iPhone e Android foram lançados pela primeira vez com sistemas operacionais baseados em Unix

1 comentários

 
GN⁺ 2023-10-01
Comentários do Hacker News
  • O interessante é que a forma como este texto se conecta ao mundo moderno é bem imprecisa. Por exemplo, logo depois de explicar que o prefixo de comando Hayes AT tem a propriedade útil de sincronizar automaticamente a velocidade da linha, ele diz que, ainda em 2017, comandos AT eram usados para controlar modems celulares 3G/4G
    Mas modems modernos não se conectam por serial, e o conceito de velocidade de linha também não existe. Essa propriedade é irrelevante no hardware moderno; a explicação de que era simplesmente fácil estender a base de código antiga para um novo ambiente parece muito mais plausível
    “IoT devices still speak RS-232” também é uma frase perigosamente errada. O RS-232 usa tensão positiva para 0 e tensão negativa para 1, cada uma na faixa de 3~15V, então conectar RS-232 diretamente à interface serial de um dispositivo IoT moderno tem grande chance de danificá-lo. O que as portas seriais antigas e as modernas compartilham está fora do escopo do RS-232; por exemplo, o enquadramento 8N1 não é definido pelo RS-232
    A frase “todo arquivo ASCII é UTF-8 válido” também é ambígua. ASCII é um conjunto de caracteres, não define uma representação em disco, e um arquivo ASCII armazenado com empacotamento de 7 bits não é UTF-8 sem manipulação. Considerando que antes o texto tratou de vários tamanhos de palavra e formatos de transmissão que não eram limpos em 8 bits, isso soa como uma afirmação estranha
    Dizer também que o Git tornou rapidamente obsoleto todo sistema de controle de versão anterior é exagerado, se você pensar em Perforce. O Git foi uma grande melhora em relação a CVS e SVN, mas dizer que tornou todo o resto ultrapassado parece uma afirmação de quem desconhece uma parte grande da indústria de software
    Claro, isso é pegar no pé demais, mas se o tom geral do texto é de superioridade e de escrutínio minucioso, não é injusto criticá-lo com o mesmo padrão

    • A frase “dispositivos IoT ainda usam RS-232” na verdade está bastante correta. Você parece estar pensando em dispositivos modernos de baixa tensão, mas no ambiente industrial Modbus e RS-485/RS-232 continuam vivos, e IoT também é bem ativo ali
      Também não é verdade dizer que modems modernos não se conectam por serial. Talvez não no formato que você chamaria especificamente de RS-232, mas até poucos anos atrás o normal era usar linhas USB, e USB também é um barramento serial
      Comandos AT ainda são usados em praticamente todos os modems, e até no celular no seu bolso. É assim que modems celulares configuram chamadas na rede telefônica, e o histórico ATDT continua sendo usado para configurar chamadas de rede. O conjunto de comandos AT servia para controlar propriedades da chamada, como estabelecimento da conexão, velocidade máxima e protocolos permitidos, enquanto a autonegociação era uma etapa separada na camada de rede/modem. Os modems antigos deixavam você ouvir esse processo pelo alto-falante; hoje ele só não é audível
    • Se formos ser minuciosos, UTF-8 também não define uma representação em disco; é apenas uma codificação de caracteres do conjunto Unicode. Ainda assim, no sentido de que define a representação de bits, a frase “ASCII é válido como UTF-8” está correta
      Como esse tipo de conjunto de caracteres é transportado sobre outros protocolos está fora do escopo da definição
    • Não sei quem decidiu que “modems modernos não se conectam por serial e não têm conceito de velocidade de linha”. Neste momento estou depurando, na segunda tela, um microcontrolador conectado por link serial a um modem LTE Cat M1
      O padrão é uma linha 115200 8n1, a velocidade pode ser alterada e também existe autodetecção de velocidade. O modem sinaliza prontidão por uma linha separada e, se você enviar AT na velocidade desejada, normalmente ele responde lá pela terceira tentativa
    • Este texto tem como objetivo uma explicação de nível introdutório. Ele declara explicitamente que não trata de toda a indústria de software, mas apenas das partes que um hacker provavelmente conheceria
      Nesse sentido, hoje o Git é de fato o único sistema de controle de versão usado na prática para colaboração distribuída em código-fonte
    • Isso realmente parece uma reação minuciosa demais. Pelo contexto, dá para entender que ele quis dizer ASCII armazenado em bytes de 8 bits
  • Como complemento de um veterano: em modems telefônicos, 56K era mesmo o limite máximo. Dentro da rede telefônica, eram enviados amostras de 8 bits 8 mil vezes por segundo, dando 64 Kbps, mas às vezes o bit mais baixo era roubado para outros sinais e isso não era audível para o assinante
    Em vez de tentar sincronizar o modem com esse bit roubado, era mais fácil usar só os 7 bits confiáveis, e assim chegava-se a 56 Kbps. https://en.wikipedia.org/wiki/Robbed-bit_signaling
    A 9600bps usada na prática como velocidade de terminal é uma convenção ainda mais antiga que os próprios modems de 9600bps. Lá pelo fim dos anos 80, um modem de 9600bps era algo impressionante, e para usuários de terminal era suficientemente rápido, ao mesmo tempo que ainda era uma velocidade suportável para os terminais da época. Um terminal que eu lembro como Volker-Craig 4404 não conseguia acompanhar 9600bps, então precisava ser usado reduzido para algo como 4800bps

    • A razão de 9600bps ter virado a velocidade padrão em terminais é que, com enquadramento de 10 bits (início/byte/parada), dava para enviar uma tela inteira de 80×24 em menos de 2 segundos sem impor uma carga excessiva de interrupções ou DMA em hosts com frações de MIPS ao atender vários usuários
      Multiplexadores de terminais de minicomputadores geralmente agrupavam transmissões quando possível: buscavam um bloco de caracteres da memória via DMA, enviavam tudo e então só mandavam uma interrupção de “concluído” para a CPU. Mesmo em modo caractere, só avisavam a CPU quando o buffer de recepção enchia ou chegava um caractere de sequência, como carriage return
      Por isso muitos mainframes e minicomputadores usavam terminais em modo bloco. O aplicativo usava uma API de formulários, e a edição e a entrada eram tratadas no terminal. O computador enviava o formulário inteiro ao terminal, e depois que o usuário corrigia erros e até concluía validações como campos numéricos/alfanuméricos, os conteúdos dos campos eram enviados ao computador por uma ação explícita de “concluir”
      Mesmo em uso totalmente interativo, esses sistemas preferiam o modo linha, em que o conteúdo da linha atual só é transmitido em certas ações e a edição da linha acontece no terminal. O modo “raw” ao estilo UNIX tinha overhead alto demais em relação ao número de usuários que o sistema precisava suportar, mesmo que o custo do terminal fosse um pouco maior
    • Mesmo com modem 56k, muita gente ficou presa a uma conexão de 28.8 até a banda larga se popularizar. Linhas telefônicas rurais raramente aguentavam 56k de forma estável
    • 4800bps? Antigamente eu ficava feliz quando conseguia 2400
      Tristemente, eu era do tempo da placa de 1200, e meu tio dizia que o primeiro modem dele foi de 300
      Também lembro da configuração de 110, que talvez volte até a ponte aérea de Berlim de 1948
  • Quando mexi pela primeira vez com comandos AT em um modem 4G, dei risada na hora. A sensação familiar funcionou exatamente igual. Só senti falta da discagem e do barulho do modem
    É surpreendente que a indústria de modems 3G/4G não tenha criado uma forma melhor de conversar com o dispositivo. Até o ISDN tinha uma API decente amplamente implementada

    • Nem precisa ser 3G/4G. Se você lida com Wi-Fi no ESP8266, é bem provável que esteja usando comandos AT. Claro, é algo quase totalmente diferente do conjunto de comandos Hayes
      Ainda assim, dá nostalgia, admiração e medo em partes iguais
      https://docs.espressif.com/projects/esp-at/en/latest/esp32/A...
    • Quando fiz experimentos com comunicação via satélite, fiquei surpreso ao ter de fazer handshake com o Iridium usando um conjunto de comandos AT
    • Hoje em dia, a maioria dos modems 3G/4G se conecta por USB e, em chipsets da Quectel, dá suporte a QMI e/ou MBIM, o que é mais fácil de usar em software do que AT
      Mesmo assim, a porta serial virtual para falar via AT continua existindo, e ainda pode ser necessária para alguns trabalhos de diagnóstico
      Configurar uma conexão de dados com QMI/MBIM é muito mais fácil e eficiente do que ficar mexendo com AT e PPP
    • Um momento em que eu não sabia se ria ou chorava foi quando mandei comandos AT para fazer um modem celular baixar um arquivo binário por HTTPS. Eu entendo querer continuar usando um conjunto de comandos conhecido, mas ele foi estendido a ponto de ficar irreconhecível em relação à forma original
    • Como seria um protocolo melhor? Em várias áreas, a compatibilidade retroativa é uma vantagem muito boa
  • Em vez de dizer que “arquivos históricos da USENET podem ser encontrados no Google Groups”, eu recomendaria o archive.org. Há muitas coleções excelentes de grupos da USENET salvos como arquivos mbox, e dá para baixá-las
    Basta instalar algo como mboxgrep, importar em um leitor de e-mail ou simplesmente ler como arquivo de texto
    Um exemplo está aqui
    https://archive.org/details/usenet-comp

  • Em meados dos anos 1980, de um computador universitário em Londres (acho que era um CDC Cyber do Imperial), tentei acessar outro computador universitário (acho que era o da Queen Mary) para usar um pacote de álgebra simbólica que só existia em um minicomputador Unix
    Gastei duas horas inteiras só tentando encontrar as configurações corretas de terminal e os parâmetros dos softwares intermediários, e saí com a sensação de que teria sido melhor programar eu mesmo o que desse para fazer numa máquina de 8 bits, 2 MHz e 64K

    • Sim. Naquela época, havia uma boa chance de que estudantes de ciência da computação no Reino Unido tivessem aprendido Z80 ou 6502 em código de máquina na prática, hackeando Elite, Jet Set Willy e Manic Miner em ZX Spectrum/BBC Micro
  • Software tem um problema de “continuar empilhando por cima”. Na construção civil, você pode reutilizar prédios e componentes existentes, fazer upgrade de algumas partes internas ou demolir e construir de novo
    Mas software não faz isso. Colocamos canos de chumbo, cabos CAT-3, isolamento de crina de cavalo e janelas de vidro simples dentro de um arranha-céu novo. Talvez porque seja mais fácil continuar empilhando sobre tecnologia velha, usada há décadas, do que inventar PVC melhor, CAT-6, isolamento por espuma e janelas triplas, ou porque ninguém quer tornar obsoleto o padrão que os prédios antigos ainda usam e os proprietários não querem pagar pelo upgrade
    Então acabamos com arranha-céus que funcionam, mas por algum motivo ainda precisamos ensinar isolamento de crina de cavalo aos engenheiros novos

    • As pessoas estão sempre tentando criar tecnologias de software totalmente novas e melhores. Mas aí a compatibilidade retroativa com as coisas existentes quebra, e a adoção fica muito mais difícil
      Por isso, a maioria acaba ficando em projetos de pesquisa experimentais e, com sorte, só as melhores partes vão entrando aos poucos em projetos existentes com o passar do tempo
    • É interessante ver tantas reações que parecem achar que não há nada a aprender com mais de 60 anos de evolução da computação
      O que elas estão deixando passar é o motivo de boa parte dessa “tecnologia velha e ruim” ainda existir. Ela passou no teste do tempo. As tecnologias modernas não mantêm essas coisas por pura nostalgia. Em geral, elas ainda são úteis porque resolvem problemas de forma elegante, oferecem abstrações úteis sobre sistemas mais modernos ou porque a compatibilidade com sistemas existentes é inevitável
      Claro que essas tecnologias antigas também têm defeitos. Daqui a algumas décadas, todo o seu código também terá
      Como era mesmo aquele XKCD sobre padrões?
  • Como alguém nascido em 1997 e trabalhando na indústria de software, uma coisa que aprendi é que engenharia de software às vezes se parece mais com entender a história do sistema. Gosto desses textos porque às vezes eles fazem certos conceitos simplesmente se encaixarem de repente

  • Para quem trabalha com sistemas embarcados, boa parte disso ainda é relevante. O próprio RS-232, isto é, a especificação da camada física, é menos usado, mas o protocolo de comunicação UART por baixo dele continua firme
    Por exemplo, a placa de desenvolvimento Beaglebone pode inicializar com upload do bootloader via XModem

    • Muitos microcontroladores pequenos ainda reflasheiam dispositivos por porta UART e protocolo serial. É o mínimo denominador comum das interfaces de hardware e a forma mais simples que funciona
  • Na verdade, havia uma interface TTY mais antiga que o ASR-33 usava originalmente, chamada de loop de corrente, derivada de circuitos telegráficos. Na década de 1970, começaram a surgir ASR-33 de modo duplo que também suportavam RS-232, e no fim o RS-232 substituiu completamente o loop de corrente
    O KIM-1(https://en.wikipedia.org/wiki/KIM-1) usava esse método, e a interface de loop de corrente(https://en.wikipedia.org/wiki/Current_loop) ainda é bastante comum em contextos de controle industrial. Também é a base do MIDI(https://en.wikipedia.org/wiki/MIDI#Electrical_specifications)

    • O loop de corrente é usado em lugares onde o comprimento do cabo pode ser muito grande. Se você injeta 20 mA em uma ponta, sabe que pode obtê-los na outra independentemente da distância, o que não acontece em sistemas baseados em tensão
    • O loop de corrente ainda era comum até os anos 80 e era usado em qualquer lugar que exigisse trechos longos de cabo. Se bem me lembro, o VAX 780 suportava 19200, mas isso só era possível no loop de 20 mA
  • FF (Form Feed), ou Ctrl-L, era interpretado por muitos terminais de vídeo como um comando de “limpar a tela”, e terminais emuladores de software às vezes ainda fazem isso
    Isso era comumente usado no Usenet como marcação de spoiler. O restante da mensagem não era exibido até o usuário avançar com uma tecla como PgDn. Na tela, aparecia como ^L, então dava para saber que havia mais conteúdo depois, e o restante da tela era apagado até que o ^L saísse da área visível por rolagem