sábado, 8 de marzo de 2014

Unix y el lenguaje de programación C: una simbiosis histórica


Unix, el sistema operativo creado en 1969 y que es la base para otros UNIX registrados o Unix-like. El sistema operativo fue creado en los laboratorios Bell de la AT&T por Ken Thompson, Dennis Ritchie y Douglas McIlroy. 
Douglas McIlroy, aunque se licenció en ingeniería física, también fue un importante matemático y programador de los Bell Labs. A él se le deben algunos de los fundamentos actuales que se usan para crear el software, además de haber creado ciertas herramientas, haber aportado conocimientos a Unix, como la segmentación por medio de filtros y pipelines, etc. 

Dennis MacAlistair Ritchie (dmr) fue otro científico especializado en las ciencias de la computación que entre otros grandes desarrollos crearía el lenguaje de programación C. Este lenguaje es uno de los más importantes de la actualidad y va muy ligado a la historia Unix como te trataré de explicar en este artículo. 
Kenneth Lane Thompson otro informático histórico que puso su conocimiento para crear el lenguaje de programación B en el que se basaría C, además de sus aportes a UNIX y el sistema operativo Plan 9. Los tres mentes brillantes que nos han aportado mucho y que siguen aportando gracias a la herencia dejada y recogida por Linux, BSD, etc. 
Bien, una vez realizada esta pequeña presentación, decir que el lenguaje C es un lenguaje de programación que crea código muy eficiente y de gran potencia para engendrar todo tipo de software. Es muy usado para crear el código de multitud de kernels de sistemas operativos importantes, como el propio Unix y derivados como FreeBSD o Linux. 
¿Pero por qué es tan importante C para el mundo Unix? O ¿Por qué la historia de los *nix está tan ligada a C? La respuesta no solo se basa en que uno de los creadores de Unix fuese el creador también de este lenguaje, ni tampoco en que muchos *nix actuales lo empleen. El motivo va más allá, los SO *nix no son sin C y C no sería lo que es sin los *nix. 
El lenguaje C potenció el rendimiento de Unix y lo llevó hasta el altar donde hoy se sitúa este SO y sus derivados. Es más, se puede decir que de no ser por el lenguaje C, Unix no se habría extendido tanto como lo ha hecho. El lenguaje ensamblador está presente en muchos núcleos *nix, junto con C. Pero el Unix primitivo, el primero que se creó se escribió enteramente en lenguaje ensamblador. 
Esta decisión lo hacía totalmente dependiente de la arquitectura para la que se creó y no era precisamente hardware barato para el que estaba escrito. Dicho con otras palabras, para portar Unix a otra arquitectura había que rescribirlo al completo para conseguir un lenguaje ASM compatible con la arquitectura a la que quisieses portarlo. 
En 1973, Ritchie rescribió el código completo de Unix a C y con esto consiguió que Unix fuese portable. Así Unix era de una vez por todas un sistema portable independiente de la máquina. Eso permitió que Unix fuese compatible con otras arquitecturas o familias y su expansión fuese de tipo viral. 
Puedo decir, que tal vez si Unix no se fuese escrito en C, jamás se habría dado a conocer fuera del ámbito universitario o empresarial y muy posiblemente no fuesen surgido derivados como BSD, Solaris, Linux, … 
¡Esto nos da una idea de que cualquier pequeña decisión puede traer grandes consecuencias en el futuro!