Un tamaño no sirve para todos Por qué el software no es universalmente compatible

  • Owen Little
  • 0
  • 4261
  • 671
Anuncio

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 es hora de implementarlo también..

Excepto que su nueva y brillante computadora portátil Linux no es compatible con su paquete de instalación de Windows. ¿Qué tal tu tableta Android? iPhone? PS4? ¿Por qué no puedes simplemente tomar ese software y usarlo donde quieras? Exploremos 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) 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 versus desarrollo web: ¿Cuál es la diferencia? Programación versus desarrollo web: ¿Cuál es la diferencia?) Puede 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 programadores y desarrolladores web), un programador:

  1. Escribe algunos código en uno o más archivos.
  2. Compilar el código en algo que la computadora puede ejecutar.
  3. Prueba para asegurarse de que el programa funcione como se esperaba.
  4. Empaquetar y distribuir / desplegar El software.

Es una combinación del primer y segundo paso que nos concierne aquí. El proceso de compilando 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 alto nivel lo que sucede.

Arquitectura del sistema operativo

Un punto importante a entender es que un sistema operativo no es una sola entidad. Más bien, está compuesto de capas de software.

Kernels del sistema operativo

Un sistema operativo núcleo es responsable de comunicarse con el hardware de la computadora. El software comunica sus comandos al núcleo, 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 sean 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.

Crédito de la imagen: Wikimedia Commons

El kernel de cada sistema operativo implementará las llamadas al sistema de manera diferente, en términos 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 información que debe proporcionar o ambas en Windows. Es posible que esa llamada exacta ni siquiera esté allí.

Bibliotecas del sistema

En muchos casos, el software no llama directamente al núcleo. En cambio, llama a bibliotecas del sistema, o colecciones de funciones básicas. Las bibliotecas existen para que (por ejemplo) todos y cada uno de los programas que guardan archivos en el disco duro no necesiten escribir una función para hacerlo. En cambio, simplemente vínculos a una biblioteca del sistema y usa una función existente. La biblioteca GLibC para Linux es un excelente ejemplo, al igual que los archivos .DLL en la API Win32 o el contenido de un directorio Mac / System / Library Cómo acceder a la carpeta de la biblioteca OS X y por qué es útil Cómo acceder a la biblioteca OS X Carpeta y por qué es útil La mayoría de las carpetas de la biblioteca de OS X es mejor dejarlas solas, pero es útil conocer su camino dentro y alrededor de la biblioteca de usuario. .

Crédito de imagen: ScottXW a través de Wikimedia Commons

Las bibliotecas del sistema actúan como una especie de traductor entre las aplicaciones y el núcleo para las tareas de rutina. Las aplicaciones hacen llamadas a funciones a estas bibliotecas, que manejan muchos de los detalles de bajo nivel. También pueden hacer llamadas del sistema al kernel por conveniencia. Como habrás adivinado, esto significa que estas bibliotecas están escritas para un núcleo en particular y, por lo tanto, no se pueden usar en sistemas operativos con diferentes núcleos..

Encabezados 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 ejecuta 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 el archivo de palabra de manera intercambiable: música, imagen, hoja de cálculo, presentación de diapositivas , y así. Pero, de todos modos, ¿qué hace que un archivo sea un "archivo"? Probemos y comprendamos esta parte fundamental de la informática. . 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 imagen a continuación.

los interfaz binaria de aplicación (ABI) se muestra capaz es de particular importancia. Una combinación de las llamadas disponibles desde el procesador, el núcleo 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 se 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 tiene soporte para binarios de Linux, por ejemplo, porque proporciona un ABI de Linux como complemento del 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 necesita 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. como VMWare o VirtualBox, que utilizan software para simular una máquina completa (hardware y todo). Como resultado, este tipo de compatibilidad ABI es más rápido, pero requiere mucho más esfuerzo para mantenerlo. Es por eso que es raro, aunque Microsoft vio recientemente el valor de Ubuntu ya está disponible en la tienda de Windows Ubuntu ya está disponible en la tienda de 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 imaginaban que vivirían lo suficiente para presenciar. al hacerlo.

Excepción: software interpretado

Con base en 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 nuevamente y ejecutar en Linux sin problemas. Cómo es esto posible?

Estaba mintiendo hasta ahora?

Como resultado, hay una categoría de software que se ve en la superficie como si simplemente “corre por todos lados.” 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 como ejecutar el código fuente directamente en tiempo real. Esto es una simplificación excesiva, así que veamos exactamente cómo funciona esto con un par de idiomas.

Java

Cuando Java se lanzó por primera vez, su promesa fue (literalmente) “escribe una vez, corre a cualquier lugar.” La idea era crear aplicaciones utilizando funciones Java para guardar archivos, hacer cálculos o crear una ventana de aplicación. Entonces un Entorno de tiempo de ejecución de Java (JRE) para cada plataforma informática compatible se ejecutaría el código y se traduciría a las 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 centrarse 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 imagen a continuación muestra esto en acción, donde el Marco de aplicaciones de escritorio Java de JIDE Software muestra la misma aplicación para Mac (arriba), Windows (centro-izquierda), “Java puro” (centro-derecha) y Linux (abajo).

Crédito de imagen: Software JIDE

Los programas Java no lo hacen con precisión “compilar” ellos mismos en tiempo real. Más bien, el compilador de Java los convertirá en “bytecode.” Puede pensar en bytecode como un programa a medio hacer. Cuando el desarrollador lanza la aplicación, se compila tanto como puede sin saber en qué sistema operativo se ejecutará. Cuando realmente lo inicies, la JVM “hornear el resto del camino” para adaptarse a las funciones particulares del sistema operativo host.

Pitón

Un lenguaje interpretado popular es Python 5 razones por las que la programación de Python no es inútil 5 razones por las que la programación de Python no es inútil Python: o lo amas o lo odias. Incluso puede balancearse de un extremo al otro como un péndulo. De todos modos, Python es un lenguaje difícil de ser ambivalente. . Cuando ejecuta un script 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 externo a su aplicación se compila en 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 cual lo volverá a compilar a un nuevo código de bytes.

Un subproducto genial de esto “Bajo demanda” ejecutar es que puedes usar el intérprete para desarrollar tus scripts interactivamente. Simplemente escribiendo “pitón” en la línea de comandos, iniciará el intérprete y podrá ejecutar el código y ver los resultados de inmediato..

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 “prueba de compilación de código” ciclo que los programadores de idiomas no interpretados tienen que hacer).

Incluso cuando el software es el mismo, probablemente no lo sea

Desafortunadamente para los usuarios, la industria tecnológica no ha desarrollado un verdadero “universal” formato. Y puede que nunca lo haga. La introducción de este tipo 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 significara que no es tan bueno? ¿O estás de acuerdo con el sistema operativo que estás utilizando y no te interesan las aplicaciones de otras plataformas? Háganos saber a continuación en los comentarios!

Créditos de imagen: Masterchief_Productions / Shutterstock




Nadie ha comentado sobre este artículo todavía.

Sobre tecnología moderna, simple y asequible.
Tu guía en el mundo de la tecnología moderna. Aprenda a usar las tecnologías y los dispositivos que nos rodean todos los días y aprenda a descubrir cosas interesantes en Internet.