Un vistazo al interior de Linux v0.01
(seiya.me)- 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
mountaún no estaba implementado
- Estaba hardcodeado para la arquitectura Intel 386 (el autor de MINIX criticó esto)
strcpyestaba 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 (
extse 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
- aunque así lo parece, en realidad
- 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