Informática Aplicada a las Ciencias Sociales
Grado en Ciencia Política y Gestión Pública. Universidad de Murcia
um.es/docencia/barzana > IACCSS > Fundamentos-software

Fundamentos de software

Introducción

Software es la parte lógica de un ordenador, se puede considerar como intangible y permite el manejo de los recursos hardware y la realización de las tareas indicadas, también es conocido como “programas de ordenador”. El software posibilita que las personas puedan interaccionar con los ordenadores, como se explica en otro capítulo de esta documentación, el hardware de un ordenador digital trabaja con la electrónica binaria, es decir con ceros y unos, mientras que los humanos empleamos un lenguaje más complejo.

En las memorias de Paul Niquette, considerado como el creador del término "software" en 1953, que popularizó John Tukey en 1958, se puede leer: " Cuando dije por primera vez software en voz alta, la gente de mi alrededor dijo, '¿Eh?'. Desde el principio me pareció la palabra demasiado informal para escribirla y demasiado embarazosa para decirla. Sin embargo, de vez en cuando iba soltando la palabra ‘software’ en discursos, conferencias y entrevistas con los medios a lo largo de los años cincuenta. Nadie, en 1953, habría adivinado que una palabra tan tonta entraría a formar parte en el vocabulario general de la industria en todo el mundo.

Lo que denominamos software no surgió con el primer ordenador electrónico, sino que ha evolucionado a lo largo del desarrollo de la electrónica; los primeros ordenadores se programaban modificando el cableado de los circuitos electrónicos. En 1945, el matemático John Von Neumann (1903-1957), que trabajó con los creadores del ordenador ENIAC, J. Presper Eckert (1919-1995) y John Mauchly (1907-1980), elaboró un informe en el que sugería que las instrucciones de un programa podrían almacenarse en la memoria junto con los datos. Desde entonces los ordenadores se diseñan bajo el concepto de programa almacenado, que dio lugar a la industria del software. Hasta el momento se han definido unos 2500 lenguajes de programación, siendo muy pocos los que han logrado una amplia difusión. Los más recientes son Go y Dart, diseñados por la famosa empresa del buscador Google y Swift creado por Apple.

Los programas consisten en un conjunto de instrucciones, diseñadas para resolver problemas, que le indican al ordenador los pasos a seguir. Estos programas, habitualmente se llevan a un dispositivo de almacenamiento y en el momento que se han de ejecutar se vuelcan a la memoria RAM del ordenador. Por ejemplo, si tenemos un ordenador tipo PC y queremos imprimir un documento, se efectuará el siguiente proceso: una vez arrancado el ordenador, el sistema operativo (por ejemplo Linux) se carga en la memoria RAM desde el disco duro, seguidamente se carga en memoria el programa editor de textos (por ejemplo Writer) para a continuación escribir el texto que se desee o recuperarlo de un soporte de almacenamiento si se había guardado previamente. Por último el sistema operativo gestiona que el documento se envíe a la impresora.

El software se clasifica en dos grupos:
  • Software del sistema y programación, son los programas que permiten la administración de los recursos del ordenador, interactúan entre el usuario y los componentes hardware. En este tipo se incluyen los sistemas operativos y los lenguajes de programación.
  • Diversos sistemas operativos Linux
  • Software de aplicación (aplicaciones), son los programas dedicados a tareas específicas como edición de textos, procesado de imágenes, cálculos, etc. Este tipo de software permite a los usuarios llevar a cabo tareas concretas, en actividades susceptibles de ser automatizadas o asistidas, también se puede decir que software de aplicación son los programas que ayudan en la elaboración de una tarea dada, al estar diseñados para facilitar al usuario la realización de un determinado tipo de trabajo.
  • Diversas aplicaciones informáticas, logos

Lenguajes de programación

Un lenguaje de programación es un lenguaje formal
   En matemáticas, lógica, e informática, un lenguaje formal es aquel cuyos símbolos primitivos y reglas para unir esos símbolos están formalmente especificados. Al conjunto de los símbolos primitivos se le llama el alfabeto (o vocabulario) del lenguaje, y al conjunto de las reglas se lo llama la gramática formal (o sintaxis). A una cadena de símbolos formada de acuerdo a la gramática se la llama una fórmula bien formada (o palabra) del lenguaje. Estrictamente hablando, un lenguaje formal es idéntico al conjunto de todas sus fórmulas bien formadas. A diferencia de lo que ocurre con el alfabeto (que debe ser un conjunto finito) y con cada fórmula bien formada (que debe tener una longitud también finita), un lenguaje formal puede estar compuesto por un número infinito de fórmulas bien formadas.
     diseñado para expresar procesos que pueden ser llevados a cabo por máquinas tales como ordenadores. Está formado por un conjunto de símbolos y reglas sintácticas y semánticas que definen su estructura y el significado de sus elementos y expresiones. Al proceso por el cual se escribe, prueba, depura, compila (si es necesario) y se mantiene el código fuente de un programa se le llama programación.

Por algoritmo se entiende el “conjunto de operaciones y procedimientos que deben seguirse para resolver un problema en un número finito de pasos”. La palabra deriva del nombre del matemático árabe Mohamed Ibn Moussa Al Kow Rizmi, quien escribió entre los años 800 y 825 Quitab Al Jabr Al Mugabala, donde se recogía el sistema de numeración hindú y el concepto del cero. Fue Fibonacci
   Leonardo de Pisa, Leonardo Pisano o Leonardo Bigollo (1170-1250), también llamado Fibonacci, matemático italiano, famoso por haber difundido en Europa el sistema de numeración indo-arábigo actualmente utilizado, el que emplea notación posicional (de base 10, o decimal) y un dígito de valor nulo: el cero; y por idear la sucesión de Fibonacci.
El apodo de Guglielmo (Guillermo), padre de Leonardo, era Bonacci (simple o bien intencionado). Leonardo recibió póstumamente el apodo de Fibonacci (por filius Bonacci, hijo de Bonacci). Guglielmo dirigía un puesto de comercio en Bugía (según algunas versiones era cónsul de Pisa), en el norte de África (hoy Bejaia, Argelia), y de niño Leonardo viajó allí para ayudarlo. Allí aprendió el sistema de numeración árabe.
   , el que tradujo su obra al latín y la inició con las palabras, Algoritmi dicit. El siguiente esquema indica el algoritmo para indicar que un número es mayor que otro.

Determinar si un número es mayor
La diferencia entre el lenguaje algorítmico y el informático, es que el algorítmico es aquel por medio del cual se realiza un análisis previo del problema a resolver y encontrar un método que permita resolverlo. El conjunto de todas las operaciones a realizar, y el orden en el que deben efectuarse, se denomina algoritmo. El lenguaje informático es aquel por medio del cual dicho algoritmo se codifica a un sistema comprensible por el ordenador.
Esquema sobre programación
Una clasificación habitual de los lenguajes es considerar dos grupos según la forma de ejecución en un ordenador, intérpretes y compiladores;

Un lenguaje se dice que es interpretado, por ejemplo el BASIC original
   Siglas de Beginner's All-purpose Symbolic Instruction Code (Código simbólico de instrucciones de propósito general para principiantes). El Dartmouth BASIC, fue diseñado en 1964 por John George Kemeny y Thomas Eugene Kurtz en el Dartmouth College en New Hampshire, Estados Unidos, como un medio para facilitar programar ordenadores a estudiantes (y profesores) que no fueran de ciencias.
   , cuando para ejecutar un programa el lenguaje ha de leer y traducir al lenguaje nativo de la máquina las instrucciones una por una. Como es lógico el proceso se ralentiza, por ejemplo si una operación está dentro de la estructura conocida como ciclo y este se repite 100 veces, el lenguaje tiene que traducir el programa fuente 100 veces al código de la máquina. No todo son desventajas, pues la parte buena de este tipo de lenguajes es que los errores se pueden corregir al momento y seguir fácilmente la ejecución del programa, por lo cual son idóneos, aunque el BASIC no es recomendable, para aprender a programar, proceso en el que da lo mismo la lentitud. Otro ejemplo habitual de lenguaje interpretado es el código HTML
    Siglas de HyperText Markup Language (lenguaje de marcas de hipertexto), que hace referencia al lenguaje de marcado para la elaboración de páginas web. Es un estándar que define una estructura básica y un código para la definición de contenido de una página web, como texto, imágenes, etc. Es un estándar a cargo de la W3C, organización dedicada a la estandarización de casi todas las tecnologías ligadas a la web, sobre todo en lo referente a su escritura e interpretación. Es el lenguaje con el que se definen las páginas web.
    con el que se escriben la mayoría de las páginas web, que no es propiamente un lenguaje de programación, sino un conjunto de instrucciones que permiten diseñar el contenido de los documentos. El siguiente esquema muestra como funciona un intérprete:

Esquema sobre intérpretes
Ventajas de los intérpretes
  • La principal ventaja es que permiten una fácil depuración. Muestran una mayor interactividad con el código en tiempo de desarrollo.
  • En algunos lenguajes (Smalltalk
       Smalltalk es un lenguaje de programación, orientado a objetos, puede ser considerado como un entorno de objetos, donde incluso el propio sistema es un objeto. Metafóricamente, se puede considerar que un Smalltalk es un mundo virtual donde viven objetos que se comunican entre sí, mediante el envío de mensajes.
       , Prolog, LISP) está permitido y es frecuente añadir código según se ejecuta otro código, y esta característica solamente es posible implementarla en un intérprete.
  • Puede ser interrumpido con facilidad.
  • Puede ser rápidamente modificado y ejecutado nuevamente.
  • Un Intérprete necesita menos memoria que un compilador.
  • Facilita la búsqueda de errores.
Desventajas de los intérpretes
  • Lentitud de procesamiento, ya que al ejecutar a la vez que se traduce no puede aplicarse un alto grado de optimización. Cada instrucción debe ser traducida a código máquina tantas veces como sea ejecutada.
  • Durante la ejecución, el intérprete debe residir en memoria ya que no genera código objeto.

Por contra un lenguaje se dice que es compilado, cuando el programa entero se traduce mediante el compilador de dicho lenguaje al código máquina correspondiente y el resultado se almacena en un archivo. De esta forma el programa se ejecutará de forma mucho más rápida que con un intérprete, sobre todo si hay estructuras que se repiten, caso de los ciclos. La principal desventaja es cuando se produce un error, que muchas veces se detecta en el momento de la ejecución, y la corrección no se puede hacer de inmediato, sino que hay que realizar todo el proceso de compilado desde el principio. Un ejemplo típico de lenguaje de este tipo el C ++
   C++ es un lenguaje de programación diseñado a mediados de los años 1980 por Bjarne Stroustrup. La intención de su creación fue el extender al exitoso lenguaje de programación C con mecanismos que permitan la manipulación de objetos. En ese sentido, desde el punto de vista de los lenguajes orientados a objetos, el C++ es un lenguaje híbrido.
   , ampliamente usado en el desarrollo de programas. El siguiente esquema muestra como trabaja un compilador:

Esquema compiladores
Tipos de compiladores:
  • Una sola pasada: examina el código fuente una vez, generando el código o programa objeto.
  • Pasadas múltiples: requieren pasos intermedios para producir un código en otro lenguaje, y una pasada final para producir y optimizar el código producido durante los pasos anteriores.
  • Optimización: lee un código fuente, lo analiza y descubre errores potenciales sin ejecutar el programa.
  • Compiladores incrementales: generan un código objeto instrucción por instrucción (en vez de hacerlo para todo el programa) cuando el usuario teclea cada orden individual. El otro tipo de compiladores requiere que todos los enunciados o instrucciones se compilen conjuntamente.
  • Ensamblador: el lenguaje fuente es lenguaje ensamblador y posee una estructura sencilla.
  • Compilador cruzado: se genera código en lenguaje objeto para una máquina diferente de la que se está utilizando para compilar. Es perfectamente normal construir un compilador de Pascal que genere código para MS-DOS y que el compilador funcione en Linux y se haya escrito en C++.
  • Compilador con montador: compilador que compila distintos módulos de forma independiente y después es capaz de enlazarlos.
  • Autocompilador: compilador que está escrito en el mismo lenguaje que va a compilar. Evidentemente, no se puede ejecutar la primera vez. Sirve para hacer ampliaciones al lenguaje, mejorar el código generado, etc.
  • Metacompilador: es sinónimo de compilador de compiladores y se refiere a un programa que recibe como entrada las especificaciones del lenguaje para el que se desea obtener un compilador y genera como salida el compilador para ese lenguaje. El desarrollo de los metacompiladores se encuentra con la dificultad de unir la generación de código con la parte de análisis.
  • Descompilador: es un programa que acepta como entrada código máquina y lo traduce a un lenguaje de alto nivel, realizando el proceso inverso a la compilación.
Otra modalidad de clasificación de los lenguajes de programación es según su nivel de abstracción, hay dos grandes grupos, lenguajes de alto nivel y de bajo nivel. El grupo de los de bajo nivel, como su nombre indica, incluye los relacionados íntimamente con la arquitectura de la máquina, por lo que generalmente son específicos de un microprocesador (CPU) y no son válidos para equipos con CPU diferentes.

Dentro de los de estos grupos está el lenguaje máquina, que es programar en el ámbito de la CPU, por lo tanto usando ceros y unos, lenguaje muy difícil y propenso a errores. El otro más conocido dentro de esta categoría es el Ensamblador, que utiliza nemónicos, por ejemplo ADD (sumar), SUB (restar), MUL (multiplicar), CALL (ejecutar subrutina), a escala sencilla, y por lo tanto evita las secuencias de ceros y unos. Aún así es bastante complicado y no es recomendable para usuarios no expertos.

Seguidamente se muestra un programa en lenguaje ensamblador para CPU Intel, que muestra en pantalla el texto "Universidad de Murcia ",
    .model tiny .data message db 'Universidad de Murcia'
    .code org 100h
    start: mov ah,9 mov dx,offset message int 21h ret end start

Mientras que en un lenguaje de alto nivel, como Pascal, se escribiría de forma muy sencilla,
    program UniMurcia; begin writeln('Universidad de Murcia'); end.

En conclusión, un lenguaje de bajo nivel está orientado hacia una determinada máquina o clases de ordenadores, es decir es específico de un tipo de CPU concreta. Mientras que un lenguaje de alto nivel es independiente del microprocesador del ordenador que lo soporta, así por ejemplo un programa escrito en lenguaje C, se puede compilar sin modificar para cualquier máquina, y en principio funcionará sin ningún problema. Esto implica dos ventajas principales, una es que la persona que desarrolla los programas no ha de saber nada acerca del ordenador en que se ejecutará el programa, la otra es que los programas son portables, es decir el mismo programa (en teoría) ha de funcionar sobre distintos tipos de ordenadores.

El desarrollo de los lenguajes de alto nivel comenzó a mediados de los años cincuenta del siglo pasado, entonces se crearon los lenguajes COBOL, Fortran y ALGOL60. Posteriormente se diseñaron otros muchos, aunque sobreviven muy pocos. Algunos lenguajes de alto nivel, por ejemplo, son: JAVA, BASIC, FORTRAN, MODULA 2, Pascal, ADA, C, C ++, LOGO, LISP, PROLOG, Ruby, Dart, Go.

Una tercera forma de clasificar los lenguajes de programación es según el paradigma de programación, declarativo, imperativo, orientado a objetos y funcional. Los imperativos establecen cómo debe ejecutarse una tarea fraccionándola en procedimientos que especifican cada una de las tareas, por ejemplo C, Fortran y Pascal. Por el contrario los declarativos establecen estructuras de datos y las relaciones entre ellos que son significativas para ejecutar una tarea determinada, al tiempo que indican cual es el objetivo de dicha tarea. Un lenguaje típico de este grupo es el Prolog
   Prolog, proveniente del francés PROgrammation en LOGique, es un lenguaje que se basa en el paradigma lógico con técnicas de producción final interpretada. Es bastante conocido en el área de la Ingeniería Informática para investigación en Inteligencia Artificial. Fue ideado a principios de los años 1970 en la Universidad de Aix-Marseille I (Marsella, Francia) por los estudiantes modélicos Alain Colmerauer y Philippe Roussel.
   . El orientado a objetos usa objetos y sus interacciones para diseñar aplicaciones y programas de ordenador; está basado en varias técnicas, incluyendo herencia, modularidad, polimorfismo y encapsulación, Smalltalk es el lenguaje más representativo de este tipo. Funcional es un paradigma de programación declarativo basado en la utilización de funciones matemáticas, el lenguaje más representativo es LISP (procesado de listas). Aunque puede seleccionarse la forma pura de estos paradigmas a la hora de programar, en la práctica es habitual que se mezclen, dando lugar a la programación multiparadigma. Entre tantos lenguajes de programación diferentes, hay algunos con poco éxito y otros al transcurrir el tiempo se vuelven obsoletos. Si se desea saber los más usados, hay un índice, conocido como Tiobe, que indica la popularidad de los diversos lenguajes de programación.

La siguiente tabla muestra los lenguajes de programación más usados el año 2017.


Metodologías de programación

Hace unos cuantos años se produjeron cambios de gran alcance en la forma en que se desarrollaba el software para los equipos informáticos. Las causas de estos cambios fueron las siguientes:
    - Coste creciente de los desarrollos

    - Insatisfacción de los usuarios con la adecuación y calidad

    - Complejidad y tamaño creciente de los programas

    - Creciente dependencia de muchas organizaciones de sus sistemas informáticos, sin posibilidad de abandonarlos

    - Intento de lograr ordenadores de quinta generación con características software muy diferentes. La realidad es que el resultado fue un fracaso

Estas y otras situaciones dieron lugar a la reorganización de los métodos empleados en el desarrollo de los programas. Lo que se necesita son técnicas para la elaboración de productos software muy largos y complejos, que satisfagan estándares muy estrictos de calidad y prestaciones, de acuerdo con una planificación, control y presupuestos adecuados.

Los métodos de trabajo que se desarrollaron para responder a estas necesidades constituyen lo que se llama "Ingeniería del Software". La Ingeniería del Software es una tarea de equipo, al iniciar un proyecto de desarrollo, se constituyen una serie de equipos con una estructura paralela a la del programa en sí. Se establece un calendario para el proyecto y se asignan los costes a cada una de las partes y etapas del proyecto. Cada equipo tiene un responsable, cuya tarea es la de comprobar que la programación desarrollada sea correcta, está estructurada adecuadamente y dispone de las interfaces para conectar. Sin embargo no ha mostrado gran eficacia en el tiempo que lleva aplicándose, incluso hay quienes no son partidarios de la Ingeniería del Software, como por ejemplo Ricardo Galli, creador de la famosa página Meneame.

En resumen, la Ingeniería del Software se ocupa del ciclo de vida completo de un producto software, diseño, desarrollo, uso y mantenimiento. El trabajo se hace buscando el mayor grado posible de estandarización y los menores costes durante la totalidad del ciclo de vida de los programas.

La Ingeniería del Software implica que un programa bien estructurado satisfaga las siguientes condiciones:
    - El programa ha de tener una estructura general en forma de módulos, que a su vez estarán formados por procedimientos o segmentos.

    - Debe existir un interfaz claramente definido entre los diversos módulos.

    - Cada módulo debe de ser una combinación sencilla de construcciones elementales de un lenguaje de programación.

    - Debe existir una fuerte correspondencia entre la estructura de los módulos y la de los datos sobre los que operan.

    - Cada módulo debe dejar las estructuras de datos sobre las que opera en un estado consistente con su definición.

    - Un módulo no debe tener efectos secundarios.

Por lo que respecta a las técnicas de diseño de programas, el método más simple y uno de los más populares es el conocido como de "Refinamiento Progresivo". Se fundamenta en el uso de algoritmos que se escriben en un lenguaje intermedio entre el castellano y un lenguaje de programación como el Pascal, denominado pseudocódigo
    En ciencias de la computación, y análisis numérico, el pseudocódigo (o falso lenguaje) es una descripción de alto nivel compacta e informal del principio operativo de un programa informático u otro algoritmo.
Utiliza las convenciones estructurales de un lenguaje de programación real, pero está diseñado para la lectura humana en lugar de la lectura mediante máquina, y con independencia de cualquier otro lenguaje de programación. Normalmente, el pseudocódigo omite detalles que no son esenciales para la comprensión humana del algoritmo, tales como declaraciones de variables, código específico del sistema y algunas subrutinas. El lenguaje de programación se complementa, donde sea conveniente, con descripciones detalladas en lenguaje natural, o con notación matemática compacta. Se utiliza pseudocódigo pues este es más fácil de entender para las personas que el código del lenguaje de programación convencional, ya que es una descripción eficiente y con un entorno independiente de los principios fundamentales de un algoritmo. Se utiliza comúnmente en los libros de texto y publicaciones científicas que se documentan varios algoritmos, y también en la planificación del desarrollo de programas informáticos, para esbozar la estructura del programa antes de realizar la efectiva codificación.
    . El proceso se puede describir en términos de un lenguaje de esta naturaleza:
    - Establecer todos los pasos del programa en un algoritmo breve de alto nivel.

       - Repetir

    - Expandir cada sentencia del algoritmo en detalle, especificando los pasos necesarios.

    - Hasta que las tareas hayan sido especificadas con el detalle suficiente como para que pueda generarse el código del programa.

Como ejemplo se indica el esquema para saber como se estructura el planeta Tierra:
Algoritmo Tierra

Existen otras metodologías más depuradas como por ejemplo la conocida como "Descomposición Funcional". A diferencia de la anterior en cada etapa se especifican las propiedades esenciales de las estructuras de datos, y cada algoritmo se expresa como una función matemática que transforma esta estructura de datos.

Una vez desarrollado un programa como es lógico se ha de comprobar su buen funcionamiento. En la mayoría de los casos se prueba con cualquier tipo de datos que hipotéticamente puedan presentarse en la realidad. Sin embargo este proceso nunca puede establecer si un programa es o no correcto, sin importar cuántos conjuntos de datos se usen. Si un programa es de importancia crítica, como ocurre con muchas aplicaciones en los ámbitos de la salud, comerciales, industriales o militares, es necesario tomar todas las precauciones posibles para asegurar que están libres de errores.

Otra metodología moderna es la de los "Métodos formales", la especificación formal es un área de investigación cuyo propósito es el desarrollo de técnicas, lenguajes y herramientas (basadas en lógicas clásicas y no clásicas, álgebras o cálculos) para alcanzar una de las principales metas de la ingeniería de software: permitir la construcción de sistemas que operen de forma confiable a pesar de su complejidad. Aún cuando la aplicación de métodos formales no garantiza a priori que un sistema sea correcto, facilita considerablemente el análisis de las propiedades del sistema, mostrando posibles inconsistencias, ambigüedades o incompletitudes que de otra forma pasarían desapercibidas.

Sistemas operativos

Para ejecutar un programa de aplicación, por ejemplo un editor de textos, previamente se ha de cargar en la memoria del dispositivo el denominado sistema operativo o sistema de explotación, que es como una capa intermedia entre el hardware y los programas. Surgieron en la década de los 1950. El primer sistema operativo fue desarrollado en 1956 para un ordenador IBM 704, y lo único que hacía era comenzar la ejecución de un programa cuando el anterior terminaba. En la siguiente década se produjo una revolución en el campo de los sistemas operativos. Aparecen conceptos como sistema multitarea, sistema multiusuario, sistema multiprocesadores y sistema en tiempo real. Es entonces cuando surge UNIX, la base de la gran mayoría de los sistemas operativos actuales.

En vez de definir qué es un sistema operativo, es más comprensible el describir las funciones que realiza en un ordenador:

Sistemas operativos
    - Comunicación con los periféricos. Algunas de las operaciones más complejas de un ordenador están relacionadas con la comunicación con los periféricos, tales como pantalla, impresora y sistema de almacenamiento.

    - Coordinación de los trabajos concurrentes. Es habitual que los ordenadores ejecuten varios trabajos simultáneamente, es lo que se conoce como multitarea y algunos también son multiusuario, el sistema operativo ha de gestionar el acceso a la CPU de los trabajos en ejecución simultánea.

    - Administración de la memoria. Al estar bajo operación concurrente varios trabajos, es muy importante gestionar el uso de la memoria RAM, para evitar confusiones entre lo que procesan los distintos usuarios. También gestionan la conocida como memoria virtual, que es el uso del disco como almacenamiento temporal cuando no hay espacio suficiente en la memoria RAM.

    - Monitorización de recursos. El sistema operativo también puede llevar una contabilidad sobre los recursos y tiempos que consumen los usuarios, que suelen acceder con un nombre y contraseña.

    - Programas y localización de datos. El sistema operativo es como un bibliotecario que se encarga de buscar y acceder a los ficheros y programas que requiere el usuario.

    - Coordinación de las comunicaciones en una red. Las primeras redes de ordenadores no eran gestionadas por los sistemas operativos, en su lugar existían sistemas específicos para redes, sin embargo actualmente también las gestionan.

En el entorno de ordenadores personales el sistema operativo más empleado es Windows, mientras que en entornos profesionales hay otros como el Mac-OS (exclusivo de los ordenadores Mac de Apple) y las diversas variantes de Linux. En el ámbito móvil domina Android, que es una versión de Linux. Al considerar de un sistema operativo libre u Open Source, lo habitual es que se piense en Linux, sin embargo existe ReactOS, que ofrece compatibilidad con aplicaciones (y drivers) de Windows XP, Windows 7, Windows Server 2012.

Con la llegada al mercado de equipos portátiles de reducido tamaño conocidos como netbooks, tabletas, y teléfonos móviles “inteligentes” de avanzadas prestaciones (smartphones) han surgido otros sistemas operativos para ambos tipos de equipos. Incluso hay un sistema operativo de Google basado en Linux, denominado Chrome (no confundir con el navegador de internet) que ha dado lugar a un nuevo tipo de ordenadores, los conocidos como Chromebooks
    Son ordenadores personales que trabajan con el sistema operativo Google Chrome OS. Los dispositivos son de una clase distinta del ordenador personal, intermedio entre el equipo cliente en nube puro y los portátiles tradicionales. Los primeros dispositivos que se lanzaron a la venta con este sistema operativo fueron de Acer y Samsung, anunciados durante el congreso de desarrolladores Google I/O en mayo de 2011.
    . Android Nougat

Nokia e Intel fusionaron sus desarrollos basados en Linux en un sistema operativo denominado MeeGo, que no llegó a comercializarse, dado que la división de teléfonos móviles celulares de Nokia fue adquirida por Microsoft. Por lo que respecta a los teléfonos, Nokia hasta el año 2013 usó el sistema operativo Symbian, aunque posteriormente sus teléfonos se comercilizaron por Microsoft con la marca Lumia, operando con Windows Phone, habiendo sido un fracaso completo. Los nuevos Nokia, que no tienen ninguna relación con Microsoft incorporan Android, que es una variante de Linux originalmente destinada a máquinas de fotografiar. A la versión 4.4 se le puso el nombre de unas conocidas chocolatinas de Nestle, y posteriormente la siguiente versión, fue como Lollipot, que incorporaó el teléfono móvil de Google, Nexus 6, Android 7,1, conocida como Nougat. La versión más reciente de Android es la 8, conocida como Oreo.

Otros sistemas operativos para teléfonos móviles son: Apple iOS (exclusivo de los iPhone de Apple), China Operating System (COS, desarrollado por la Academia China de Ciencias), Blackberry OS (exclusivo de los teléfonos Blackberry, ya descatalogado), Tizen (desarrollado por Samsung en base a MeeGo y Linux) y Ubuntu Touch (basado en el sistema operativo Ubuntu, que ha sido un fracaso).


El vídeo trata sobre ordenadores cuánticos y su sistema operativo.
Página de inicio