Vamos a hablar de cómo funciona Windows y por qué un programa de Windows no se puede ejecutar en Linux okay ¿Que es un programa exactamente? Bueno, pues un programa es una serie de líneas de código que ejecuta el procesador. El procesador es una especie de calculadora que puede hacer operaciones matemáticas, lógicas, puede mover datos en memoria y un programa simplemente es una receta, una línea de instrucciones que le dice al procesador cuáles son las tareas que tiene que hacer, pero el procesador a pesar de ser el cerebro de nuestro ordenador realmente hay muy pocas cosas que sabe hacer para lo mucho que hacemos con nuestro ordenador hoy en día, puede cargar instrucciones, mover datos en memoria, hacer operaciones aritméticas y lógicas, sumas, restas, divisiones, alguna cosa más, pero un ordenador es mucho más que una calculadora, tiene pantalla, tiene altavoces, puedes guardar archivos, puedes imprimir, tenemos una memoria donde se guardan datos, no, por ejemplo las variables de un programa y cada programa tiene su propio espacio dentro del ordenador. Un programa no puede ver lo que está haciendo el otro, pero es que además, en un ordenador moderno tenemos varios programas que están corriendo al mismo tiempo, ejecutándose a la vez y todos se están peleando por utilizar la CPU al mismo tiempo. También los ordenadores de hoy en día tienen usuarios, no todos los usuarios tienen los mismos permisos, no todos pueden hacer las mismas cosas, no todos pueden acceder a los mismos recursos ni a los mismos archivos. Archivos otro concepto con el que conviven los programas, tenemos discos duros, tenemos ficheros, tenemos carpetas, tenemos permisos, unidades, formatos, unidades externas, incluso tenemos red, tenemos internet, un teclado, una cámara, una tarjeta gráfica, vamos, un montón de recursos que van más allá de lo que simplemente puede hacer el procesador de forma tradicional y todos estos recursos del ordenador son tan complejos que si tuviéramos que manejarlos de forma directa, cada programa que haríamos sería súper complejo, de hecho así se hacían las cosas al principio, pero en un momento se vio muy claro que necesitábamos un programa que simplificase todo.
Ahí, es donde entra el sistema operativo y en concreto el sistema operativo tiene una pieza central, el kernel. El kernel es el que se encarga de llevar timers, manejar los recursos del procesador, dividir los programas que se están ejecutando en procesos, crear una jerarquía de procesos, decidir quién tiene acceso a que, dar acceso al disco duro, permitir crear un archivo, acceder al teclado, o sea todos los recursos del ordenador los maneja el kernel. El kernel es el que le da permiso y acceso a cualquier programa para hacer cualquier cosa. Además, el kernel es el que maneja la complejidad, el que sabe hablar con todos estos recursos y en el núcleo de Windows tenemos un Kernel, en Linux también tenemos un Kernel y cada uno de estos Kernels es totalmente distinto. Cada uno tiene su historia, cada uno maneja las cosas de una manera distinta, aunque al final del día, pues hacen lo mismo, no, los dos cumplen esa función dentro del sistema operativo. Cuando nosotros ejecutamos un programa en un ordenador o un móvil o cualquier dispositivo, las órdenes se ejecutan directamente en el procesador pero ciertos puntos del programa que hace el peticiones especiales a todos estos recursos que van más allá de cálculos sencillos,
pasan por el sistema operativo y tienen que pasar también por el Kernel para que puedas entender esto mucho mejor. Imaginate que el Kernel es el director, él es el que se encarga de manejar todos los recursos más preciados de tu ordenador. Él decide quien los usa, cuando, y que puede hacer. Y este director tiene alma de funcionario, tú no puedes hablar con él de forma directa, ni de cualquier manera. Necesita seguir protocolos muy estrictos, tienes que rellenar unos formularios muy complicados, nivel Hacienda, que si el modelo 111 y cosas por el estilo, vale, cosas que muy poca gente entiende. Entonces, que necesita el programa para poder hablar con el director. Bueno, pues necesitas un gestor, una gestoría que te facilite estos trámites y que ellos son los que se encargan luego de comunicar con el director, que es al final este organismo público súpercomplicado.
El gestor es un tío que habla un idioma pues más sencillo, no, entiende lo que tú quieres y se encarga de preparar la burocracia para que la reciba el Kernel y las cosas salgan adelante. Bueno pues en esta imagen mental que nos acabamos de de crear, tenemos los recursos del ordenador, el director por encima, que sería nuestro Kernel y luego tenemos la gestoría, que serían las librerías de sistema. Las librerías de sistemas son funciones a las que los programas van a llamar y para cada cosa que quieras que haga tu sistema hay una llamada especial que tienes que hacer a estas librerías, por ejemplo imagínate que eres un programador, estás escribiendo un programa en C y quieres abrir un archivo en modo escritura. Pues lo que escribirías sería un código como este que estás viendo en pantalla, tranquilo, no hace falta que lo entiendas. Vale, simplemente que sepas que con este F open nuevo archivo, estarías creando un nuevo archivo en modo escritura llamado nuevo punto txt en programación.Vale, bueno pues este es el código fuente, es el código de tu programa, luego cuando tú quieres ejecutarlo, lo compilas, lo conviertes en un punto exe, en un ejecutable de Windows y cuando ejecutes ese programa y el programa llegue a esta línea concreta
lo que ocurrirá por debajo y tú no lo verás pero bueno lo que ocurrirá a nivel interno de sistema es que tu programa hablará con el gestor para pedirle que cree este archivo cómo se haría esto bueno pues de esta manera con este código que están viendo en pantalla es un ejemplo del mensaje que le enviaría tu programita al gestor para pedirle que cree el archivo el gestor recibe este mensaje y empieza a procesarlo a deducir cosas a preparar un poco el terreno para enviar el mensaje final al director al kernel que es el que lo tiene que aprobar y el que lo tiene que validar el mensaje que se le envía al kernel sería algo como esto esto es lo que se conoce como una llamada de sistema como veis el código es mucho más complejo esto es un ejemplo simplemente porque Windows realmente no nos cuenta lo que va a hacer sus eh sus librerías internas vale secreto es confidencial Windows simplemente funciona pero el código fuente es privado y nadie que no trabaje en Microsoft con un contrato de confidencialidad firmado lo puede ver por lo cual nosotros imaginamos que lo que ocurre por dentro tiene que ser algo así por cierto dato para los más curiosos si queréis ver dónde está el kernel de Windows o vais a hacer Windows system 32 y este archivo que pone NT o skrn punto exe bueno pues este es el kernel de Windows y los gestores todos estos mensajeros que hacen de intermediarios entre el programa y kernet etc son las DLLs de Windows es la libreria digamos no todas las DLL son librerías de sistema vale porque todas las librerías en Windows son DLL pero hay ciertas DLLs que vienen instaladas ya con Windows que son todos estos gestores que luego hablan con este programita tan especial. Bueno, pues todo esto evidentemente también existe en Linux solo que en linux no son DLLs y son punto SO. Los puntos SO, son shared objects. Si los DLL Dynamic Link librarys que son los nombres que le puso Microsoft a sus librerías en Linux son .so .shared object estas librerías realmente sirven para dar superpoderes a un programa, Vale, le enseñan cómo hacer las cosas. Por ejemplo puedes usar una librería para que tu programa aprenda a leer archivos .jpg para reproducir vídeos en .mp4 pero también se usan como librerías estandar para poder interactuar con el Kernel de linux igual que pasa en Windows pero Linux hay una peculiaridad vale mientras que en Windows todo esto es secreto, está ofuscado y es un bloque que no puedes modificar, en Linux la cosa cambia. Linux es Open Source todo lo que hace el sistema operativo se puede ver se puede leer el código de todo y además Linux sí que permite que un programa cualquiera pueda hablar directamente con el Kernel y mandarle un mensaje o sea hacer una syscall lo que pasa que no es habitual no es recomendable y nadie lo hace vale solo lo haces no