¡Bienvenido a unix.stackexchange.com!
No hay una respuesta fácil a su pregunta, y personas mucho mejores que yo han escrito libros completos sobre el tema del kernel de Linux y los sistemas operativos en general.
Sobre el alcance del proyecto: ¡escribir un sistema operativo no es una tarea simple! ¡Incluso un sistema operativo deliberadamente mínimo como Minix es algo bastante complejo! Para darle una idea sobre Linux, piense en los programas C que ha escrito hasta ahora. El promedio de cursos universitarios tiende a ser de unos pocos miles de líneas de C como máximo. Creo que mi proyecto de año final fue de alrededor de 30–35,000 líneas de C ++. El kernel de Linux tiene aproximadamente 13,000,000 líneas de código C.
¿Por qué está todo en archivos separados? Los proyectos importantes se almacenan en archivos separados por razones logísticas y prácticas. ¡Solo considere cargar un archivo de 13,000,000 líneas en un editor! Antes de abordar un gran proyecto como Linux, definitivamente debes perfeccionar tus habilidades en C hasta el punto en que la pregunta 'por qué varios archivos' se responda a sí misma. También debe poder leer el código C , no solo escribirlo. (más difícil de lo que parece al principio)
Definitivamente deberías ser muy competente en C. El núcleo lo mantienen miles de personas, y se te llamará a comprender los modismos de C personales de cada uno de ellos (concedido, dentro de los estándares de codificación del núcleo bastante rígidos, pero aún así, todos tienen su propio estilo de resolución de problemas).
Después de obtener su C fu, asegúrese de comprender los sistemas operativos. Esto te ayudará a entender el código. No todo Linux es esencial. ¡El núcleo propiamente dicho es bastante pequeño! Que hincha es:
- Miles de controladores de hardware para varios dispositivos.
- Capas de abstracción para varias clases de dispositivos para simplificar las API y la escritura de controladores. Por ejemplo, tenemos el VFS para sistemas de archivos, la capa de eventos para dispositivos de entrada, etc.
- Sorprendentes cantidades de código compilado condicionalmente y archivos que atienden a las diversas arquitecturas que ejecutan Linux (no todas las máquinas Linux son PC con Intel, y algunas son increíblemente diferentes de lo que cabría esperar). El núcleo tiene que lidiar con estas diferencias, y eso significa más código.
Un problema que encontrará de inmediato es que estos componentes no son tan fáciles de desconectar, cambiar y volver a conectar. Existen numerosas interrelaciones. En resumen, cambiar los bits del núcleo es complicado.
La razón por la que la gente te sugirió Minix es simple: es un sistema operativo completo, pero no está agobiado por las necesidades de un sistema tan complejo como Linux. El código es pequeño, pero aún ofrece una funcionalidad completa. Después de todo, las primeras versiones de Linux fueron inspiradas por Minix.
Claro, Minix tiene menos soporte de hardware en estos días. ¿Y qué? Eso es una bendición! Las computadoras modernas virtualizan muy bien. Use eso para su ventaja: una VM para ejecutar Minix es tan ligera que hará que el desarrollo sea un reto.
Si su proyecto es construir un sistema operativo, podría hacer algo peor que comenzar estudiando Minix. También es posible que desee comprar y leer el libro que Minix fue escrito para acompañar, ' Sistemas operativos modernos de Andrew Tanenbaum '.
También debe establecer sus objetivos y definir sus términos con precisión . Si su propia definición de un SO es la de Microsoft (un SO con una GUI y un paquete de software completo), ¡es posible que tenga un proyecto muy largo! Cientos de miles de personas han trabajado desde la década de 1960 para llevarnos a donde estamos ahora, después de todo.
Finalmente, recuerde el grito de batalla del informático: '¡ nunca reinvente la rueda! '(por supuesto, nos gusta hacer excepciones al aprender. Y por diversión :))