Un tamaño no se ajusta a todos Por qué el software no es universalmente compatible
Acaba de descargar una actualización repleta de funciones para su aplicación de código abierto favorita. Todo funciona bien y lo usa en sus otros dispositivos, por lo que también es hora de extenderlo a esos dispositivos..
Excepto que su nueva y brillante computadora portátil con Linux no es compatible con su paquete de instalación de Windows. ¿Qué hay de tu tableta Android? iPhone? PS4? ¿Por qué no puedes simplemente tomar ese pedazo de software y usarlo donde quieras? Vamos a explorar algunas barreras diferentes para el sueño de “comprar una vez, correr en cualquier lugar.”
Desarrollo de software y arquitectura de SO
Comprender por qué el software no funciona en los sistemas operativos requiere un poco (solo un poco, lo prometo) conocimiento de cómo se hace el software.
El proceso de desarrollo de software
En un flujo de desarrollo de software muy básico para computadoras de escritorio, servidores y dispositivos móviles (es decir, no Programación web vs. Desarrollo web: ¿Cuál es la diferencia? Programación vs. Desarrollo web: ¿Cuál es la diferencia? Podría pensar que los programadores de aplicaciones y los desarrolladores web hacen el mismo trabajo , pero eso está lejos de la verdad. Aquí están las diferencias clave entre los programadores y los desarrolladores web. Leer más), un programador:
- Escriba algunos código en uno o más archivos.
- Compilar el código en algo que la computadora puede ejecutar.
- Prueba para asegurarse de que el programa funciona como se espera.
- Empaquetar y distribuir / desplegar El software.
Es una combinación de los pasos primero y segundo que nos concierne aquí. El proceso de compilando El software, o convertirlo de código en unos y ceros que una computadora entiende (lenguaje de máquina) es complejo. No lo abordaremos con gran detalle, pero es útil comprender a un alto nivel lo que sucede.
Arquitectura OS
Un punto importante a comprender es que un sistema operativo no es una entidad única. Más bien, se compone de capas de software.
Kernels del sistema operativo
Un sistema operativo de núcleo Es responsable de comunicarse con el hardware de la computadora. El software comunica sus comandos al kernel, que a su vez emite comandos al hardware para (por ejemplo) leer un archivo del disco duro o dibujar una ventana en la pantalla. Básicamente, coordina toda la información (ya sea datos almacenados, cálculos o entradas del usuario) entre el hardware y varias piezas de software. El núcleo hace que toda esta funcionalidad esté disponible para el software a través de llamadas al sistema.
El kernel de cada sistema operativo implementará las llamadas al sistema de manera diferente, en función de cuáles están disponibles, cómo se llaman o qué opciones toman. Como resultado, el software debe tener en cuenta las llamadas al sistema admitidas por el núcleo de cada sistema operativo al que se dirige. La llamada al sistema que utiliza para enviar datos a la GPU en Linux puede tener un nombre diferente, una lista de la información que debe proporcionar o ambos en Windows. Esa llamada exacta ni siquiera puede estar allí en absoluto.
Bibliotecas de sistemas
En muchos casos, el software no llama directamente al kernel. En su lugar, llama a bibliotecas de sistemas, o colecciones de funciones básicas. Las bibliotecas existen, por lo que (por ejemplo) todos y cada uno de los programas que guardan archivos en el disco duro no necesitan escribir una función para hacerlo. En su lugar, simplemente vínculos a Una biblioteca del sistema y utiliza una función existente. La biblioteca GLibC para Linux es un buen ejemplo, al igual que los archivos .DLL en la API de Win32 o el contenido de un directorio de Mac / Sistema / Biblioteca Cómo acceder a la carpeta de la biblioteca de OS X y por qué es práctico Cómo acceder a la biblioteca de OS X Carpeta y por qué es práctico La mayoría de las carpetas de la biblioteca OS X es mejor dejarlas en paz, pero es útil conocer su camino dentro y alrededor de la biblioteca del usuario. Lee mas .
Las bibliotecas de sistemas actúan como una especie de traductor entre aplicaciones y el núcleo para tareas rutinarias. Aplicaciones hacen llamadas a funciones a estas bibliotecas, que manejan muchos de los detalles de bajo nivel. También pueden hacer llamadas al sistema del kernel para mayor comodidad. Como habrá adivinado, esto significa que estas bibliotecas están escritas para un kernel en particular y, por lo tanto, no se pueden usar en sistemas operativos con kernels diferentes..
Cabeceras de ejecución del sistema operativo
El último obstáculo para el software universal es el formato de archivos ejecutables para los sistemas operativos. Un sistema operativo espera que los archivos que se ejecutan sigan un formato de archivo binario particular. Todo lo que necesita saber sobre los formatos de archivo y sus propiedades Todo lo que necesita saber sobre los formatos de archivo y sus propiedades Utilizamos indistintamente la palabra archivo: música, imagen, hoja de cálculo, presentación de diapositivas , y así. ¿Pero qué hace que un archivo sea un "archivo"? Intentemos y entendamos esta parte fundamental de la computación. Lee mas . Por ejemplo, los archivos de formato ejecutable y enlazable (ELF) que se ejecutan en sistemas operativos como Linux y FreeBSD deben especificar ciertas propiedades del archivo en ciertos bytes, como se muestra en la siguiente imagen.
los interfaz binaria de aplicación (ABI) mostrado capaz es de particular importancia. Una combinación de las llamadas disponibles desde el procesador, el kernel y las bibliotecas del sistema, un ABI es similar a un interfaz de programación de aplicaciones (API) en que define cómo dos programas se comunican entre sí. Pero la API es algo que usan los programadores (humanos) en el código fuente para indicar dos piezas de software debería hablar entre sí. El ABI es lo que realmente les permite hacerlo una vez que el software se compila y ejecuta. Cada sistema operativo implementa un ABI particular, que puede o no cambiar entre versiones de ese mismo sistema operativo.
En general, los sistemas operativos implementan su propio ABI, determinado por una combinación del tipo de procesador, el núcleo y cualquier biblioteca de sistema estándar. Pero a veces un sistema operativo implementará más de uno. FreeBSD es compatible con los binarios de Linux, por ejemplo, porque proporciona una ABI de Linux como complemento al kernel de FreeBSD (en lugar del kernel de Linux). Esto es diferente de los programas de virtualización ¿Qué es una máquina virtual? Todo lo que necesitas saber ¿Qué es una máquina virtual? Todo lo que necesita saber Las máquinas virtuales le permiten ejecutar otros sistemas operativos en su computadora actual. Esto es lo que debes saber sobre ellos. Lea más, como VMWare o VirtualBox, que usan software para simular una máquina completa (hardware y todo). Como resultado, este tipo de compatibilidad ABI es más rápido, pero mucho más esfuerzo para mantener. Esta es la razón por la que es raro, aunque Microsoft recientemente vio el valor Ubuntu ahora está disponible en la Tienda Windows Ubuntu está ahora disponible en la Tienda Windows Windows Insiders ahora puede descargar e instalar Ubuntu en Windows 10. Esto une a Linux y Windows en una unión impía pocos imaginaron que vivirían lo suficiente como para ser testigos. Leer más al hacerlo.
Excepción: software interpretado
Sobre la base de lo anterior, hemos aprendido que los desarrolladores escriben software para un solo tipo de sistema de destino. Excepto cuando no lo hacen. Hay muchas aplicaciones que puede descargar y ejecutar en una Mac, luego copiar y ejecutar en Windows, y tal vez incluso copiar de nuevo y ejecutar en Linux sin problemas. Cómo es esto posible?
Estaba acostado hasta ahora?
Como resultado, hay una categoría de software que se ve en la superficie como si fuera solo “corre por todas partes.” Puede descargarlo y ejecutarlo en cualquier plataforma compatible: la palabra clave es “soportado.” De hecho, está descargando el código fuente de la aplicación, mientras que otra aplicación (la Interprete) es una especie de ejecutar el código fuente directamente en tiempo real. Esto es algo así como una simplificación excesiva, así que veamos exactamente cómo funciona con un par de idiomas..
Java
Cuando se lanzó Java por primera vez, su promesa era (literalmente) “escribe una vez, corre a cualquier lugar.” La idea era crear aplicaciones utilizando las funciones de Java para guardar archivos, hacer cálculos o crear una ventana de aplicación. Entonces un Java Runtime Enviornment (JRE) para cada plataforma de computadora compatible ejecutaría el código y los traduciría a funciones nativas del sistema operativo. El truco para Java, entonces, es que no se ejecuta “directamente” en el sistema operativo. Se ejecuta en una parte del JRE llamada máquina virtual de Java y eso es lo que se ejecuta en el sistema operativo.
Al insertar esta capa de software adicional entre la aplicación y el sistema operativo, Java le permite concentrarse en un conjunto de funciones que es igual en todos los sistemas operativos. Le dice a Java lo que quiere hacer y deja que la JVM de su sistema se preocupe por cómo hacerlo realmente. La siguiente imagen muestra esto en acción, donde el Java Desktop Application Framework de JIDE Software muestra la misma aplicación para Mac (arriba), Windows (centro izquierda), “Java puro” (centro-derecha), y Linux (abajo).
Los programas de Java no son precisamente “compilar” ellos mismos en tiempo real. Más bien, el compilador de Java los convertirá en “bytecode.” Puedes pensar en el bytecode como un programa a medias. Cuando el desarrollador lanza la aplicación, se compila tanto como puede ser sin saber en qué sistema operativo se va a ejecutar. Cuando lo lances, la JVM “hornéalo el resto del camino” Para adaptarse a las funciones particulares del sistema operativo host..
Pitón
Un lenguaje popular interpretado es Python 5 razones por las que la programación en Python no es inútil 5 razones por las que la programación en Python no es inútil en Python: o lo amas o lo odias. Incluso puedes moverte de un extremo a otro como un péndulo. En cualquier caso, Python es un lenguaje sobre el que es difícil ser ambivalente. Lee mas . Cuando ejecuta una secuencia de comandos de Python, el intérprete de Python traducirá el código en instrucciones para el sistema operativo. También puede funcionar de manera similar a Java: cuando “importar” el código desde fuera de su aplicación se compila a bytecode la primera vez que se ejecuta. Luego, el intérprete sabrá si, en ejecuciones posteriores, el código original ha cambiado, momento en el que lo volverá a compilar en un nuevo código de bytes..
Un subproducto fresco de este “Bajo demanda” ejecutar es que puede utilizar el intérprete para desarrollar sus scripts de forma interactiva. Simplemente escribiendo “pitón” en la línea de comandos, iniciará el intérprete y podrá ejecutar el código y ver los resultados inmediatamente..
Esto significa que los desarrolladores pueden jugar y modificar cosas “vivir.” Luego, una vez que una línea de código hace lo que quiere, cópiela y péguela en un archivo de script (que es mucho más eficiente que el código). “código de compilación de prueba” ciclo que los programadores de lenguaje no interpretado tienen que hacer).
Incluso cuando el software es el mismo, probablemente no lo sea
Desafortunadamente para los usuarios, la industria de la tecnología no ha desarrollado una verdadera “universal” formato. Y puede que nunca lo haga. La introducción de estos tipos de estándares a menudo resulta en una “Mínimo común denominador” Solución, con concesiones para obtener la aprobación de todos..
¿Qué piensas? ¿Preferirías tener un software universalmente compatible, incluso si eso significaba que no era tan bueno? ¿O está de acuerdo con el sistema operativo que está utilizando y no tiene interés en las aplicaciones de otras plataformas? Háganos saber más abajo en los comentarios.!
Créditos de imagen: Masterchief_Productions / Shutterstock
Explore más acerca de: Sistema de archivos, Instalar software, Sistemas operativos.