Supongo que hay muchas maneras de responder a eso.
De la otra respuesta «Entrada, Estructura, Acción y Resultados». Eso es correcto para un software individual, como una [app]plicación.
Puede que no te diga demasiado. Tal vez usted está después de las bibliotecas individuales, para una aplicación.
Pero esto también se aplica a una visión global de la computadora. Entonces usted tiene aproximadamente:
- Sistema Operativo (SO)
- Aplicaciones
En el pasado usted tendría un control completo sobre la entrada y salida al hardware, entonces no «necesita» un sistema operativo (todavía se aplica a los microcontroladores), en ese el SO era inmaduro para los estándares modernos.
Ahora, usted siempre pasa por el sistema operativo, para la entrada y salida, por dos razones. Te gusta ser independiente del hardware (y los «drivers» proporcionan eso, pueden estrictamente no ser parte del SO, pero a menudo, al menos los fundamentales están incluidos). La segunda razón es la multitarea. O incluso la conmutación de tareas, que se hace más comúnmente en, digamos, Android (mientras que la multiventana también está disponible, y las notificaciones también en un sentido). El sistema operativo tiene que controlar quién tiene acceso a la pantalla (o qué parte en qué momentos).
La interfaz de usuario, que es parte del sistema operativo en Windows y Mac OS, no tiene que ser estrictamente. En Unix/Linux, es un componente, llamado X Windows (o Wayland o Mir). Por esa razón, él y otras cosas (como OpenSSL para la criptografía), son estrictamente «software del sistema». No hay un límite claro de lo que debe ser parte del software del sistema o del sistema operativo (véase, por ejemplo, United States v. Microsoft Corp. sobre si un navegador web debe ser parte de él, entonces los navegadores eran para mostrar páginas, ahora son una parte de la interfaz de usuario principal (una de las tres opciones) de todos los principales sistemas operativos).
Las utilidades también son partes del software del sistema, no son «aplicaciones» regulares, dependiendo de cómo se entienda esa palabra, sino para configurar partes del sistema operativo.
Todos estos componentes de software individuales pueden estar en una sola pieza, pero por lo general no lo están, con un ejecutable principal («.exe»), que incluye bibliotecas enlazadas dinámicamente (.dll o .so), que pueden ser distribuidas con la aplicación o ser parte del software del sistema (como la biblioteca C, una especie de alternativa y más pequeña a JVM y CLR a continuación).
JVM y CLR (parte de .NET) son una especie de bibliotecas o software del sistema.. y con las partes asociadas te dan una interfaz de usuario o una plataforma que es en cierto modo similar a los navegadores web ahora, un sistema operativo dentro de un sistema operativo..