Los sistemas operativos permiten al usuario interactuar con el hardware de su computadora, los cuales se elaboran con cientos de miles de líneas de código, por lo general con los lenguajes C, C++ y ensambladores.


Cosas que necesitarás
*
Una computadora
*
Un CPU para la arquitectura que vayas a desarrollar
*
Memoria (RAM) suficiente para una computadora virtual
*
Un sistema operativo anfitrión (para desarrollar el ensamblador, otros código fuente, para construirlo y empaquetarlo mientras estés en tus primeras etapas, con el tiempo tu propio sistema operativo podría ser tu anfitrión)
*
Editor de coloreado de sintaxis (si no tienes “Entorno de desarrollo integrado”)
*
Un compilador
*
Una unidad CD/DVD 
Recursos adicionales
*
Manual: Linux desde cero
*
Gestor de arranque: GRUB
*
Aplicaciones de la computadora virtual: Bochs, VM Ware, XM Virtual Box
*
Manuales del procesador: Manuales de Intel
*
Sitios de desarrollo de sistemas operativos: OSDev, OSDever
Consejos
1)Tendrás que tener conocimientos de programación antes de empezar
El lenguaje ensamblador es esencial; otro lenguaje adicional de bajo nivel como C será muy recomendable. (Requisito, no consejo)

2) Decide en qué medio deseas cargar el sistema operativo.
Podría ser una unidad de CD, DVD, de flash, un disco duro o en otra PC.

3) Decide qué quieres que haga tu sistema operativo.
Si se trata de un sistema operativo completamente capaz que tiene una interfaz gráfica de usuario (GUI,Graphical User Interface) o algo un poco más minimalista, tendrás que saber qué dirección vas a tomar antes de comenzar.
4) Especifica qué plataforma de procesador será compatible con tu sistema operativo.
Te recomiendo las dos más comunes para las computadoras personales: AI-32 y x86_64.


5) decide si prefieres hacerlo todo tú mismo desde cero o si hay un núcleo existente que te gustaría usar como base para construir.
Por ejemplo, programar Linux desde cero será un proyecto para aquellos que le gustaría crear su propia distribución de Linux.
6) Decide si vas a utilizar tu propio gestor de arranque o uno pre-creado como el cargador de arranque unificado global (GRUB, Grand Unified Bootloader).
Debido a que para programar el código de tu propio gestor de arranque necesitarás poseer un conocimiento amplio del hardware y del BIOS, podría retrasarte para programar el núcleo en sí.

7) Decide qué lenguaje de programación vas a utilizar.
Si bien es posible crear un sistema operativo con un lenguaje como Pascal o BASIC, será mejor si usas C o el ensamblador. El ensamblador es absolutamente necesario, ya que algunas partes vitales de un sistema operativo lo necesitan. Por su parte, C++ contiene palabras clave que necesitan otro sistema operativo totalmente integrado para poder funcionar.
Para poder compilar un sistema operativo con el código C o C++, por supuesto tendrás que utilizar cualquier compilador. Por lo tanto deberás leer la guía o los manuales o la documentación de usuario del compilador C o C++ que vayas a elegir, ya sea si se incluye con el software o esté disponible en la página web del distribuidor. Tendrás que saber muchas cosas complejas acerca del compilador y para desarrollar con C++ deberás tener conocimientos de decoración de nombre (
del compilador y de su ABI. Se supone que tendrás que conocer los diversos formatos ejecutables (ELF, PE, COFF, binarios sin formato, etc.) y entender que el formato patentado de Windows, PE (.exe), está protegido por los derechos de autor.


8) Decide cuál será la interfaz de programación de aplicaciones (API, Application Programming Interface).
Te recomiendo POSIX, ya que está bien documentada. Todos los sistemas Unix tienen al menos el soporte parcial para POSIX, por lo que sería trivial conectar programas Unix con tu sistema operativo.



De esta manera, se resolverán más problemas en menos tiempo, lo cual podría generar un mejor sistema operativo más rápidamente.


Recuerda, ¡al borrar el disco podrías borrar todos tus datos irreversiblemente! Utiliza el GRUB u otro gestor de arranque para que tu computadora tenga otro sistema operativo con el cual arrancar hasta que el tuyo funcione por completo.


Empieza con cosas pequeñas como mostrar texto e interrupciones antes de proseguir a desarrollar cosas como gestión de memoria y multitarea


Ello será una medida de protección en caso de que surja algún problema grave con la versión actual de tu sistema operativo o tu desarrollo. Si la PC se bloquea y no puede arrancar, será excelente tener una segunda copia con la que puedas trabajar para solucionar el problema.
14) Considera probar tu nuevo sistema operativo en una computadora virtual.
En lugar de reiniciar el equipo cada vez que realices cambios o tengas que transferir ciertos archivos desde el equipo de desarrollo al equipo de prueba, podrás utilizar la aplicación de una computadora virtual para ejecutar tu sistema operativo, mientras el tuyo se mantiene en funcionamiento. Algunas aplicaciones de computadora virtual son VMWare (que también tiene un producto de servidor gratuito), la alternativa de código abierto, Bochs, Microsoft Virtual PC (no compatible con Linux) y xVM VirtualBox.


Esto permitirá a los usuarios informarte sobre posibles problemas con el sistema operativo.
16)Un sistema operativo también podría ser fácil de usar, así que asegúrate de incluir características fáciles para el usuario, de modo que sean parte integral de tu diseño.