2 pontos por GN⁺ 2025-02-21 | 1 comentários | Compartilhar no WhatsApp
  • A análise forense das fitas s1/s2 do DMR permitiu montar um sistema UNIX funcional; a s1 é a DECtape UNIX INIT com o kernel, e a s2 contém a maior parte dos arquivos da distribuição
  • O kernel da s1 é o kernel UNIX legível por máquina mais antigo já identificado até agora, situado entre o V1 e o V2, e consegue executar tanto a.out do V1 quanto do V2
  • O tamanho do core do usuário aumentou para 16 KiB (8K words), como no V2, mas a syscall table é igual à do kernel V1 e do unix-jun72, então não inclui syscalls do V2
  • Como as condições de boot são exigentes, apenas o emulador PDP-11/20 do aap conseguiu inicializar o kernel; SIMH e Ersatz-11 travam antes do prompt de login
  • A imagem pública de disco RF inclui apenas os arquivos s1/s2, pode dar boot no emulador do aap e, pelo comportamento do init(7), parece que /usr ficava no RF

UNIX V2 “Beta” restaurado a partir das fitas s1/s2

  • A análise forense das fitas DMR mostrou que foi possível montar um sistema funcional a partir das fitas s1/s2
    • DMR tapes é o conjunto de fitas analisado
    • A fita s1 é a UNIX INIT DECtape que contém o kernel
    • A fita s2 contém a maior parte dos arquivos da distribuição
  • O kernel da s1 é o kernel UNIX legível por máquina mais antigo já identificado até agora, e fica entre o V1 e o V2
    • O kernel unix-jun72 sem modificações suporta apenas a.out do V1
    • O kernel da s1 consegue executar por padrão tanto a.out do V1 quanto do V2
    • O tamanho do core do usuário aumentou de 8 KiB (4K words) para 16 KiB (8K words)
  • A syscall table é a mesma do kernel V1 e do unix-jun72
    • Não inclui syscalls do V2
    • Do ponto de vista de syscalls, ele é mais próximo do V1, mas em tamanho de core e execução de binários V2 tem características do V2, por isso é tratado como “V2 beta”
  • No sistema, é possível executar ed, cc e a.out
    • Na sessão de exemplo, um programa hello world! é escrito, compilado e executado

Restrições de boot e imagem de disco RF

  • O ambiente capaz de dar boot é limitado
    • Apenas o emulador PDP-11/20 do aap conseguiu inicializar o kernel
    • SIMH e Ersatz-11 param antes de chegar ao prompt de login
  • O processo de instalação original consistia em dar boot pela s1 e depois restaurar os arquivos a partir da s2
    • Como o emulador do aap não oferece suporte a TC11, é difícil instalar diretamente das fitas s1/s2
  • A configuração real foi feita criando uma imagem de disco RF de forma indireta
    • Os arquivos da fita s1 foram extraídos e colocados em um disco RF vazio
    • Depois, o kernel unix-jun72 foi instalado e o boot via RF foi feito no SIMH
    • Em seguida, os arquivos restantes da s2 foram extraídos
    • Por fim, um hex editor foi usado para substituir o kernel unix-jun72 pelo kernel da s1
  • A imagem RF gerada contém apenas arquivos vindos de s1/s2
  • O programa init(7) não monta o RK em /usr
    • Esse comportamento sugere que /usr estava armazenado no RF

1 comentários

 
GN⁺ 2025-02-21
Comentários no Hacker News
  • Lembrei de uma piada que ouvi em uma palestra do Brian Kernighan. Era a história de que Ken Thompson criou um editor de texto, um compilador B e o esqueleto de gerenciamento de arquivos de entrada e saída em 3 semanas, e que isso acabou virando o UNIX
    O ponto da piada é que hoje somos um pouco menos eficientes do que naquela época

    • Ken é claramente um programador de primeira linha, e, se alguém assim consegue se concentrar por 3 semanas, dá para fazer muita coisa
      Pelo que me lembro, a esposa dele levou as crianças para a Inglaterra, então Ken pôde fazer o que quisesse. Claro que ele já tinha muita experiência antes mesmo de escrever o primeiro UNIX
      Para um programador que tem um projeto na cabeça, pode valer a pena tentar. Passar 3 semanas em algum lugar como uma cabana, longe do trabalho e da família, levando os livros e documentos necessários e desligando a internet. Se possível, usar um feature phone e ver até onde consegue chegar
      Mas teria que ser um projeto já bastante pensado e com um pouco de código já escrito. Pensando melhor, um projeto de baixo nível que dependa muito pouco de bibliotecas externas é o que melhor se encaixa nesse experimento. Se o projeto se apoiar em uma pilha de bibliotecas de terceiros, é fácil ficar travado quando algo der problema sem internet; nesse sentido, Ken também escolheu um projeto adequado
    • A entrevista está aqui: https://www.youtube.com/watch?v=EY6q5dv_B-o
      Tem uma hora, e Thompson conta muitas histórias interessantes. Kernighan faz muito bem o papel de deixar Thompson falar
    • Uma piada mais moderna diz que Ken Thompson, junto com Rob Pike e Robert Griesemer, projetou Go enquanto esperava a compilação de C / C++
    • Fico curioso sobre como os desenvolvedores iniciais do UNIX chegaram a esse nível de produtividade
      Queria saber se trabalhavam como em um horário das 9h às 17h, ou se entravam em modo goblin, deixando outras partes da vida de lado para terminar
    • Os primeiros 80% das funcionalidades de um projeto às vezes avançam muito rápido. Especialmente quando há interesse e muita motivação
      Mas os 20% restantes se estendem como uma cauda longa e, em geral, viram um esforço enorme que acaba minando a vontade
  • Fascinante a ponto de até Spock ficar impressionado. Quero aprender a compilar um emulador de PDP-11 no Mac

    • Compilar o emulador é bem fácil. Veja o simh. Ele tem boa portabilidade, então deve funcionar quase de cara
      Depois, vale tentar instalar a distribuição 2.11BSD. Ela é bem documentada e veio depois de muita da confusão do Unix inicial já ter passado. Mais tarde, também foi muito divertido brincar com o RT-11, e cheguei a escrever alguns aplicativos pequenos nele
    • https://opensimh.org/
      Funciona bem também no Apple Silicon
    • Dá a sensação daquele momento de encontrar relíquias religiosas com um detector de metais
    • Fácil demais! Vou construir um eu mesmo com portas NAND
  • Muito bom
    É a primeira vez que vejo pessoas usando ed para trabalho real
    Também fico curioso para saber quem mais teve que lidar com ed. Recentemente precisei acessar um sistema muito antigo que não tinha vi, então criei meu próprio editor; se alguém precisar de um editor para sistemas antigos, pode entrar em contato. Ele não é nada sofisticado
    O trabalho das pessoas e dos pesquisadores que criaram esse software é impressionante, e deixo meu respeito aos verdadeiros engenheiros

    • Lembro de ter usado, nos anos 1960, em um sistema de time-sharing da Honeywell via Teletype ASR-33, um editor parecido com ed
      Não lembro os detalhes, mas, ao criar um arquivo novo, ele era executado com make . Se você digitasse make love, ele imprimia not war antes de entrar no editor
    • Não era ed, mas claramente foi influenciado por ele: tenho idade suficiente para ter feito uma prova em uma escola de datilografia usando o edlin do MS-DOS 3.3
      Depois disso nunca mais usei, e, alguns anos depois, quando passei a poder usar Xenix, também não usei ed. vi era uma alternativa muito mais sensata
    • Em agosto, usei ed no Termux do celular para escrever http://canonical.org/~kragen/sw/dev3/justhash.c
      Alguém disse que o teclado na tela do Android era tão horrível para vi que usava ed no celular, e, como isso realmente fazia sentido, resolvi tentar. No celular, ed era um pouco pior que vi, mas os dois eram ruins de maneiras diferentes
      No HeliBoard, digitar comandos do ed no teclado era muito mais fácil do que no vi, mas algumas vezes fiquei confuso com o estado do buffer de um jeito que não teria acontecido no vi. Talvez melhorasse com prática, mas acabei voltando para o vi
    • Em meados dos anos 90, eu tinha um AT&T 3B2, que só tinha ed, e usava um terminal DEC VT-102
      ed funciona, mas pelos padrões modernos não é divertido. Ainda assim, comparado à saída em teletipo, usá-lo em uma tela devia ser incrível
      Além disso, um 3B2 de cerca de 1 MIP conseguia atender aproximadamente 20 usuários simultâneos
    • Um dos meus primeiros trabalhos de consultoria foi escrever um tutorial de ed para um sistema Coherent
      Uso ed com frequência e, na verdade, usei ontem. Eu precisava editar algo sem limpar a tela
      Antes disso, também criei um editor para imagens de cartões armazenadas em disco, mas era bem primitivo
  • De vez em quando gosto de dar uma olhada na lista de e-mails tuhs. É legal ver nomes como Ken Thompson e Rob Pike, além de vários outros menos conhecidos que participaram dos primórdios do UNIX e da computação

  • Parece arqueologia de software

    • Um dos vários motivos pelos quais detesto a era do SaaS é que esse tipo de coisa nunca mais vai acontecer. Em 2075, ninguém vai inicializar um Notion ou Figma antigo para pesquisa ou nostalgia.
      Assim como a cultura produzida e consumida nas redes sociais, ou muitos outros aspectos da cultura da internet, é algo totalmente efêmero e descartável. Não há história nem futuro.
      SaaS não é simplesmente fechado; muitas vezes, na prática, está literalmente preso a uma única instalação. Até daria para arquivar e inicializar em outro lugar, mas fazer isso anos depois, sem a equipe original, seria uma tarefa muito maior do que inicializar o Unix de 1972 em um emulador num PC moderno.
      Aquele Unix tinha manuais e foi projetado para ser instalado e executado em vários ambientes de distribuição. SaaS é mais próximo de uma bagunça que só o autor consegue distribuir — não necessariamente por intenção, mas porque não há forças evolutivas pressionando para que seja feito de outro modo.
      Muitas vezes ele também fica entrelaçado internamente com outros SaaS, de modo que talvez seja preciso arquivar e restaurar o estado inteiro da nuvem, como se fosse um único computador global em que software proprietário está sendo editado no próprio lugar.
    • Não é tão legal quanto parece.
  • Alguém teria alguma referência sobre o que significam aquelas permissões de arquivo? Consigo deduzir mais ou menos, mas não encontrei nada sobre permissões do Unix v2.
    A saída do ls parece familiar, mas a parte sdrwrw é estranha para mim.

    • Alguém deixou no thread da lista de e-mails um link para uma página de manual extraída:
      https://gitlab.com/segaloco/v1man/-/blob/master/man1/stat.1?...
      Em sdrwrw, a primeira coluna é s ou l, significando small ou large. A segunda coluna é d, x, u ou -, significando diretório, executável, setuid ou nada. O restante são os bits de leitura/escrita para proprietário e não proprietário.
  • Hello world com 1328 bytes? Ficou inchado!

    • Isso me lembra um compilador que, de brincadeira, colocava poemas longos em todos os binários. Você já deve ter ouvido falar em número mágico, mas aquilo tinha um soneto mágico.
      Achei que fosse um compilador Rust inicial, mas não consegui encontrar referências. Talvez fosse Go.
      Edit: encontrei. 'rust-lang/rust#13871: "hello world" contains Lovecraft quotes' https://github.com/rust-lang/rust/issues/13871
    • A minha https://github.com/pts/minilibc686 consegue fazer hello world com printf em menos de 1 KiB no i386. Hello world com write fica abaixo de 170 bytes.
    • Hora de tunar meu Unix!
  • Muito legal. Será que dá para entrar nesse portal do tempo e viver numa realidade alternativa?

    • Você quer dizer a época em que se usava gasolina com chumbo, fumaça de cigarro era aceita em todo lugar e amianto era usado em tudo que se pudesse imaginar? Foi uma década fascinante, mas é bem provável que a qualidade de vida tenha aumentado enormemente desde então.
    • Dá, sim. É só comprar um terminal VT de verdade. Por exemplo, algo como https://www.ebay.com/itm/176698465415?_skw=vt+terminal&itmme...
      Arrume um adaptador para conectar ao computador e rode o *nix que quiser no simh. Como referência, recomendo https://jstn.tumblr.com/post/8692501831.
      Depois de fazer funcionar, empurre a máquina host para trás da mesa ou para algum lugar fora de vista e você poderá viver como se fosse 1980.
  • Ao recuperar fitas RF, até olhando só arquivos de texto simples dá para ver o espaço de buffer que arquivos DOS ou .iso não usam.
    Mesmo na distribuição 2.11 BSD, o tiling básico e o gerenciador de janelas precisam ser instalados no SO nativo. Por isso você acaba usando KDE ou algum gerenciador de janelas do X11.