He oído que podemos personalizar Linux (digamos Ubuntu) como lo deseamos cambiando su código fuente y podemos crear un sistema operativo completamente nuevo. He descargado el código fuente del kernel de Linux desde el sitio web www.kernel.org. Pero al verlo, no puedo entender nada, hay tantos directorios, archivos dentro de los archivos (ya que creo que habría un solo programa grande). Quiero hacer esto como un proyecto universitario y también quiero contribuir a Linux haciendo los cambios necesarios en él. Pero después de hacer esta pregunta en algunos sitios, dijeron que el código fuente de Linux es muy grande. Puedes probar minix. Ahora estoy muy confundido.
Déme sugerencias con detalles sobre cómo debería comenzar este viaje (de cambiar el código fuente para personalizar Linux) con los pasos necesarios, junto con algunos libros para principiantes.
Respuestas:
¡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:
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 :))
fuente
Verifique el proyecto Linux From Scratch . Como su nombre indica, contiene todos los detalles necesarios para construir su propia distribución de Linux
fuente
Creo que lo primero que debe definir es "cuáles son los cambios que desea traer al sistema operativo". Hasta que decida esto, realmente no llegará a ninguna parte. No hay un "camino único" de aprendizaje.
Además, creo que deberías definir mejor qué quieres decir con SO. Una gran parte (una parte importante) del código fuente de Ubuntu está fuera de Linux. Linux es solo el núcleo (a veces se lo conoce como sistema operativo , especialmente en los círculos académicos, de ahí la confusión), y por lo tanto tiene el trabajo "simple" de:
Cualquier otro cambio que ocurriría en un nivel diferente, si se trata de las utilidades de espacio de usuario básico (a menudo referido como utils ), la interfaz gráfica de usuario, las aplicaciones básicas de una distribución, etc.
Sin embargo, si todavía está decidido a aprender cómo hackear el kernel, tal vez debería comenzar con esta pregunta , la pregunta más votada en este sitio;)
fuente
Esto puede ser un poco fuera de lugar, pero si desea aprender sobre el kernel de Linux y comenzar a desarrollarlo, realmente debería buscar en los novatos del kernel . Es un sitio que le da una idea de la mecánica del kernel (como Alexios lo hizo de una manera excelente), pero también le permite elegir una pequeña tarea para manejar (ser un llamado conserje del kernel). Es una excelente manera de aprender, ¡y lo recomiendo encarecidamente!
fuente