- 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
Interesante.
Comentarios en Hacker News