Evolución del Sistema operativo

La máquina de Babbage, sin embargo, no tenía ningún tipo de software. La máquina podía ser "programada" (un concepto nuevo para la época) mediante tarjetas perforadas, método que ya se usaba para configurar máquinas en la industria textil. Ada Lovelace, matemática, escribió un conjunto de notas que describían un procedimiento para calcular una secuencia de números de Bernoulli usando la máquina de Babbage. Se considera este documento como el primer programa desarrollado para una máquina computacional, y a Ada Lovelace como la primera programadora. El lenguaje de programación Ada fue nombrado en su honor.



image

click to edit

Timesharing para múltiples usuarios
Hasta el momento todo el avance había apuntado a mejorar los sistemas de procesamiento por lotes (batch). El programador entrega sus tarjetas, y espera hasta obtener un resultado. Por supuesto, los programadores también cometían errores y, una vez entregado el programa, debían esperar algunas horas hasta recibir el output que indicara que su código había fallado porque le faltaba un ;. Medio día perdido antes de corregir el error y reenviar el job. No había ningún tipo de interactividad con el sistema. Dada la cantidad de usuarios que deseaban utilizar el computador, asignar horas para que cada usuario interactuara directamente y de manera individual con el computador era tremendamente ineficiente, pues el computador pasaba la mayor parte del tiempo idle mientras el usuario ingresaba código. El modelo batch seguía siendo superior.

Prehistoria de sistema operativos
La primera máquina a la que se puede llamar un computador digital de propósito general fue diseñada por el matemático inglés Charles Babbage (1791-1871), quien diseñó una máquina mecánica digital (digital: capaz de trabajar con dígitos), conocida como la analytical engine, o máquina de Babbage. Si bien desarrolló todos los planos, nunca pudo terminar de construirla.


image

Evolución de los sistemas operativos

Usar un computador no siempre fue tan fácil. Los sistemas operativos surgieron como una necesidad para poder utilizar máquinas muy complejas en tiempos que se necesitaba personal muy especializado para poder operarlas. La evolución de los sistemas operativos estuvo, por lo tanto, muy ligada a las características y necesidades particulares de las máquinas disponibles. Resulta difícil hablar de los sistemas operativos sin referirse al mismo tiempo a la evolución del hardware, pues ambos aspectos han avanzado de la mano durante gran parte de la historia.

Este artículo describe algunos hitos en la evolución del software que conocemos como sistema operativo y destaca el surgimiento de conceptos que persisten en los sistemas operativos modernos. La división de generaciones es aproximada en cuanto a años, y esta guiada principalmente por los hitos que marcaron al hardware.

En 1946, William Mauchley y J. Presper Eckert construyeron, en la Universidad de Pennsylvania uno de los primeros computadores programables de propósito general: el ENIAC (Electronic Numerical Integrator and Computer). Poseía 20000 tubos de vacío, pesaba 27 toneladas, ocupaba 167m2 y consumía 150kW de electricidad. Su dispositivo de entrada era un lector de tarjetas perforadas y su salida era un perforador de tarjetas (IBM 405). Poseía un clock de 100kHz, y utilizaba 20 registros de 10 dígitos binarios. No existía un lenguaje de programación, ni siquiera assembler, de manera que toda la computación era descrita en las tarjetas perforadas mediante código de máquina.



image

click to edit

Primera Generación (1945-55): Tubos de vacío

Posteriormente al trabajo de Babbage, el desarrollo de máquinas programables quedó relegado al ámbito de la investigación científica, sin grandes aplicaciones prácticas. Como ha ocurrido con tantos otros inventos, fue el periodo de la Segunda Guerra Mundial el que vino a reimpulsar el interés en este tipo de máquinas.

Se empezaron a desarrollar las primeras máquinas electrónicas, como el Z3 de Konrad Zuse (1941), y la máquina de Atanasoff-Berry (1942). El flujo de cómputo de estas máquinas era controlado por switch electrónicos (relay), construidos mediante tubos de vacío (vacuum tube). Al estar compuestas por cientos o miles de estos tubos, no era extraño que uno o varios fallaran durante la operación. Algunas de estas máquinas eran programables, si bien no todas eran de "propósito general" ó Turing-complete.

En 1944, un grupo de científicos en Bletchley Park, Inglaterra, entre los que se encontraba Alan Turing, construyó el computador Colossus, cuyo modelo más conocido, el Colossus Mark 2, utilizaba 2400 tubos de vacío. Este computador, si bien, tampoco era Turing-complete (lo que demuestra que no basta tener a Alan Turing para ser Turing-complete) ya que fue diseñado para una tarea criptográfica particular, sí era programable mediante cintas de papel. Fue importante en el proceso de decriptación del criptosistema alemán Lorenz. image

click to edit

Segunda Generación (1955-65): Transistores y Sistemas Batch

La creación de los transistores en los años 1950 revolucionó la construcción de los dispositivos electrónicos reduciendo drásticamente las tasas de falla respecto al hardware construido con tubos de vacío y aumentando la velocidad de respuesta. Se empezaron a construir grandes computadores basados en transistores, conocidas como mainframes. Debido a su costo de construcción, un computador de este tipo era solamente accesible para grandes corporaciones, gobiernos y universidades.

La operación de un mainframe requería la colaboración de varios actores. Un mainframe ejecuta jobs (trabajos), que consisten en el código de un programa, o una secuencia de programas. Los programas se ingresan mediante tarjetas perforadas y se escriben en lenguaje assembler. En 1953, John W. Backus, de IBM, propone una alternativa para hacer más práctica la descripción de programas en lugar de assembler y desarrolla el FORmula TRANslating system, conocido como lenguaje FORTRAN, junto con una herramienta para hacer la traducción hacia assembler llamada compilador. Este trabajo le otorgaría el Turing Award en 1977.



image

Tercera Generación (1965-1980): Circuitos Integrados y Multiprogramación
En los años 1960s, los mainframes de IBM (International Business Machines Corporation), la compañía constructora de equipamiento computacional más importante de la época, requerían cada uno un software y periféricos distintos para funcionar, ya que las instrucciones no eran compatibles. Un programa hecho para un modelo debía ser reescrito ante la introducción de un nuevo modelo de hardware. La compañía decide unificar el hardware bajo una familia llamada System/360. Ésta fue la primera línea importante basada en la nueva tecnología de circuitos integrados capaz de integrar grandes cantidades de pequeños transistores, lo que proporcionaba una enorme ventaja precio/rendimiento respecto a los transistores tradicionales.



image

OS/360, y la multiprogramación
La idea de tener una línea de hardware mutuamente compatible y de propósito general requería un sistema capaz de funcionar en todos los modelos. Este sistema fue el OS/360. El software resultante resultó enormemente grande (millones de líneas de assembler) y complejo de desarrollar, con numerosos bugs, en tiempos en que la ingeniería de software no se desarrollaba como disciplina aún. El director del proyecto Fred Brooks describió sus experiencias en el libro "The Mythical Man-Month", un clásico de la ingeniería de software. Sus contribuciones a esta nueva disciplina le valieron el otorgamiento del Turing Award en 1999


image .

click to edit

MULTICS: una nube de cómputo del pasado

Ante las posibilidades que prometía el timesharing MIT, Bell Labs, y General Electric, deciden crear un sistema que soporte cientos de usuarios. De la misma manera que múltiples casas podían tener acceso a la red eléctrica, en este sistema múltiples usuarios tendrían acceso a tiempo de cómputo (en la actualidad esto se llamaría "Computing Time as a Service") con tan solo conectarse a este mainframe (una nube de cómputo). El sistema fue bautizado como MULTICS (MULTiplexed Information and Computing Service).

MULTICS tuvo un éxito parcial. Además de ser escrito en PL/I, un lenguaje poco popular y con un compilador deficiente, el proyecto resultó ser sumamente ambicioso para la época (como la máquina de Babbage) y demasiado complejo, lo que demoró el desarrollo al punto que Bell Labs y General Electric abandonaron el proyecto. MIT persistió y el sistema eventualmente fue terminado. Honeywell, la compañía que continuó las operaciones de General Electric en el área de los computadores, lo adquirió y consiguió suficientes clientes para hacerlo viable. No alcanzó mucha popularidad pero su desarrollo tuvo una gran influencia en sus sucesores.

UNIX: una simplificación de MULTICS
El desarrollo de la tecnología de transistores en circuitos integrados cada vez más pequeños y confiables (reliable) permitió que se construyeran computadores más pequeños tanto o más poderosos que los de la época. Se les llamó minicomputadores y uno de los más famosos fue el PDP-1 (Programmed Data Processor) de la compañía DEC (Digital Equipment Corporation), competidora de IBM y que fue comprada por Compaq (luego HP) en 1998. El DEC PDP-1 usaba words de 18-bit y soportaba 4096 words, con ciclos de acceso a memoria de 5.35 usec. DEC construyó modelos sucesivos de la línea PDP, no compatibles entre sí, hasta el PDP-16.

GNU, el software libre, y Linux
En 1983, todas las versiones de UNIX utilizaban licencias comerciales. En MIT, Richard Stallman inicia el proyecto GNU (GNU is Not UNIX, un acrónimo recursivo) con el objetivo de desarrollar una versión completamente gratuita y de código abierto de un sistema "UNIX-like". Como parte de su proyecto se definió la GNU General Public License, GPL, se publicó el GNU Manifesto y se desarrollaron múltiples herramientas como gcc (GNU Compiler Collection), glibc (GNU C Library), coreutils (GNU Core Utilities), binutils (GNU Binary Utilities), bash (GNU Bash Shell), y el entorno de escritorio GNOME (originalmente GNU Network Object Model Environment). Sin embargo el microkernel, denominado GNU Hurd (donde "Hurd" se define como Hird of Unix-Replacing Daemons, y "Hird" como Hurd of Interfaces Representing Depth, y que en el fondo suena similar a herd of GNUs), demoró en ser terminado (aún al año 2018 no hay una versión 1.0).

click to edit

Cuarta Generación (1980-Presente): Computadores personales

El desarrollo tecnológico de los circuitos integrados llegó al nivel conocido como VLSI (Very Large Scale Integration), capaz de integrar hasta 1 millón de transistores en un chip de 1cm2, lo que permitía hasta 100000 celdas lógicas. Surgieron sistemas computacionales de uso personal denominados microcomputadores, que en principio no eran tecnológicamente muy superiores al PDP-11, pero a un precio notablemente inferior.

Intel 8080, CP/M y el despegue de los microcomputadores

En 1974, Intel presenta el chip Intel 8080, una CPU de propósito general de 8-bit con un clock de 2MHz, sucesora del 4004 y el 8008, los primeros microprocesadores del mercado. Fue parte del popular MITS Altair 8800, que dió inicio a la era de los microcomputadores.

BM PC y la masificación de Microsoft DOS
IBM, por su parte, que había dominado el mercado de los mainframes se estaba quedando atrás en el nuevo mercado de los microcomputadores y empezó a desarrollar su propia versión: el IBM Personal Computer (IBM PC) basado en el Intel 8088 de 16-bit, 4.77MHz de clock, y hasta 256 kB de RAM. En 1980, IBM contactó a una pequeña compañía de nombre Microsoft fundada por Bill Gates y Paul Allen en 1975, y conocida por desarrollar un intérprete del lenguaje BASIC para el popular Altair 8800. Sin embargo, IBM deseaba un sistema operativo completo, y Bill Gates les sugirió contactar a Digital Research, que con CP/M era el dominador absoluto de los sistemas operativos.

Doug Engelbart y la interactividad: "The Mother of All Demos"
Aún a inicios de los años 1980s, tanto MS-DOS como CP/M-86 seguían interactuando con el usuario a través de líneas de comando y teclado. Esto cambiaría debido a una investigación en interacción humano-computador que venía siendo desarrollada desde los años 1960s por Doug Engelbart (1925-2013) en el Stanford Research Institute (SRI), quien creó las GUI (Graphical User Interface) como medio de interactuar con el computador mediante un conjunto de abstracciones gráficas como ventanas, íconos, menúes, hipertexto (sí, hipertexto, ahí quedaste Tim Berners-Lee #conrespeto), y un novedoso dispositivo llamado mouse capaz de controlar un puntero en pantalla

Apple y la evolución de MacOS
No sería, hasta el desarrollo del Apple Lisa (1983) y el Apple Macintosh (1984), los primeros computadores personales en incluir una interfaz gráfica, que las GUIs se harían populares al acercar el uso del computador al público general e incorporar el concepto de user friendliness. Se dice que Steve Jobs, co-fundador de Apple Computer Inc. habría tenido la idea incorporar la GUI a su próximo computador (Lisa) luego de una visita que realizó en 1979 a Xerox PARC, sin embargo hay testimonios que indican que el plan de incorporar una GUI al Apple Lisa existía de manera previa a dicha visita (Steve Jobs y los ingenieros de Apple tenían suficientes motivos para visitar Xerox PARC, en cualquier caso, y la visita efectivamente ocurrió). En cualquier caso el Apple Macintosh fue ampliamente popular en particular en el ámbito del diseño gráfico.

Microsoft y la evolución de Windows
Fuertemente influenciado por el éxito del Apple Macintosh, a inicios de 1980s Microsoft planeaba un sucesor para MS-DOS que tuviera su propia GUI. Su primer intento fue un sistema administrador de ventanas llamado Windows 1.0 (1985) que funcionaba como una aplicación sobre MS-DOS. La versión que consiguió mayor adopción fue Windows 3.11, para sistemas de 16-bit. Fue en 1995, con el lanzamiento de Windows 95 y luego Windows 98, que se incorporó código para aprovechar las nuevas CPU de 32-bit, aun cuando parte del sistema operativo debía soportar aún aplicaciones de 16-bit por retrocompatibilidad. MS-DOS seguía siendo usado para iniciar el sistema y como soporte subyacente para aplicaciones antiguas.

click to edit

Quinta Generación (1990-Presente): Computadores Móviles

Hasta 1993, los dispositivos telefónicos móviles no era más que dispositivos de comunicación que usaban sistemas embebidos, dedicados, para administrar su hardware. El concepto de utilizar estos dispositivos para realizar actividades más allá de la telefonía surgió con los dispositivos conocidos como PDA (Personal Digital Assistant), entre los cuales se encuentra el Apple Newton que incluía un sistema operativo Newton OS escrito en C++, y con un pionero uso de reconocimiento de escritura manual. Poseía una API para aplicaciones desarrolladas por terceros, sin embargo no obtuvo gran adopción.

Talvez el primer dispositivo llamado un smartphone fue el IBM Simon, con una interfaz de pantalla touch (con stylus) y un sistema operativo ROM-DOS, compatible con MS-DOS y desarrollado por la empresa Datalight. Su batería de una hora de duración no le permitió competir con los nuevos dispositivos.

Palm, Inc. y el Palm OS
Fue en 1997 que la ya extinta compañía Palm, Inc. popularizó los dispositivos PDA mediante su PalmPilot, y su sistema operativo Palm OS 2.0 como el primer sistema operativo móvil exitoso. Incorporaba el sistema Graffiti de reconocimiento de escritura manual, y el stack de protocolos TCP/IP para soportar sincronización por red en lugar de cable serial. Palm OS introdujo paulatinamente características modernas acorde a la evolución de los dispositivos como soporte para el stack WiFi (IEEE 802.11), Bluetooh, y desde 2004 con Palm OS 6.0 (Cobalt), un kernel con multitasking y protección de memoria. En 2009, Palm, Inc. intentó ponerse al día en la competencia por el mercado móvil con el desarrollo de webOS. Palm, Inc. sería adquirido por HP al año siguiente y el desarrollo de webOS no se vería impulsado hasta al menos dos años más cuando el código de webOS se publicó de manera abierta. Finalmente HP licencia el uso de webOS a LG para incorporarlo en sus dispositivos smartTV.

Nokia y SymbianOS
El éxito de Palm llevó a otros protagonistas de la telefonía móvil como Nokia a co-fundar y posteriormente adquirir completamente a Symbian Ltd.. El consorcio fundador incluía a Psion, una compañía que estaba detrás de EPOC, un sistema operativo single-user de 32-bit con preemptive multitasking del año 1998, que bajo Symbian se convertiría en Symbian OS cuya primera versión (6.0) fue utilizada en el Nokia 9210 Communicator. Symbian OS corría sobre procesadores ARM, una arquitectura RISC. En su mejor momento, Symbian OS fue el sistema preferido por manufacturadores como Samsung, Motorola, Sony Ericsson, y principalmente Nokia. Poseía un microkernel llamado EKA2 que soportaba preemptive multithreading, protección de memoria, y scheduling para tareas de tiempo real (RTOS).

Microsoft y el Windows Phone
Microsoft había desarrollado desde 1996 un sistema operativo embebido llamado Windows CE (actualmente Windows Embedded Compact) diseñado para una especificación de plataformas incialmente denominado Pocket PC. Los primeros dispositivos con Windows CE se lanzaron en 2002. Windows CE contenía un kernel híbrido escrito en C y soportaba arquitecturas x86, ARM, MIPS y PowerPC. La serie de sistemas operativos móviles basados en Windows CE fue conocida como Windows Mobile (incluyendo el media player Zune) y fue desarrollado hasta 2010. Posteriormente Microsoft reimplementaría su sistema operativo móvil basado en la línea de Windows NT, dando inicio a Windows Phone, línea que fue descontinuada en 2017 debido al poco interés de los desarrolladores en generar aplicaciones para esta plataforma ante la dominancia de iOS y Android.

RIM y Blackberry OS
En 2002 la compañía canadiense Research In Motion (RIM) desarrolló su propia línea de dispositivos móviles conocidos como BlackBerry y su propio sistema operativo BlackBerry OS (RIM con el tiempo cambiaría su nombre a BlackBerry Ltd.). BlackBerry OS era un sistema multitasking con soporte para aplicaciones mediante la plataforma especial para dispositivos embebidos Java Micro Edition (JavaME). Incluía soporte para WAP, un stack de protocolos de comunicación para móviles que dejó de ser adoptado cuando los dispositivos móviles fueron suficientemente poderosos para procesar el tradicional stack TCP/IP. En 2010, BlackBerry OS fue reemplazado por BlackBerry 10, un sistema basado en el microkernel de tiempo real (RTOS) QNX. Desde 2016, los dispositivos producidos por BlackBerry empezaron a usar Android en lugar de BlackBerry 10, cuyo soporte ha sido anunciado al menos hasta 2019.

Apple: el iPhone y iOS
El año 2007 ocurrió la entrada de uno de los principales competidores cuando Apple presentó su iPhone junto con su sistema operativo iOS (originalmente iPhone OS). iOS, al igual que MacOSX se basa en el kernel híbrido XNU y el sistema operativo (UNIX-like) Darwin. Desde el año 2010, con iOS 4, el sistema añadió soporte de APIs para multitasking por parte de aplicaciones de usuario. Previamente el multitasking estaba restringido solo a ciertos servicios del sistema. La disponibilidad del iOS SDK (Software Development Kit) atrajo el desarrollo de múltiples aplicaciones nativas disponibles desde una tienda online (App Store), popularizando rápidamente el uso del iPhone y posicionándolo como uno de los principales competidores.

Android, la entrada de Google
Meses después del lanzamiento del primer iPhone, un conjunto de compañías lideradas por Google, incluyendo a HTC, Sony, Dell, Intel, Motorola, Samsung, LG, Nvidia, entre otros, forman la Open Handset Alliance (OHA). Con el soporte de OHA, Google lanza en 2008 la primera versión de Android, un sistema operativo monolítico (UNIX-like) de código abierto basado en el kernel Linux. Android inició su desarrollo bajo la compañía Android, Inc. fundada en 2003. El año 2005 Google adquirió Android, Inc. y fue bajo su alero que el equipo de desarrollo terminó la primera versión Android 1.0. De manera similar a App Store, Android lanzó el Android Market (más tarde Google Play Store), y el Android SDK para el desarrollo de aplicaciones (escritas principalmente en Java, y recientemente en Kotlin) para terceros.