2 puntos por GN⁺ 2025-02-21 | 1 comentarios | Compartir por WhatsApp
  • Se realizó un análisis forense de s1/s2 de las cintas DMR para construir un sistema UNIX funcional; s1 es una UNIX INIT DECtape que contiene el kernel y s2 contiene la mayor parte de los archivos de la distribución
  • El kernel s1 es el kernel de UNIX legible por máquina más antiguo confirmado hasta ahora; se sitúa entre V1 y V2, y puede ejecutar tanto archivos a.out de V1 como de V2
  • El tamaño del core de usuario aumentó a 16 KiB (8K words) como en V2, pero la tabla de syscalls es igual a la de V1 y al kernel unix-jun72, por lo que no incluye las syscalls de V2
  • Debido a requisitos de arranque exigentes, solo el emulador PDP-11/20 de aap logró iniciar el kernel; SIMH y Ersatz-11 se detienen antes del prompt de login
  • La imagen pública del disco RF solo incluye archivos de s1/s2, puede arrancar en el emulador de aap y, por el comportamiento de init(7), parece que /usr estaba en RF

UNIX V2 “Beta” restaurado desde las cintas s1/s2

  • El análisis forense de las cintas DMR permitió construir un sistema funcional a partir de las cintas s1/s2
    • DMR tapes es el conjunto de cintas que se analizó
    • La cinta s1 es una UNIX INIT DECtape que contiene el kernel
    • La cinta s2 incluye la mayor parte de los archivos de la distribución
  • El kernel s1 es el kernel de UNIX legible por máquina más antiguo confirmado hasta ahora, y se ubica entre V1 y V2
    • El kernel unix-jun72 sin modificar solo soporta a.out de V1
    • El kernel s1 puede ejecutar por defecto tanto a.out de V1 como de V2
    • El tamaño del core de usuario aumentó de 8 KiB (4K words) a 16 KiB (8K words)
  • La tabla de syscalls es la misma que en V1 y en el kernel unix-jun72
    • No incluye las syscalls de V2
    • Desde el punto de vista de las syscalls está más cerca de V1, pero por el tamaño del core y la ejecución de binarios V2 tiene rasgos de V2, por lo que se considera una “V2 beta”
  • En el sistema se pueden ejecutar ed, cc y a.out
    • En la sesión de ejemplo se escribe, compila y ejecuta un programa hello world!

Restricciones de arranque e imagen de disco RF

  • El entorno capaz de arrancarlo es limitado
  • El proceso de instalación original consistía en arrancar desde s1 y luego restaurar los archivos desde s2
    • Como el emulador de aap no soporta TC11, instalar directamente desde las cintas s1/s2 es difícil
  • La configuración real se hizo creando indirectamente una imagen de disco RF
    • Se extrajeron los archivos de la cinta s1 y se colocaron en un disco RF vacío
    • Luego se instaló el kernel unix-jun72 y se arrancó desde RF en SIMH
    • Después se extrajeron los archivos restantes de s2
    • Al final, se reemplazó el kernel unix-jun72 por el kernel s1 usando un editor hexadecimal
  • La imagen RF generada solo contiene archivos provenientes de s1/s2
  • El programa init(7) no monta RK en /usr
    • Este comportamiento sugiere que /usr estaba almacenado en RF

1 comentarios

 
GN⁺ 2025-02-21
Opiniones de Hacker News
  • Me acordé de un chiste que escuché en una charla de Brian Kernighan. La historia era que Ken Thompson creó un editor de texto, un compilador de B y el esqueleto de gestión de archivos de entrada/salida en 3 semanas, y que eso terminó convirtiéndose en UNIX.
    La gracia del chiste es que hoy somos un poco menos eficientes que entonces.

    • Ken sin duda es un programador de primer nivel, y si alguien así puede concentrarse durante 3 semanas, puede hacer muchísimo.
      Recuerdo que su esposa se llevó a los niños a Inglaterra, así que Ken pudo hacer lo que quisiera. Por supuesto, ya tenía muchísima experiencia incluso antes de escribir el primer UNIX.
      Si eres un programador con un proyecto en la cabeza, vale la pena intentarlo. Irte 3 semanas a una cabaña o algo parecido, lejos del trabajo y la familia, llevar los libros y documentos necesarios y desconectarte de internet. Si se puede, usar un feature phone y ver hasta dónde llegas.
      Eso sí, tendría que ser un proyecto que ya hayas pensado bastante y para el que incluso tengas algo de código escrito. Pensándolo mejor, un proyecto de bajo nivel que dependa muy poco de bibliotecas externas encaja mejor con este experimento. Si tu proyecto depende de un montón de bibliotecas de terceros, es fácil quedar bloqueado sin internet cuando surge un problema; Ken también eligió el proyecto adecuado.
    • La entrevista está aquí: https://www.youtube.com/watch?v=EY6q5dv_B-o
      Dura una hora y Thompson cuenta muchas historias interesantes. Kernighan hace un gran trabajo dejándolo hablar.
    • Un chiste más moderno es que Ken Thompson diseñó Go junto con Rob Pike y Robert Griesemer mientras esperaba a que compilara C / C++.
    • Me pregunto cómo llegaron los primeros desarrolladores de UNIX a ese nivel de productividad.
      Quisiera saber si trabajaban como en una jornada de 9 a 5, o si dejaban de lado otras partes de su vida y entraban en modo goblin para terminarlo.
    • El primer 80% de las funciones de un proyecto puede avanzar realmente rápido. Sobre todo cuando hay interés y mucha motivación.
      Pero el 20% restante se alarga como una cola larga y, por lo general, termina siendo un esfuerzo enorme que te quita las ganas.
  • Fascinante, hasta Spock quedaría impresionado. Me gustaría aprender a compilar un emulador de PDP-11 en Mac.

    • Compilar el emulador es bastante fácil. Mira simh. Es muy portable, así que debería funcionar casi de inmediato.
      Después sería buena idea intentar instalar la distribución 2.11BSD. Está bien documentada y salió después de que pasara gran parte del caos de los primeros Unix. Luego también fue muy divertido jugar con RT-11; de hecho escribí algunas apps pequeñas.
    • https://opensimh.org/
      También funciona bien en Apple Silicon.
    • Se siente como el momento de encontrar reliquias religiosas con un detector de metales.
    • ¡Demasiado fácil! Voy a construir uno yo mismo con compuertas NAND.
  • Muy bueno.
    Es la primera vez que veo gente usando ed para trabajo real.
    También me da curiosidad quién más tuvo que lidiar con ed. Hace poco tuve que entrar a un sistema muy antiguo que no tenía vi, así que hice mi propio editor; si alguien necesita un editor para sistemas antiguos, puede contactarme. No es muy sofisticado.
    El trabajo de quienes crearon este software y de los investigadores es asombroso; mis respetos para los verdaderos ingenieros.

    • Recuerdo haber usado en los años 60, en un sistema de tiempo compartido de Honeywell mediante una Teletype ASR-33, un editor parecido a ed.
      No recuerdo los detalles, pero para crear un archivo nuevo se ejecutaba con make . Si escribías make love, imprimía not war antes de entrar al editor.
    • No era ed, pero claramente estaba influenciado por él: tengo edad suficiente para haber rendido un examen de escuela de mecanografía usando edlin de MS-DOS 3.3.
      Después nunca volví a usarlo, y años más tarde, cuando pude usar Xenix, tampoco usé ed. vi era una alternativa mucho más sensata.
    • En agosto escribí http://canonical.org/~kragen/sw/dev3/justhash.c usando ed en Termux en el celular.
      Alguien dijo que el teclado en pantalla de Android era tan horrible para vi que usaba ed en el teléfono, y como en realidad tenía razón, lo probé. En el celular, ed era un poco peor que vi, pero ambos son malos de formas distintas.
      Con HeliBoard, escribir comandos de ed en el teclado era mucho más fácil que con vi, pero varias veces me confundí por el estado del buffer, algo que con vi no me habría pasado. Quizá con práctica mejore, pero al final volví a vi.
    • A mediados de los 90 tenía una AT&T 3B2 que solo tenía ed, y la usaba con una terminal DEC VT-102.
      ed funciona, pero según estándares modernos no es divertido. Aun así, comparado con la salida de una teletipo, usarlo en pantalla debe haber sido enorme.
      Además, una 3B2 de alrededor de 1 MIP podía soportar unos 20 usuarios simultáneos.
    • Uno de mis primeros trabajos de consultoría fue escribir un tutorial de ed para sistemas Coherent.
      Uso ed con frecuencia; de hecho lo usé ayer, porque tenía que editar algo sin limpiar la pantalla.
      Antes de eso también hice un editor para imágenes de tarjetas almacenadas en disco, pero era muy primitivo.
  • A veces me gusta revisar la lista de correo de tuhs. Es genial ver nombres como Ken Thompson y Rob Pike, junto con muchos otros menos conocidos que participaron en los primeros tiempos de UNIX y de la computación.

  • Parece arqueología de software

    • Una de las varias razones por las que no me gusta la era del SaaS es que este tipo de cosas nunca volverá a pasar. En 2075 nadie va a arrancar un Notion o un Figma viejo por investigación o nostalgia.
      Como la cultura que se produce y consume en redes sociales, o muchas otras facetas de la cultura de internet, es completamente efímera y desechable. No tiene historia ni futuro.
      SaaS no solo es cerrado; de hecho, muchas veces está prácticamente atado, literalmente, a una única instalación. Se podría archivar y arrancar en otro lado, pero hacerlo años después sin el equipo original sería una tarea mucho mayor que arrancar Unix de 1972 en un emulador de PC moderno.
      Ese Unix tenía manuales y fue diseñado para instalarse y ejecutarse en varios entornos de distribución. SaaS se parece más a una mezcolanza que solo sus autores pueden desplegar, no necesariamente por intención, sino porque no hay fuerzas evolutivas que presionen para hacerlo de otra manera.
      A menudo también está entrelazado internamente con otros SaaS, así que quizá habría que archivar y restaurar el estado completo de la nube, como si fuera una sola computadora global donde se edita software propietario en vivo.
    • No es tan genial como suena.
  • ¿Alguien puede pasarme una referencia sobre qué significan esos permisos de archivo? Más o menos lo puedo inferir, pero no encontré nada sobre los permisos de Unix v2.
    La salida de ls se ve familiar, pero la parte sdrwrw me resulta extraña.

    • En el hilo de la lista de correo alguien enlazó una página del manual que extrajo:
      https://gitlab.com/segaloco/v1man/-/blob/master/man1/stat.1?...
      En sdrwrw, la primera columna es s o l, y significa small o large. La segunda columna es d, x, u o -, y significa directorio, ejecutable, setuid o ninguno. El resto son los bits de lectura/escritura del propietario y de los no propietarios.
  • ¿Hello world ocupa 1328 bytes? ¡Qué inflado!

    • Me recuerda a aquel compilador que, a modo de broma, metía un poema largo en todos los binarios. Habrás oído hablar de los números mágicos, pero aquello tenía un soneto mágico.
      Pensé que era un compilador temprano de Rust, pero no encuentro referencias. Quizá era Go.
      Edición: lo encontré. 'rust-lang/rust#13871: "hello world" contains Lovecraft quotes' https://github.com/rust-lang/rust/issues/13871
    • Mi https://github.com/pts/minilibc686 puede hacer hello world con printf en i386 en menos de 1 KiB. Hello world con write ocupa menos de 170 bytes.
    • ¡Hora de tunear mi Unix!
  • Genial. ¿Puedo entrar en ese portal temporal y vivir en una realidad alternativa?

    • ¿Te refieres a una época con gasolina con plomo, humo de cigarro aceptado en todas partes y asbesto en todo lo imaginable? Fue una década fascinante, pero es muy probable que la calidad de vida haya mejorado muchísimo desde entonces.
    • Sí se puede. Basta con comprar una terminal VT real. Por ejemplo, algo como https://www.ebay.com/itm/176698465415?_skw=vt+terminal&itmme...
      Consigue un adaptador para conectarla a tu computadora y ejecuta el *nix que quieras en simh. Como referencia, recomiendo https://jstn.tumblr.com/post/8692501831.
      Una vez que lo tengas funcionando, mete la máquina host detrás del escritorio o en algún lugar donde no se vea, y podrás vivir como en 1980.
  • Si recuperas una cinta RF, incluso con solo mirar archivos de texto simples se revela espacio de búfer que DOS o los archivos .iso no usan.
    Incluso en la distribución 2.11 BSD, el mosaico básico y el gestor de ventanas deben instalarse en el OS nativo. Por eso terminas usando KDE o algún gestor de ventanas X11.