Linux, GNU, Kernel, Distro, colores.
Estoy dias estuve hablando con un conocido sobre "¿que Sistema Operativo ponerle a su portátil?".
Creo que algunas ideas le pueden servir a otras personas, así que aquí dejo mi colaboración.
Como siempre son mis ideas y si no estas de acuerdo puedes dejar tus comentarios.
* Equipo/Ordenador/Computadora. Hardware. Parte Física.
Conjunto de partes necesarias y básicas para hacer procesamiento digital de la información.
Básicamente una placa base/mother, CPU, RAM/Memoria, Disco, Teclado, mouse, monitor, cables...
Hay otras partes? si, claro... pendrive, impresora, placa de red, etc.etc...
* BIOS
Componente de firmware, código binario que se ejecuta cuando encendemos nuestro equipo. Está en lenguaje de bajo nivel para interactuar con el equipo.
Es lo primero que se ejecuta, permite cambiar la hora del reloj interno del equipo, agregar partes, verificar el disco, muestra un dibujito bonito con la marca del equipo, etc.
Se encarga de ver que dispositivos de almacenamiento tiene conectados y pasará el control de ejecución a cada uno de sos dispositivos conectados.
(cdrom, disco, pendrive, ethernet... etc)
Cada tantos meses suelen aparecer actualizaciones a ese "código", es recomendable actualizar el BIOS, el proceso es pasar unos 2 o 4 kb de un fichero a la zona de almacenamiento eprom (programable) del motherboard. (Placa central de nuestro equipo)
Las placas base tienen una zona donde se almacenan unos pocos datos de la configuración de hardware del equipo (EPROM), en cada arranque lo leen y verifican.
* Sistema Operativo.
Una ves que el BIOS encuentro el hardware le pasa el control a un dispositivo de almacenamiento, supongamos que es un disco (podría ser un Pendrive, cd. etc)
En ese dispositivo se tuvo que haber instalado antes un código BOOT LOADER en los primeros sectores del disco. El boot/loader/lilo/grub es un código sencillo que toma el control, busca particiones, verifica memoria, cpu y hace el "boot"/"patadón" al Kernel del Sistema Operativo.
Los sistemas operativos tienen Rings, que son capas aisladas que interactúan entre ellas, Ring 0 a Ring 3 (depende del S.O.).
* En Windows
Para los que tengan Windows esto ocurre casi sin ver nada, salvo que hayan arrancado en modo a prueba de fallos, donde irían viendo que cosas se van cargando.
El proceso "normal" que ocurre en Windows es que adenás de cargar el Sistema operativo, se cargan otros programas que corren sobre él como el sistema de gestión de ventanas, el explorador, etc.etc... hasta que nos aparece el puntero, pantalla gráfica, varios (o cientos) de servicios corriendo debajo.
* En Linux/Unix/OSX
Supongamos que tenemos Linux, comienza un proceso de carga del Kernel, verificación de componentes, carga de otras partes según los dispotivios que tengamos conectados. Hasta llegar a un punto donde el shell (o bash) acepte peticiones.
Este proceso es un poco mas largo y complicado, pero si estas leyendo esto piensa que carga una serie de programas que interactúan con el hardware en bajo nivel y van subiendo hasta que habilitan una interacción entre usuario y Sistema operativo mostrando un "prompt" ó cursor parpadeante.
Como mínimo se tuvo que cargar el Kernel, drivers para dispositivos físicos y algunos programas básicos para interacción con el hardware.
En Linux, podemos arrancar el S.O. y quedarnos con nuestra pantalla negra, texto y cursor parpadeante (bash/zsh) o podemos decirle que cargue el servidor gráfico (xorg) y un manejador de ventanas (gnome/kde/twm/otros). En los servidores donde se optimiza hasta el último pedacito de cada componente, se arranca en modo texto con unos pocos servicios corriendo, poca interacción con clientes y pocos engranajes dondo vueltas.
* Hardware reducido.
Un caso especial son los routers con dd-wrt/openwrt, Raspberry PI/Arduinos o similares. Corren distros mínimas preparadas para arrancar rápidamente, funcionalidad limitada y aplicaciones pequeñas diseñadas para usar poca memoria, pocos recursos, poca CPU y un hardware limitado.
Con un hardware mas sencillo y limitado se pueden correr sistemas operativos limitados, en el caso de un Router que no tiene teclado y mouse, no es necesario que el S.Operativo tenga los drivers para ese hardware y tampoco interrupciones para hacer lectura de esos componentes.
* Aplicación/Programa.
El fundamento de la informática, lineas de código que el sistema operativo puede ejecutar, con o sin interacción del usuario, con/sin salida de información por pantalla, con/sin comunicaciones mediante la red, etc.etc...
Digamos que sobre el kernel, todo lo demás son programas que hacen tareas, se pueden ejecutar, parar, interactuar. Sin embargo si paramos el kernel, nada podrá correr después, porque todo va arriba del Kernel.
* Programa fuente, interpretado y Compilado.
La funcionalidad básica de un equipo era poder programar que haga cosas, sea una suma de datos, hasta procesos avanzados como coordinar los procesos de una nave espacial.
Desde los orígenes de la era de la programación, se cambió mucho el proceso de "programar", inicialmente se programaba en código binario, hexadecimal, ensamblador o de muy bajo nivel. Algo que no es comprensible para casi nadie. (Excepto para esos Guru del Assembler).
Como era complicado, se "programaron" lenguajes de mas "nivel", es decir, más fáciles de usar. El mas importante de los orígenes fue el "C", que sirvió para programar otros componentes/servicios/programas para facilitarnos la vida, entre ellos se programaron "nuevos lenguajes de programación". Un concepto recursivo, programa lenguajes que programan lenguajes mas elaborados.
El concepto sencillo es que yo escribo órdenes para que un lenguaje las ejecute, (buscar "hello world" en Internet) el archivo que contiene mis líneas de código se llama "código fuente", lo puedo modificar las veces que quiera, es justamente el orígen.
Ver link. http://en.wikipedia.org/wiki/List_of_Hello_world_program_examples
Fuente Assembler
; Uses S-C Assembler variant.
; .or is origin
; .as is ASCII String
; .hs is Hex String
.or $300
main ldy #$00
.1 lda str,y
beq .2
jsr $fded ; ROM routine, COUT, y is preserved
iny
bne .1
.2 rts
str .as "HELLO WORLD"
.hs 0D00
Fuente Basic.
PRINT "Hello, world!"
* Un compilador.
Es un programa que pasa de ese código "fuente" a un código procesado con instrucciones de bajo nivel para que corra el sistema operativo. (ver ELF, exe, com, otros)
El programa generado se llama binario y es complicado entender que hace, son instrucciones en hexa, zonas de datos, etc.
* Un intérprete.
Es un híbrido entre fuente y compilado (perl, python, php), convierte el fuente a un código intermedio que se ejecutará al correrlo. Suelen hacerlo en tiempo real agregando una demora en el pseudo-compilado en el momento que queremos ejecutar el programa fuente.
Tienen los beneficios de poder tocar el fuente en todo momento y en cada corrida se utilizará el código nuevo.
* Driver.
Aplicación de bajo nivel que interactúa con el hardware y con el sistema operativo, conoce que enviar y recibir de un hardware y simplifica las comunicaciones entre el kernel y un hardware. El beneficio de ese Driver es que solo se carga en el sistema operativo los drivers de los dispositivos que tenemos conectados. Es mas eficiente cargar o descargar el driver de RAM si no lo necesitamos.
* Servicio/Daemon/demonio.
Un programa con una utilidad muy concreta y que corre interactuando directamente con el sistema operativo, muchas veces sin necesidad de interactuar con el usuario (humano).
Ejemplos son sendmail/apache/smtp/ntp/alsa.
* Orígenes de la informática masiva.
Por los 60 y hasta los 80, los equipos eran grandes, pocos en el mundo, grandes consumidores de electricidad, poco eficientes y administrados por grandes gobiernos.
Entre los 70 y 80 comenzó la idea de equipos mas pequeños, mas potentes, "equipos para el pueblo".
Los equipos, programas, manuales, expertos, cursos... todo se pagaba y mucho.
* Microinformática o Personal Computer.
Comenzaron a aparecer proyectos "para todos", de IBM, Tandy-Radio Shack, Apple I, Sinclair, Commodore, Casio... Grupos de ingenieros electrónicos y empresas comenzaron a hacer equipos pequeños, limitados, para las familias, transportables, para pequeñas empresas.
Un ejemplo fue Apple que diseño una placa base en su garage, lo vendía por unidades a personas, diseñaron un pequeño sistema operativo propio, luego programas como Basic, juegos...
* Los grandes equipos.
Seguían siendo caros, con sus sistemas operativos caros y complejos.
Cuenta la leyenda que Richard Stallman tenía problemas con un driver para una impresora que no funciona bien, habían pagado por él pero no funcionaba bien, demoraban muchas semanas en darle una solución y ese "problema" fue el punto de partida de su idea GNU (GNU is not Unix), cuentan que él mismo prorgamó el driver, lo repartía gratis a otros que lo necesitaban y ademas de tener un odio por ese proveedor generó una movida aún vigente.
Ver página https://www.gnu.org/
* GNU.
Movimiento creado en 1984 para diseñar un sistema operativo completo que no requiera pagar para obtenerlo, para actualizarlo, para arreglo de bugs, pagos anuales, etc.etc. Todo un concepto "cooperativo". Todos los que usamos Linux debemos estar agradecidos por su bronca y por su voluntad para luchar contra ese sistema establecido por las grandes empresas, gracias a la evolución hoy tenemos Linux gratuito. Las partes serían, Kernel, boot, lenguajes de programación, drivers, aplicaciones.
Tal como declara GNU, "Free Software" es un concepto donde se puede correr, copiar, distribuir, estudiar, auditar, cambiar y mejorar un programa. Justamente todo lo que no se podía hacer hasta ese momento con los Sistemas Operativos existentes.
* Linux
Intentando ser exacto, Linux es un Kernel diseñado en 1992 por Linus Torvalds de una manera particular, intentando copiar lo que hacía Unix pero con la colaboración de cientos/miles de programadores en el mundo y con la idea de tener un Kernel "libre".
La aparición de Linux junto a las ideas GNU, permitieron la masificación de Linux en el mundo. Todos los programadores podían colaborar, obtenían un kernel básico que podía mejorarse, cambiarse, regalarse, no habia que pagar licencias de uso, de compra, de actualización, etc.etc....
Aparecieron programadores que fueron fabricando componentes complementarios del Kernel, un ejemplo es gnuc, Bash, ifconfig, shutdown y miles mas (mira en /bin o /sbin y verás unos cuantos). Uno de los primeros componentes fue un compilador de C GNU, que permitió la programación del resto de programas, drivers y componentes que hoy en dia tenemos.
Ver página con los productos GNU existentes.
https://www.gnu.org/software/software.html
Como se cuenta en "Catedral y el Bazaar", teniendo una base para trabajar libremente (Kernel) y un compilador, cada programador o grupo de coders fueron programando aplicaciones según sus necesidades, basándose en nombres y costumbres de Unix se rearmó un sistema operativo completo, boot, kernel, compilador, prorgamas, interfaz gráfica, etc.
Recomiendo leer ese libro, se aprende mucho de la informática "free" y de conceptos como "Comunidad y colaboración", de "evolución"... Mucho de varias partes.
Richard Stallman insiste en GNU/Linux, porque para él primero apareció el concepto GNU, luego el Kernel Linux y luego el resto de los ladrillos. GNU dice que el programa se debe entregar con sus fuentes para que todos puedan verlo, auditarlo, modificarlo, compilarlo, distribuirlo nuevamente.
* Distribuciones.
Inicialmente uno, dos y hasta cinco grupos en paralelo fueron armando "distribuciones", un compilado de Kernel, boot loader, instaladores, drivers, herramientas, servidores gráficos, aplicaciones texto, gráficas y demas partes. Todo metido en diskettes o CD/DVD, se vendían, se enviaban por correo (no había internet o no era rápido).
Las primeras que yo he visto fueron Debian, RedHat y Slackware. Por esa época apareció FreeBSD con las mismas ideas (UNIX).
Esas distribuciones permitían una instalación "relativamente" fácil en equipos PC comunes, no requerían un hardware propietario sinó que se instalaban en micros Intel, Amd, Risc. Sin importarle la marca y modelo del proveedor de hardware.
Con el tiempo fueron apareciendo miles de distros... todos podemos hacernos una distro a nuestro gusto.
Basta mirar en www.distrowatch.com.
Hay familias/ramas, creo que hay 3 o 4 ramas centrales y luego muchas variantes, por poner un ejemplo:
Debian - Ubuntu - Xubuntu, otros.
RedHat - Fedora - otros.
Slackware - otros.
LFS - Linux desde la nada. Una distro que no tiene instalador, el usuario va instalando paso a paso los componentes, es fundamental para entender las partes de un Sistema Operativo y de una Distro.
* Servidor gráfico. Manejador de ventanas. Bibliotecas Gráficas.
Existen varios "gestores" de ventanas gráficos, requieren un servidor gráfico corriendo de fondo (xorg, xfreex86, etc.) y hacen la vida mas fácil al usuario del equipo. Esos gestores ejecutan aplicaciones gráficas, utilizan bibliotecas gráficas genéricas y las aplicaciones (gedit) las usan e interactúan con ellas.
Dos grandes ejemplos son: Gnome y KDE. Gnome usa GTK+ y KDE usa QT.
Mientras que en un Windows/OSX esa separación no existe o no es tan evidente, en Linux está claramente separada y se puede instalar o no.
Las distribuciones permiten cargar ambas librerías gráficas, ambos entornos y que un aplicativo pueda usar cualquiera de los entornos gráficos cargando las bibliotecas gráficas que necesita.
Como todos los componentes en ese lado del mundo (Linux), existen mas de una alternativa para cada taréa, diferentes grupos programaron productos similares para hacer taréas similares. Pensando en Darwin esta diversidad hace que haya varias especies conviviendo y si una muere las demas se podrán ver afectadas o beneficiadas, pero continuarán sus vidas y continuarán evolucionando.
Mirando las "distros" desde el Debian 2.0 o Redhat 5.0 hasta estos dias, su evolución fue enorme.
Algunas especies se quedaron en el camino, un ejemplo fue Conectiva, por diferentes razones la gente no lo aceptó y dejó de usarse, al tener tantas distros "compatibles" los usuarios se pudieron pasar a otra distro y continuar sus actividades.
Evolución continua gracias a programadores.
* Libre y Propietario.
Luego de entender GNU, se ven claramente las diferencias con Microsoft y Apple sobre como evolucionar en la informática.
Linux = Una comunidad evolucionando el producto y ofreciéndolo gratis.
Otros = Grandes empresas, desarrollando un producto y obteniendo dinero vendiéndolo. Sin permitir que evolucione.
Si un programa es GNU me permite verlo, auditarlo, leer el fuente, cambiarlo, compilardo, usarlo, regalarlo.
¿Si soy panadero, eso de que me sirve?
Hay cientos o miles de programadores en el mundo que pueden ver el código del "bash" (como ejemplo) y aunque yo no sepa como auditarlo o modificarlo, ellos SI lo saben y como también lo usan, querrán mejorarlo para no tener ellos mismos un problema, yo me beneficio de esos cambios/evolución sin tener que pagar por ello.
Mañana si hago un programa Free, lo puedo distribuir libremente, otros pueden mejorarlo y todos lo hacemos evolucionar obteniendo un beneficio para todos nosotros y para la comunidad en general, que puede bajarlo, usarlo y enviar los problemas que encuentra, y por supuesto, algunos programadores podrán hacer productos similares al mio, el mercado dirá cual prefiere.
Por favor, leer este link
https://www.gnu.org/gnu/linux-and-gnu.es.html
* gNewSense, Debian o Ubuntu.
Como ejemplo, estas distros son "similares" y comparten el mismo sistema de actualización de paquetes, repositorios con las últimas versiones de programas, su kernel, etc.
Personalmente pienso que GNU es un concepto que se debe "intentar alcanzar" pero mientras hay que "usar lo que haya", no debe ser "demasido extremo".
La fundación GNU pide que llamemos GNU/Linux a aquellas distros que respetan la filosofía GNU y usen el Kernel Linux y todos sus componentes son GNU.
Para GNU, gNewSense es una distro GNU/Linux porque usa el kernel Linux y todos los demás programas son de tipo GNU, no admite en su repositorio de programas productos que NO SEAN GNU.
Eso quiere decir que quizas una impresora con drivers propietarios sin fuentes y donde nadie haya hecho un driver GNU no funcioná.
Al no admitir programas NO-GNU está empujando a la sociedad para que genere programas GNU. Una de las premisas de la Fundación GNU.
* ¿ Debian no es GNU ?
Para la fundación GNU, Debian no es totalmente GNU porque permite incluir componentes que NO SEAN GNU.
Aunque la mayoría de los programas que funcionan en Debian son GNU, admite drivers, firmware, binarios, APP comerciales sin fuentes y otros componentes.
Al instalar DEBIAN se puede indicar que "solamente" querré componentes oficiales GNU.
Pero para la Fundación GNU eso no alcanza, porque no fomenta que los usuarios dejen de usar productos comerciales.
En este punto, o usas únicamente productos GNU o si alguno no lo es, ya tu instalación no es totalmente GNU.
* ¿ Y Ubuntu ?
Ubuntu creo que hizo un trabajo titánico, permitiendo que millones de personas que no eran informáticos usaran Linux, una distro relativamente reciente, fácil de instalar, de usar, intuitiva, bonita, admite muchisimo hardware de todo tipo, admite drivers/firmware propietarios, etc. Fue una nueva revolución en Sistemas Opertivos y en como instalarlos.
Su contribución al mundo Linux fue y es enorme, pero para la GNU.org no se considera GNU, porque tiene una política aún mas relajada aún que Debian.
Solo reconocen Distros GNU a: http://www.gnu.org/distros/free-distros.html
* ¿ Debo usar gNewSense, Debian o Ubuntu ? o otra ? ¿ Que pongo en mi equipo ?
¿Sentarte a comer y tener una carta de cientos de páginas es un problema?
Si lo es para tí, instala Ubuntu.
Si esa carta con diferentes platos te permite comer algo distinto cada dia, descubrir sabores, encontrar restaurantes que lo preparan mejor, leer la receta y poder hacerla en tu casa, darsela a tu vecina, preparar la receta, llevarla hecha a tus amigos para que la prueben, y hasta cobrarles si quieres.
Tienes miles de distros para elejir.
Dependiendo del hardware que tengas, de tu uso diario del equipo, de lo que busques, de el gusto por los colores, puedes instalar cualquier distro Linux que quieras.
En casi todas ellas tendrás una comunidad de desarrolladores atras mejorando el producto, casi a diario. Programadores expertos en seguridad, en optimización, en interfaces gráficas, en arte, en métodos científicos....
Si usas Linux no tendrás que pagar por los parches, por usar, distribuir, regalar, prestar, modificar los programas que necesitas/usas a diario.
* ¿ Porqué no usar Windows o OSX ?
Ver siguiente post.
http://itprofesionales.blogspot.com/2014/11/linux-gnu-ii.html
* Mi recomendación es usar Distros Linux y tratar de que todos lo usen. Sin dudas.
Comentarios
Publicar un comentario