A continuación aprenderás a planificar y desarrollar un sistema operativo en caso de que no sepas codificar.
Los sistemas operativos administran el hardware de computadora y brindan los recursos que las aplicaciones necesitan para ejecutarse. Para escribir un sistema operativo desde cero, se necesita un dominio sólido de las ciencias de la computación, un lenguaje de programación como el C o el C++, el ensamblaje y las prácticas de manejo de códigos.
Parte 1 de 2:
Aprender los conceptos básicos
1. Toma unos cuantos cursos básicos de ciencias de la computación. A diferencia del desarrollo para la web, para crear un sistema operativo se necesita una comprensión sólida de los algoritmos, las estructuras de datos, el hardware de computadora y la gestión de recursos. Debido a que las personas obtienen títulos en esto, no debes esperar poder escribir todo un sistema operativo después de leer un tutorial en línea. El curso Introducción a las Ciencias de la Computación de Harvard está disponible en línea sin costo a través de EDX.
2. Aprende un lenguaje de programación de alto nivel (por ejemplo, el C). Después de tener una comprensión básica sólida de las ciencias de la computación, el siguiente paso es dominar el C o el C++. Al igual que el aprender sobre ciencias de la computación, dominar un lenguaje no es opcional, ya que no podrás codificar un sistema operativo si no puedes escribir aplicaciones buenas.
- En caso de que seas nuevo en el C, dale un vistazo al curso Programación en C: Empezar de Dartmouth, el cual es gratuito a través de EDX. Después de completar ese curso, puedes tomar el siguiente en la serie: Programación en C: Fundamentos del Lenguaje. Luego, pasa a los cursos subsiguientes (por ejemplo, Programación Modular y Gestión de Memoria y Punteros y Gestión de Memoria).
3. Aprende un lenguaje ensamblador. Los lenguajes ensambladores son lenguajes de bajo nivel que están diseñados para comunicarse con distintos procesadores. El ensamblaje difiere para distintos tipos de procesadores (por ejemplo, el lenguaje ensamblador x86 para Intel, AMD, VIA y otros procesadores), por lo que será necesario que aprendas la versión para el tipo de procesador para el cual vayas a codificar.
- Si lees este libro de código abierto en su totalidad, podrás obtener una comprensión lo suficientemente sólida como para construir un sistema operativo.
- El arte del lenguaje ensamblador es un libro muy recomendado sobre el ensamblaje que está disponible tanto en línea como fuera de ella.
- También debes investigar mucho acerca del tipo de procesador o procesadores en los cuales deba ejecutarse tu sistema operativo. Puedes encontrar con facilidad manuales para la arquitectura de procesadores con una búsqueda en Google («manuales de Intel», «manuales de ARM», etc.).
4. Completa un tutorial de sistemas operativos. Los tutoriales de sistemas operativos te guían a través del proceso de crear un sistema operativo básico. Esto te acostumbra al proceso y te ayuda a determinar si te falta alguna pieza. Después de completar uno o dos tutoriales, estarás bien encaminado para crear tu propio sistema operativo.
- Bare Bones es un tutorial que te ayuda a escribir tu primer núcleo simple de 32 bits. Después de completar el tutorial, el siguiente paso es usar Meaty Skeleton para estructurar tu propio sistema operativo.
- Linux desde cero es un libro en línea que te guía a través de la creación de tu propio sistema operativo Linux.
- Sistemas operativos de 0 a 1 es un libro gratuito sobre la creación de varios sistemas operativos de principio a fin.
5. Determina tus objetivos en cuanto al sistema operativo. ¿Qué quieres que haga el sistema operativo? ¿Cómo debería verse? ¿De verdad debes escribir todo un sistema operativo o tan solo quieres crear un aspecto determinado para tu escritorio? Debes tomar en cuenta todas estas cosas antes de empezar a codificar.
- Considera la posibilidad de desarrollarlo con un equipo de otros programadores. El que haya un equipo de desarrolladores que trabajen en el proyecto reducirá el tiempo de desarrollo de manera significativa.
- Añade tus objetivos, planes y preguntas para el proyecto a tu repositorio público de forma que sea fácil que los demás te ayuden.
Parte 2 de 2:
Desarrollar tu sistema operativo
1. Elige un entorno de desarrollo. Este constituye la plataforma que usarás para codificar tu sistema operativo nuevo. Si bien es cuestión de preferencias personales, la mayoría de las personas usan ya sea Windows o un tipo de UNIX. En caso de que vayas a usar Windows, es recomendable instalar un entorno de UNIX (por ejemplo, Cygwin o MinGW). En general, debes tener cuidado de que el entorno que uses incluya lo siguiente:
- GCC (el compilador de GNU). En caso de que vayas a usar Windows, puedes instalarlo en Cygwin o MinGW.
- Binutils es una colección de herramientas que se usan para manipular los archivos de objeto. Nuevamente, si vas a usar Windows, puedes instalarla en Cygwin.
- Un buen editor de texto. Vim y Emacs suelen usarse en los entornos de UNIX. Los usuarios de Windows pueden usar el Bloc de Notas o darle un vistazo al Notepad++ si quieren una actualización con varias pestañas.
- Perl o Python. Uno o ambos se recomiendan para la manipulación de cuerdas.
2. Dispón tu sistema de control de versiones. Escribir un sistema operativo quiere decir que es probable que vayas a crear cientos (¡o miles!) de líneas de código. Esto puede volverse confuso al trabajar en las revisiones. Algunas opciones a las que puedes darles un vistazo son CVS, Mercurial y Subversion.
3. Decídete por un gestor de arranque. En caso de que no quieras crear uno tú mismo, puedes usar uno que ya exista, como Grand Unified Bootloader (GRUB). Si te sientes lo suficientemente osado como para codificar un gestor de arranque, dale un vistazo a Rolling Your Own Bootloader en OSDev.org.
4. Elige un diseño de núcleo. El núcleo es el centro de tu sistema y brinda una interfaz entre el usuario y el hardware de computadora. Hay núcleos monolíticos y micronúcleos. Los núcleos monolíticos implementan todos los servicios en el núcleo, en tanto que los micronúcleos tienen un núcleo pequeño combinado con servicios de implementación de daemons de usuario. En general, los núcleos monolíticos son más rápidos, pero los micronúcleos tienen un mejor aislamiento de fallos y confiabilidad.
5. Empieza por algo pequeño. Empieza por cosas pequeñas, como mostrar texto e interrupciones, antes de pasar a cosas como la gestión de memoria y hacer varias tareas a la vez. Asimismo, puedes probar con hacer un sistema operativo simple de 16 bits en lugar de dar un salto grande.
- No tendrás un sistema completo en dos semanas. Empieza por un sistema operativo que arranque y luego pasa a las cosas geniales.
6. Prueba tu sistema operativo nuevo con una máquina virtual. En lugar de reiniciar tu computadora cada vez que hagas cambios o tener que transferir los archivos de tu computadora de desarrollo a la máquina de prueba, utiliza una aplicación de una máquina virtual. VMWare, así como también Bochs, es una opción común que funciona con Windows y Linux. Revisa los posibles puntos muertos y otros errores y repáralos según sea necesario.