16 puntos por GN⁺ 2023-08-13 | 2 comentarios | Compartir por WhatsApp
  • El kernel de Linux es hoy un enorme proyecto open source de 36 millones de líneas, pero la primera versión tenía 10,239 líneas (8,670 si se excluyen comentarios y líneas en blanco)
  • Linux v0.01, por su simplicidad, es un excelente punto de partida para aprender el interior de un kernel de SO de estilo Unix
  • v0.01 solo tenía 66 llamadas al sistema
    • creación, eliminación y escritura de archivos/directorios
    • chmod, chown, pipe, fork, execve
    • como todavía no se había introducido el concepto de socket, no había soporte de red
    • mount aún no estaba implementado
  • Estaba hardcodeado para la arquitectura Intel 386 (el autor de MINIX criticó esto)
    • strcpy estaba escrito en ensamblador usando instrucciones de i386
  • Solo soportaba dispositivos PC/AT
    • CMOS, PIT (Programmable Interval Timer), ATA (PIO), VGA (modo texto), teclado PS/2 Intel 8042 (ensamblador)
    • todavía no existía la carpeta drivers, y todo estaba hardcodeado dentro de los subsistemas
  • En el Makefile hay un comentario con el nombre original que Linus quería ponerle: "FREAX" Kernel
  • El sistema de archivos solo soportaba MINIX (ext se inspiró en MINIX)
  • En el código del scheduler hay un comentario que dice: "¡Esta parte es un código bastante bueno que funciona en todos los entornos, así que no habrá razón para cambiarlo!"
    • por supuesto, hoy eso cambió con la introducción de muchas mejoras y algoritmos, así que esa predicción resultó falsa
  • La implementación de kernel panic ocupa solo 5 líneas: imprime "kernel panic: causa" y detiene el sistema con for(;;)
  • Hay una parte que parece llamar a fork(2) desde el espacio del kernel
    • aunque así lo parece, en realidad move_to_user_mode() hace el truco justo antes
  • Linus no tenía máquinas con más de 8 MB de RAM (como él no tenía una, no pudo probarlo; dijo que quien sí la tuviera, lo intentara por su cuenta...)
  • Es difícil compilarlo con toolchains modernas
    • GCC mantiene cierta compatibilidad hacia atrás, pero no es suficiente
    • Linus tenía su propia GCC con una opción llamada -mstring-insns (probablemente una opción para soportar instrucciones de cadenas de x86)

2 comentarios

 
arfwene 2023-10-31

Interesante.

 
GN⁺ 2023-08-13
Comentarios en Hacker News
  • Se debate la complejidad del Linux moderno, y se cuestiona si realmente es necesaria una complejidad 4500 veces mayor que la cantidad de líneas de código de Linux v0.01.
  • Los lectores quisieran ver un análisis gráfico de la cantidad de líneas de código y las funciones usadas en cada módulo principal de software de Linux.
  • Se sugiere leer bases de código clásicas como Linux, SQLite y vim, ya que en su mayoría fueron escritas por una sola persona y tuvieron mucho éxito o una gran influencia.
  • Se explica cómo funciona el "counter" en Linux, afirmando que disminuye exponencialmente hasta 2 * prioridad cuando una tarea no puede ejecutarse.
  • Se comenta que Redhat envió a los accionistas, durante su IPO, un póster con el código fuente 0.01, y a los lectores les parece interesante leerlo de vez en cuando.
  • Se discute la compatibilidad hacia atrás de GCC (GNU Compiler Collection), con un comentario que dice que durante mucho tiempo GCC no pudo compilar sus propias versiones anteriores.
  • Se orienta a los lectores hacia el Linux Kernel Source Code con abundantes anotaciones para una comprensión y lectura más profundas.
  • Se sugiere que leer la primera versión funcional de proyectos muy exitosos como Linux es una buena manera de entenderlos, ya que normalmente solo incluyen las funciones centrales más importantes sin muchas abstracciones/generalizaciones.
  • Algunos lectores notaron que en el código se usaban espacios en lugar de tabulaciones, y especulan que Torvalds pudo haberse vuelto partidario de las tabulaciones después.
  • Se reconoce la profundidad y frecuencia de los comentarios en el código, lo que lo hace accesible para los lectores, y existe curiosidad sobre si alguien logró compilarlo.