Haces dos preguntas en una.
Me imagino que en el hardware estarás pensando en una placa para 2 procesadores i7, memoria, un disco duro, y algo que haga de interfaz (pantalla, teclado, ratón, thundebolt, rj45s...)
Un sistema operativo en principio es fácil de hacer. Con la cantidad de ejemplos que hay en internet, a base de copiar y pegar se hace en una tarde. Va complicándose dependiendo de qué se tiene que ejecutar en él. Tú quieres ejecutar plugins, y aquí vamos a la segunda parte.
Hay tres formas de hacer lo que quieres.
La primera, y en la que primero se piensa cuando se quiere usar un código, es desensamblarlo y pegarlo en tu programa. El primer problema con el que nos encontraremos entonces es que los compiladores ocultan el código que generan. En el caso de Windows, que casi todos los plugins están hechos con el visual studio (si no todos), no es mucho problema, dado que el visual studio es de los compiladores que menos protección mete. Mucho más preocupante es la que mete el propio desarrollador del código, dado que no les gusta que se vea cómo hacen lo que hacen. Esta protección puede ir de algo fácil de saltarse a algo a lo que nadie haya conseguido de momento meter mano, como puede ser el motor del antivirus Kaspersky. Los sistemas de protección que se usan son los mismos que usan los virus para ocultarse, o mejor aún, los rootkits. Una vez conseguido el código que quieres, puede ser que haga llamadas a funciones del sistema operativo en el que iba a ejecutarse. Puede usar un timer, querer saber el consumo de cpu, o usar multitarea, con semáforos, mutexes, secciones críticas y demás parafernalia, así que tendrías que parchear todo eso para usarlo en tu sistema operativo, o implementarlo, lo que haría más complicado desarrollar ese sistema operativo. Además hay que tener en cuenta que, en caso de conseguir sacar el código de un plugin, es ilegal usarlo.
La segunda manera tiene que ver con lo que es un plugin. Voy a centrarme en el Windows, aunque en otros sistemas operativos es básicamente lo mismo.
Un plugin es una dll, osea, una librería de enlace dinámico. Toda dll puede transformarse en una librería de enlace estático, o sea, una lib. Una vez que tienes una lib puedes importar sus funciones al código tuyo y usarlo a tu antojo. Eso sí, las que puedes importar son las funciones exportadas de la dll, no todas. Puedes manipular la dll y hacer las que quieras exportadas, aunque también eso es ilegal.
Y la tercera es la mejor, sobre todo en Windows, no tanto en otros sistemas operativos. Y es que otra de las razones por las que Windows es menos estable es por la facilidad que da para que un proceso en ejecución interfiera en otro. Vamos, que lo único que no vas a poder hacer va a ser lo que no sepas hacer. Una vez vencida la limitación de saber cómo hacer algo la que podrás encontrarte será, de nuevo, las que el desarrollador del software haya querido o podido poner, dado que a veces tampoco les gusta que se pueda manipular su programa de cualquier manera. Los sistemas para controlar un proceso son también los que usa un virus o un rootkit.
Ninguna de ellas es sencilla de implementar, salvo la segunda. No se exactamente qué quieres hacer, así que, elige.
1