¿Cómo empezar a cambiar el código fuente de Linux para crear un sistema operativo personalizado?

¿Cómo empezar a cambiar el código fuente de Linux para crear un sistema operativo personalizado?

He oído que podemos personalizar Linux (digamos Ubuntu) como queramos cambiando su código fuente y podemos crear un sistema operativo completamente nuevo. He descargado el código fuente del kernel de Linux del sitio web www.kernel.org. Pero al verlo no logro entender nada, hay tantos directorios, archivos dentro de archivos (como creo que sería un solo programa grande). Quiero hacer esto como un proyecto universitario y también quiero contribuir a Linux realizando los cambios necesarios. 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.

Por favor, denme sugerencias detalladas 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 de nivel principiante.

Respuesta1

¡Bienvenido a unix.stackexchange.com!

No hay una respuesta fácil a su pregunta ylejosMejores personas que yo han escrito libros enteros 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 sencilla! ¡Incluso un sistema operativo deliberadamente mínimo como Minix es algo bastante complejo! Para darle una idea sobre Linux, piense en los programas en C que ha escrito hasta ahora. El trabajo de curso universitario promedio tiende a ser de unos pocos miles de líneas de C como máximo. Creo que mi proyecto de último año tuvo entre 30 y 35 000 líneas de C++. El kernel de Linux tiene aproximadamente 13.000.000 de líneas de código C.

¿Por qué está todo en archivos separados? Los proyectos de gran tamaño se almacenan en archivos separados por razones logísticas y prácticas. ¡Solo considere cargar un archivo de 13.000.000 de líneas en un editor! Antes de abordar un proyecto enorme como Linux, definitivamente deberías perfeccionar tus habilidades en C hasta el punto en que la pregunta "por qué varios archivos" se responda por sí sola. También deberías poderleer 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 kernel es mantenido por miles de personas, y se te pedirá que comprendas los modismos personales de C de cada uno de ellos (es cierto, dentro de los estándares de codificación del kernel 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 le ayudará a comprender el código. No todo Linux es esencial. ¡El núcleo propiamente dicho es bastante pequeño! Qué 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.
  • Cantidades impactantes de código y archivos compilados condicionalmente que se adaptan a las diversas arquitecturas que ejecutan Linux (no todas las máquinas Linux son una PC Intel, y algunas lo son).increíblementediferente 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á inmediatamente es que estos componentes no son tan fáciles de desconectar, cambiar y volver a conectar. Existen numerosas interrelaciones. En resumen, cambiar partes del núcleo es complicado.

La razón por la que la gente le 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 proporciona funcionalidad completa. Después de todo, las primeras versiones de Linux se inspiraron en Minix.

Claro, Minix tiene menos soporte de hardware en estos días. ¿Así que lo que? ¡Eso es una bendición! Los ordenadores modernos se virtualizan muy bien. Úselo a su favor: una máquina virtual para ejecutar Minix es tan liviana que hará que el desarrollo sea una demora.

Si su proyecto es construir un sistema operativo, lo peor que podría hacer es comenzar estudiando Minix. Quizás también quieras comprar y leer el libro que Minix fue escrito para acompañarlo.Los sistemas operativos modernos de Andrew Tanenbaum'.

También debes establecer tus objetivos y definir tus términos.precisamente. Si su propia definición de sistema operativo es la de Microsoft (un sistema operativo con una GUI y un paquete de software completo), ¡es posible que se encuentre ante un proyecto muy largo! Después de todo, cientos de miles de personas han trabajado desde la década de 1960 para llevarnos a donde estamos ahora.

Finalmente, recuerde el grito de guerra del informático: '¡Nunca reinventes la rueda!' (nos gusta hacer excepciones cuando aprendemos, por supuesto. Y por diversión :) )

Respuesta2

ControlarLinux desde ceroproyecto. Como sugiere el nombre, contiene todos los detalles necesarios para crear su propia distribución de Linux.

Respuesta3

Creo que lo primero que debes definir es "cuáles son los cambios que deseas realizar en el sistema operativo". Hasta que no decidas esto, no llegarás a ninguna parte. No existe un "único camino" de aprendizaje.

Además, creo que deberías definir mejor lo que quieres decir con sistema operativo. Una gran parte (la mayor parte) del código fuente de Ubuntu está fuera de Linux. Linux es sóloel núcleo, (a veces se le conoce comoSistema operativo, especialmente en los círculos académicos, de ahí la confusión), y por lo tanto tiene la"simple"trabajo de:

  • gestión de recursos.
  • comunicándose con el hardware.

Cualquier otro cambio ocurriría en un nivel diferente, ya sean las utilidades principales del área de usuario (a menudo denominadasutiles), la GUI, las apps básicas de una distro, etc.

Sin embargo, si todavía estás decidido a aprender cómo hackear el kernel, tal vez deberías comenzar conesta pregunta, la pregunta más votada en este sitio ;)

Respuesta4

Esto puede no venir al caso, pero si desea aprender sobre el kernel de Linux y comenzar a desarrollarlo, debería investigarlo.novatos del kernel. Es un sitio que le brinda información sobre la mecánica del kernel (como lo hizo Alexios de manera excelente), pero también le permite elegir una pequeña tarea para realizar (ser el llamado conserje del kernel). ¡Es una excelente manera de aprender y la recomiendo mucho!

información relacionada