En este wikiHow, 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
Parte 1 de 2:
Aprender los conceptos básicos

  1. 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.[1] 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. 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.
  3. 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.[2]
    • 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. 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. 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.[3]
    • 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
Parte 2 de 2:
Desarrollar tu sistema operativo

  1. 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. 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. 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. 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. 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. 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.
  7. 7
    Lanza una "versión candidata". Puedes hacerlo subiendo el código probado a tu repositorio público. De este modo, las personas podrán poner a prueba tu sistema operativo y reportar sobre los problemas que encuentren.
  8. 8
    Establece contactos con otros desarrolladores de sistemas operativos. Hay toda una comunidad de desarrolladores de sistemas operativos que se congrega en diversos foros, entre ellos /r/osdev en Reddit y el Software Engineering Stack Exchange. Después de dominar el desarrollo de un sistema operativo básico, lee las publicaciones existentes para determinar el tipo de cosas que surjan durante el proceso de desarrollo.

Consejos

  • Si quieres que tu sistema sea viable, ten cuidado de implementar elementos de seguridad como tu principal prioridad.
  • Después de terminar con todo el desarrollo, determina si quieres lanzar el código de manera abierta o registrada.
  • No te unas a los foros de OSDev.org y empieces a hacer preguntas evidentes. Esto tan solo dará como resultado respuestas de "Lee el manual". Debes tratar de leer Wikipedia y los manuales de las diversas herramientas que quieras usar.
  • No empieces el proyecto de un sistema operativo para empezar a aprender a programar. En caso de que de por sí no conozcas C, C++, Pascal o algún otro lenguaje apropiado al derecho y al revés, incluyendo la manipulación de punteros, la manipulación de bits de bajo nivel, el cambio de bits, el lenguaje ensamblador en línea, etc., no estarás listo para el desarrollo de sistemas operativos.
  • Un sistema operativo también puede ser fácil de usar. Ten cuidado de añadir elementos fáciles de usar, haciendo que formen una parte fundamental de tu diseño.
  • Si quieres que un sistema operativo pueda manejar varios procesadores, tu gestor de memoria debe tener implementados mecanismos de "cierre" para evitar que muchos procesadores accedan a un recurso al mismo tiempo. Los "candados" que se usen para esto requerirán de la presencia de un planificador para asegurar que únicamente un procesador acceda a un recurso crítico en cualquier momento y que se haga esperar a todos los demás. Sin embargo, el planificador depende de la presencia de un gestor de memoria. Este es un caso de una dependencia de punto muerto. No existe una manera estándar de resolver los problemas de este tipo. En tu calidad de programador, se espera que tengas la habilidad suficiente como para lidiar con ello a tu manera.
  • En caso de que hagas algo desacertado, como escribir bytes aleatorios a puertos aleatorios de entrada y salida, el sistema operativo dejará de funcionar y (en teoría) puedes quemar el hardware.

Acerca de este wikiHow

Nicole Levine, MFA
Coescrito por:
Especialista en tecnología
Este artículo fue coescrito por Nicole Levine, MFA. Nicole Levine es una escritora y editora de tecnología en wikiHow. Tiene más de 20 años de experiencia creando documentación técnica y liderando equipos de soporte en las principales empresas de alojamiento web y software. Asimismo, Nicole tiene una maestría en Escritura Creativa de la Universidad Estatal de Portland, y da clases de composición, escritura de ficción y creación de revistas en varias instituciones. Este artículo ha sido visto 248 548 veces.
Categorías: Sistemas operativos