Anuncio

Acaba de descargar una actualización repleta de funciones en 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 tomar ese software y usarlo donde quieras? Exploremos algunas barreras diferentes al sueño de "comprar una vez, correr a 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 (p. Ej. no web Programación vs. 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. Estas son las diferencias clave entre programadores y desarrolladores web.

instagram viewer
Lee mas ), 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.
proceso de desarrollo de compatibilidad de software os

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, se compone 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.

software básico de compatibilidad del núcleo
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 enlaces 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 del directorio / Sistema / Biblioteca de una Mac Cómo acceder a la carpeta de la biblioteca de OS X y por qué es útilEs mejor dejar la mayoría de las carpetas de la Biblioteca OS X sola, pero es útil conocer su camino dentro y alrededor de la Biblioteca del usuario. Lee mas .

bibliotecas del sistema de compatibilidad de software os
Credito 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 determinado formato de archivo binario Todo lo que necesita saber sobre los formatos de archivo y sus propiedadesUsamos el archivo de palabras indistintamente: música, imagen, hoja de cálculo, presentación de diapositivas, etc. Pero, de todos modos, ¿qué hace que un archivo sea un "archivo"? Probemos y comprendamos esta parte fundamental de la informática. 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 a continuación imagen.

software os compatibilidad elf header

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) ya que define cómo se comunican dos programas 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 cambiar o no 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 programas de virtualización ¿Qué es una máquina virtual? Todo lo que necesitas saberLas máquinas virtuales le permiten ejecutar otros sistemas operativos en su computadora actual. Esto es lo que debes saber sobre ellos. Lee mas 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. Por eso es raro, aunque Microsoft vio recientemente el valor Ubuntu ya está disponible en la tienda de WindowsWindows Insiders ahora puede descargar e instalar Ubuntu en Windows 10. Esto une a Linux y Windows en una unión impía que pocos imaginaban que vivirían lo suficiente como para presenciar. Lee mas al hacerlo

Excepción: software interpretado

En base a 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 volver a copiar 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 "simplemente se ejecuta en todas partes". Puede descargarlo y ejecutarlo en cualquier plataforma compatible: la palabra clave es "compatible". De hecho, está descargando el código fuente de la aplicación, mientras que otra aplicación (el 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 era (literalmente) "escribir una vez, ejecutar en cualquier lugar". La idea era crear aplicaciones usando funciones Java para guardar archivos, hacer cálculos o crear una aplicación ventana. 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 el 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 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).

software os compatibilidad jide jdaf
Crédito de imagen: Software JIDE

Los programas Java no se "compilan" precisamente en tiempo real. Por el contrario, 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 inicie, la JVM lo "horneará el resto del camino" para que se ajuste a las funciones particulares del sistema operativo host.

Pitón

Un lenguaje interpretado popular es Pitón 5 razones por las que la programación en Python no es inútilPython: o lo amas o lo odias. Incluso puede balancearse de un extremo al otro como un péndulo. En cualquier caso, Python es un lenguaje difícil de ser ambivalente. Lee mas . 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 "importa" código desde fuera de su aplicación, se compila en código de bytes 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 en un nuevo código de bytes.

Un subproducto genial de esta ejecución "a pedido" es que puede usar el intérprete para desarrollar sus scripts de forma interactiva. Simplemente escribiendo "python" en la línea de comando, iniciará el intérprete y podrá ejecutar el código y ver los resultados de inmediato.

software de compatibilidad con intérprete de python

Esto significa que los desarrolladores pueden jugar y ajustar las cosas "en vivo". 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 ciclo "prueba de compilación de código" que tienen que hacer los programadores de lenguaje no interpretados).

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

Desafortunadamente para los usuarios, la industria tecnológica no ha desarrollado un formato verdaderamente "universal". Y puede que nunca lo haga. La introducción de este tipo de normas a menudo da como resultado una solución de "denominador menos comú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 era 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

Aaron lleva quince años en tecnología como analista de negocios y gerente de proyectos durante quince años, y ha sido un usuario fiel de Ubuntu durante casi el mismo tiempo (desde Breezy Badger). Sus intereses incluyen código abierto, aplicaciones para pequeñas empresas, integración de Linux y Android, y computación en modo de texto plano.