{"id":124,"date":"2018-02-04T16:49:57","date_gmt":"2018-02-04T21:49:57","guid":{"rendered":"http:\/\/blogs.gentoo.org\/chrisadr\/?p=124"},"modified":"2019-11-01T03:35:27","modified_gmt":"2019-11-01T08:35:27","slug":"de-donde-viene-unix","status":"publish","type":"post","link":"https:\/\/blogs.gentoo.org\/chrisadr\/2018\/02\/04\/de-donde-viene-unix\/","title":{"rendered":"\u00bfDe d\u00f3nde viene UNIX?"},"content":{"rendered":"<p>Saludos a todos :) estas semanas\u00a0he estado bastante entretenido leyendo algunos libros sobre programaci\u00f3n, la verdad es que la mejor forma de aprender a programar es siempre con un libro, cualquier art\u00edculo, tutorial, gu\u00eda que uno pueda encontrar (incluyendo las m\u00edas) son meros puntos de referencia al momento de compararlas con un libro de verdad sobre el tema. Ahora bien, tenemos que definir lo que es un libro &#8220;de verdad&#8221; tambi\u00e9n, puesto que no todos los libros suelen ser buenos, y muchos de ellos pueden incluso costar m\u00e1s de lo que realmente valen y hacernos perder tiempo.<\/p>\n<p>A lo largo de estos a\u00f1os la lista de libros que he le\u00eddo y la de libros que puedo recomendar han divergido bastante, pero sin lugar a dudas entre algunos de mis favoritos tenemos (en ning\u00fan orden espec\u00edfico):<\/p>\n<ul>\n<li>CEH Certified Ethical Hacker de Matt Walker.<\/li>\n<li>Beginning Python: From Novice to Professional de Magnus Lie Hetland.<\/li>\n<li>Hacking: the art of exploitation de Jon Erickson.<\/li>\n<li>Getting Started with Arduino de Massimo Banzi.<\/li>\n<li>Learning the bash Shell de Cameron Newbam &amp; Bill Rosenblatt.<\/li>\n<li>Learning the vi and vim editors de Arnold Robbins, Elbert Hannah &amp; Linda Lamb.<\/li>\n<li>Linux Kernel in a Nutshell de Greg Kroah-Hartman (un developer de Gentoo tambi\u00e9n).<\/li>\n<li>Modern C de Jens Gustedt<\/li>\n<li>The Shellcoder&#8217;s Handbook de Chris Anley, John Heasman, Felix &#8220;FX&#8221; Linder &amp; Gerardo Richarte.<\/li>\n<li>The C programming language de Brian W. Kernighan &amp; Dennis M. Ritchie (creadores de C)<\/li>\n<li>Debugging with GDB de Richard Stallman, Roland Pesch, Stan Shebs, et al.<\/li>\n<li>Hacking Linux Exposed: Linux Security Secrets and Solutions de un gran grupo de investigadores de ISECOM, entre ellos Pete Herzog, Marga Barcel\u00f3, Rick Tucker, Andrea Barisani (otro ex developer de Gentoo), Thomas Bader, Simon Biles, Colby Clark, Raoul Chiesa, Pablo Endres, Richard Feist, Andrea Ghirardini, Julian &#8220;HammerJammer&#8221; Ho, Marco Ivaldi, Dru Lavigne, Stephane Lo Presti, Christopher Low, Ty Miller, Armand Puccetti &amp; et al.<\/li>\n<li>Sistemas operativos: Un enfoque basado\u00a0en conceptos de Dhananjay M. Dhamdhere<\/li>\n<li>Pro Git\u00a0 de Scott Chacon y Ben Straub<\/li>\n<li>Expert C Programming: Deep secrets de Peter Van Der Linden.<\/li>\n<\/ul>\n<p>Podr\u00eda hablar maravillas de cada uno de estos libros, pero por hoy tomaremos algunos de los pasajes del \u00faltimo en la lista, puesto que muchas de estas an\u00e9ctodas me han cautivado y ayudado a comprender mejor algunos de los intrincados secretos de C y la programaci\u00f3n en general :)<\/p>\n<h3>Unix y C<\/h3>\n<p>Cuando hablamos de UNIX, la historia se entrelaza con el origen de este sistema y el desarrollo del lenguaje que hasta el d\u00eda de hoy es uno de los m\u00e1s utilizados en el desarrollo del mismo y sus derivados (incluyendo Linux). Y curiosamente, estos dos nacen de un &#8220;error&#8221;.<\/p>\n<p><em>Multrics\u00a0<\/em>fue un mega proyecto que junt\u00f3 a los laboratorios Bell, General Electric y el mismo MIT para crear un sistema operativo, dicho sistema present\u00f3 muchos errores, y entre uno de los m\u00e1s importantes, fallos de performance que hac\u00eda del sistema algo practicamente inutilizable. Hablamos del a\u00f1o 1969, por lo que el hardware de esa \u00e9poca no podr\u00eda soportar la cantidad de software que se necesitaba para correr el sistema mismo.<\/p>\n<p>No fue hasta 1970 que un par de ingenieros de Bell empezaron a trabajar en un sistema operativo simple, r\u00e1pido y ligero para el PDP-7. Todo el sistema hab\u00eda sido escrito en <em>Assembler<\/em>\u00a0y hab\u00eda sido llamado <em>UNIX\u00a0<\/em>como parodia a <em>Multrics\u00a0<\/em>puesto que este solo deseaba hacer pocas cosas, pero hacerlas bien en lugar del tremendo trabajo desperdiciado que signific\u00f3 el segundo. Ahora podr\u00e1n entender por qu\u00e9 <em>Epoch\u00a0<\/em>comienza el 1ro de enero de <strong>1970<\/strong>. :) Un dato bastante curioso para m\u00ed. En ese momento todav\u00eda no se hablaba de un C propiamente dicho, sino de un <strong><em>New B\u00a0<\/em><\/strong>puesto que las ideas de Ritchie proven\u00edan del ya utilizado lenguaje B de esa \u00e9poca.<\/p>\n<h3>Early C<\/h3>\n<p>Con el paso de los a\u00f1os (1972-3) el t\u00e9rmino C empez\u00f3 a ser utilizado puesto que el lenguaje nuevo empezaba a tomar forma, y por esta \u00e9poca nace otro dato curioso, muchos programadores y chistes de programadores dicen:<\/p>\n<blockquote><p>Los programadores saben que se empieza a contar desde 0 en lugar de 1.<\/p><\/blockquote>\n<p>Pues esto no es del todo cierto :) la verdadera raz\u00f3n por la que esto es considerado as\u00ed hasta el d\u00eda de hoy es porque en su creaci\u00f3n, para los escritores de compiladores era m\u00e1s sencillo calcular un arreglo utilizando\u00a0<em>offsets<\/em>, estos indican la distancia que existe desde un punto de origen hasta el objetivo deseado, es por esto que:<\/p>\n<p><code>array[8]=2;<\/code><\/p>\n<p>Nos indica que el elemento <strong>9\u00a0<\/strong> de array es definido como 2, porque al array se le suman 8 unidades para llegar al espacio de memoria donde se almacenar\u00e1 el elemento 2. Antes de C, muchos lenguajes empezaban a contar desde 1, gracias a C, ahora casi todos comienzan con 0 :) as\u00ed que no es culpa de los programadores, sino de los escritores de compiladores que esto sea as\u00ed.<\/p>\n<h3>The Bourne Shell<\/h3>\n<p>Este es un t\u00f3pico que aunque no est\u00e1 directamente relacionado con C, puede ayudar a m\u00e1s de uno a entender por qu\u00e9 la programaci\u00f3n en Shell es tan peculiar, y ciertamente es curioso saberlo. Steve Bourne escribi\u00f3 por esa temporada un compilador de Algol-68, este es un lenguaje en el que las llaves (\u00a0<code>{}<\/code>\u00a0) son reemplazadas por palabras, por lo que lo podr\u00edamos definir de la siguiente manera en C:<\/p>\n<p><code>#define IF if(<\/code><\/p>\n<p><code>#define THEN ){<\/code><\/p>\n<p><code>#define ELSE }else{<\/code><\/p>\n<p><code>#define FI };<\/code><\/p>\n<p>Estos son solo algunos ejemplos de lo que entiende Algol, pero si lo aplicamos a la programaci\u00f3n en shell el d\u00eda de hoy, ya entender\u00e1n por qu\u00e9 en shell tus programas requieren de un\u00a0<code>fi<\/code>\u00a0para cada\u00a0<code>if<\/code>\u00a0:) ciertamente interesante.<\/p>\n<h3>Comiencen a leer<\/h3>\n<p>No puedo contarles todos los detalles del libro, especialmente porque muchos de estos ya son temas de programaci\u00f3n que requieren un fondo previo para poder ser comprendidos, pero pens\u00e9 en compartir con ustedes algunas de las anecdotas curiosas que fui encontrando en el camino :) No he tenido tiempo de trabajar en algunos de los art\u00edculos que han estado en la lista de pendientes porque simplemente estos \u00faltimos libros me han atrapado y los estoy disfrutando cada d\u00eda y sobre todo tratando de comprenderlos al m\u00e1ximo. Saludos y ya pronto podr\u00e9 compartir con ustedes m\u00e1s temas, saludos.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Saludos a todos :) estas semanas\u00a0he estado bastante entretenido leyendo algunos libros sobre programaci\u00f3n, la verdad es que la mejor forma de aprender a programar es siempre con un libro, cualquier art\u00edculo, tutorial, gu\u00eda que uno pueda encontrar (incluyendo las m\u00edas) son meros puntos de referencia al momento de compararlas con un libro de verdad &hellip; <a href=\"https:\/\/blogs.gentoo.org\/chrisadr\/2018\/02\/04\/de-donde-viene-unix\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">\u00bfDe d\u00f3nde viene UNIX?<\/span><\/a><\/p>\n","protected":false},"author":169,"featured_media":125,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[20],"tags":[25,24],"jetpack_featured_media_url":"https:\/\/blogs.gentoo.org\/chrisadr\/files\/2018\/02\/unix.jpg","_links":{"self":[{"href":"https:\/\/blogs.gentoo.org\/chrisadr\/wp-json\/wp\/v2\/posts\/124"}],"collection":[{"href":"https:\/\/blogs.gentoo.org\/chrisadr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.gentoo.org\/chrisadr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.gentoo.org\/chrisadr\/wp-json\/wp\/v2\/users\/169"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.gentoo.org\/chrisadr\/wp-json\/wp\/v2\/comments?post=124"}],"version-history":[{"count":2,"href":"https:\/\/blogs.gentoo.org\/chrisadr\/wp-json\/wp\/v2\/posts\/124\/revisions"}],"predecessor-version":[{"id":127,"href":"https:\/\/blogs.gentoo.org\/chrisadr\/wp-json\/wp\/v2\/posts\/124\/revisions\/127"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.gentoo.org\/chrisadr\/wp-json\/wp\/v2\/media\/125"}],"wp:attachment":[{"href":"https:\/\/blogs.gentoo.org\/chrisadr\/wp-json\/wp\/v2\/media?parent=124"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.gentoo.org\/chrisadr\/wp-json\/wp\/v2\/categories?post=124"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.gentoo.org\/chrisadr\/wp-json\/wp\/v2\/tags?post=124"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}