Propaganda

Você acabou de baixar uma atualização cheia de recursos para seu aplicativo de código aberto favorito. Tudo está funcionando bem, e você o usa em outros dispositivos - então é hora de distribuí-los também.

Exceto que o seu novo e brilhante laptop Linux não é compatível com o pacote de instalação do Windows. E o seu tablet Android? Iphone? PS4? Por que você não pode simplesmente pegar esse software e usá-lo onde quiser? Vamos explorar algumas barreiras diferentes para o sonho de "comprar uma vez, correr para qualquer lugar".

Desenvolvimento de Software e Arquitetura de SO

Entender por que o software não funciona nos sistemas operacionais requer um pouco (apenas um pouco, prometo) de como o software é produzido.

O processo de desenvolvimento de software

Em um fluxo de desenvolvimento de software muito básico para desktop, servidor e celular (ou seja, não web Programação vs. Desenvolvimento Web: Qual é a diferença?Você pode pensar que programadores de aplicativos e desenvolvedores da Web fazem o mesmo trabalho, mas isso está longe da verdade. Aqui estão as principais diferenças entre programadores e desenvolvedores da web.

instagram viewer
consulte Mais informação ), um programador:

  1. Digite alguns código em um ou mais arquivos.
  2. Compilar o código em algo que o computador possa executar.
  3. Teste para garantir que o programa funcione conforme o esperado.
  4. Empacotar e distribuir / implantar o software.
processo de desenvolvimento de compatibilidade de software

É uma combinação dos primeiro e segundo passos que nos interessam aqui. O processo de compilando software, ou transformá-lo do código para os zeros que um computador entende (linguagem de máquina) é complexo. Não entraremos em detalhes, mas é útil entender em alto nível o que acontece.

Arquitetura do SO

Um ponto importante a entender é que um sistema operacional não é uma única entidade. Pelo contrário, é composto de camadas de software.

Kernels do sistema operacional

Um sistema operacional núcleo é responsável pela comunicação com o hardware do computador. O software comunica seus comandos ao kernel, que, por sua vez, emite comandos ao hardware para (por exemplo) ler um arquivo do disco rígido ou desenhar uma janela na tela. Basicamente, coordena todas as informações (sejam dados armazenados, cálculos ou entrada do usuário) entre hardware e várias partes do software. O kernel disponibiliza toda essa funcionalidade ao software via chamadas de sistema.

princípios básicos do kernel de compatibilidade de software
Crédito de imagem: Wikimedia Commons

O kernel de cada sistema operacional implementará chamadas de sistema de maneira diferente, em termos de quais estão disponíveis, como são chamadas ou que opções são adotadas. Como resultado, o software precisa levar em consideração as chamadas do sistema suportadas pelo kernel de cada sistema operacional a que se destina. A chamada do sistema usada para enviar dados para a GPU no Linux pode ter um nome diferente, uma lista de informações que você precisa fornecer ou ambas no Windows. Essa ligação exata pode nem estar lá.

Bibliotecas do sistema

Em muitos casos, o software não chama diretamente para o kernel. Em vez disso, chama para bibliotecas do sistemaou coleções de funções básicas. Existem bibliotecas para que, por exemplo, todos os programas que salvam arquivos no disco rígido não precisem escrever uma função para fazê-lo. Em vez disso, simplesmente links para uma biblioteca do sistema e usa uma função existente. A biblioteca GLibC para Linux é um excelente exemplo, assim como os arquivos .DLL na API Win32 ou o conteúdo do diretório / Sistema / Biblioteca de um Mac Como acessar a pasta da biblioteca do OS X e por que é útilA maioria das pastas da Biblioteca do OS X é melhor deixada em paz, mas é útil conhecer seu caminho dentro e ao redor da Biblioteca do Usuário. consulte Mais informação .

bibliotecas de sistemas de compatibilidade de software
Crédito de imagem: ScottXW via Wikimedia Commons

As bibliotecas do sistema agem como um tipo de tradutor entre aplicativos e o kernel para tarefas de rotina. As aplicações fazem chamadas de função para essas bibliotecas, que lidam com muitos detalhes de baixo nível. Eles também podem fazer chamadas do sistema para o kernel por conveniência. Como você deve ter adivinhado, isso significa que essas bibliotecas são escritas para um kernel específico e, portanto, não podem ser usadas em sistemas operacionais com kernels diferentes.

Cabeçalhos de execução do sistema operacional

O último obstáculo ao software universal é o formato de arquivos executáveis ​​para os sistemas operacionais. Um sistema operacional espera que os arquivos executados sigam um determinado formato de arquivo binário Tudo o que você precisa saber sobre os formatos de arquivo e suas propriedadesUsamos o arquivo de palavras de forma intercambiável: música, imagem, planilha, apresentação de slides e assim por diante. Mas o que torna um arquivo um "arquivo", afinal? Vamos tentar entender essa parte fundamental da computação. consulte Mais informação . Por exemplo, os arquivos ELF (Executable and Linkable Format) executados em sistemas operacionais como O Linux e o FreeBSD devem especificar certas propriedades do arquivo em determinados bytes, conforme mostrado abaixo imagem.

cabeçalho de elf do software OS

o interface binária de aplicativo (ABI) mostrado capaz é de particular importância. Uma combinação das chamadas disponíveis nas bibliotecas do processador, kernel e sistema, uma ABI é semelhante a a API (interface de programação de aplicativos) na medida em que define como dois programas se comunicam. Mas a API é algo usado pelos programadores (humanos) no código-fonte para indicar duas partes do software devemos falar um com o outro. A ABI é o que realmente permite que eles façam isso depois que o software é compilado e executado. Cada sistema operacional implementa uma ABI específica, que pode ou não ser alterada entre as versões do mesmo sistema operacional.

Em geral, os sistemas operacionais implementam sua própria ABI, determinada por uma combinação do tipo de processador, kernel e qualquer biblioteca de sistema padrão. Mas, às vezes, um sistema operacional implementa mais de um. O FreeBSD tem suporte para binários Linux, por exemplo, porque fornece uma ABI do Linux como um complemento para o kernel do FreeBSD (em vez do kernel do Linux). Isso é diferente de programas de virtualização O que é uma máquina virtual? Tudo o que você precisa saberMáquinas virtuais permitem executar outros sistemas operacionais no seu computador atual. Aqui está o que você deve saber sobre eles. consulte Mais informação como VMWare ou VirtualBox, que usam software para simular uma máquina inteira (hardware e tudo). Como resultado, esse tipo de compatibilidade com ABI é mais rápido, mas com muito mais esforço para manter. É por isso que é raro, embora A Microsoft viu recentemente o valor O Ubuntu já está disponível na Windows StoreO Windows Insiders agora pode baixar e instalar o Ubuntu no Windows 10. Isso une Linux e Windows em uma união profana que poucos imaginavam que viveriam o suficiente para testemunhar. consulte Mais informação fazendo isso.

Exceção: Software Interpretado

Com base no exposto, aprendemos que os desenvolvedores escrevem software para um e apenas um tipo de sistema de destino. Exceto quando não. Existem muitos aplicativos que você pode baixar e executar em um Mac, copiar e executar no Windows e talvez até copiar novamente e executar no Linux sem problemas. Como isso é possível?

Eu estava deitado até agora?

Como se vê, há uma categoria de software que parece superficialmente "simplesmente executado em todos os lugares". Você pode fazer o download e executá-lo em qualquer plataforma suportada - a palavra-chave sendo "suportada". Na verdade, você está baixando o código fonte do aplicativo, enquanto outro aplicativo (a intérprete) é como executar o código-fonte diretamente em tempo real. Isso é uma simplificação exagerada, então vamos ver exatamente como isso funciona com alguns idiomas.

Java

Quando o Java foi lançado pela primeira vez, a promessa era (literalmente) "escrever uma vez, executar em qualquer lugar". A ideia era criar aplicativos usando funções Java para salvar arquivos, fazer cálculos ou criar um aplicativo janela. Então uma Java Runtime Enviornment (JRE) para cada plataforma de computador suportada, o código seria executado e convertido para funções nativas do sistema operacional. O truque para o Java, então, é que ele não é executado "diretamente" no sistema operacional. Ele roda em uma parte do JRE chamada a Máquina Virtual JAVA e é isso que roda no sistema operacional.

Ao inserir essa camada de software adicional entre o aplicativo e o sistema operacional, o Java permite que você se concentre em um conjunto de funções iguais nos sistemas operacionais. Você diz ao Java o que deseja fazer e deixa a JVM para o seu sistema se preocupar com como realmente fazê-lo. A imagem abaixo mostra isso em ação, onde Estrutura de aplicativos Java Desktop da JIDE Software exibe o mesmo aplicativo para Mac (superior), Windows (meio esquerdo), “Java puro” (meio direito) e Linux (inferior).

software SO compatibilidade jide jdaf
Crédito de imagem: JIDE Software

Os programas Java não se "compilam" com precisão em tempo real. Em vez disso, o compilador Java os renderizará em "bytecode". Você pode pensar no bytecode como um programa incompleto. Quando o desenvolvedor lança o aplicativo, ele é compilado o máximo possível sem saber em qual SO ele será executado. Quando você realmente o inicia, a JVM “faz o resto do caminho” para ajustar as funções específicas do sistema operacional host.

Pitão

Uma linguagem interpretada popular é Pitão 5 razões pelas quais a programação Python não é inútilPython - você o ama ou odeia. Você pode até balançar de um lado para o outro como um pêndulo. Independentemente disso, Python é uma linguagem difícil de ser ambivalente. consulte Mais informação . Quando você executa um script Python, o interpretador Python converte o código em instruções para o sistema operacional. Também pode funcionar de maneira semelhante ao Java: quando você "importa" o código de fora do seu aplicativo, ele é compilado para codificar por código de código na primeira vez em que é executado. Em seguida, o intérprete saberá se, nas execuções subseqüentes, o código original foi alterado; nesse momento, ele será recompilado para o novo código de bytes.

Um subproduto interessante dessa execução "sob demanda" é que você pode usar o intérprete para desenvolver seus scripts interativamente. Simplesmente digitando "python" na linha de comando, você iniciará o intérprete e poderá executar o código e ver os resultados imediatamente.

software SO compatibilidade intérprete

Isso significa que os desenvolvedores podem brincar e ajustar as coisas "ao vivo". Então, quando uma linha de código fizer o que quiser, copie e cole-a no um arquivo de script (que é muito mais eficiente do que o ciclo de "teste de compilação de código" que os programadores de linguagem não interpretados precisam fazer).

Mesmo quando o software é o mesmo, provavelmente não é

Infelizmente para os usuários, o setor de tecnologia não desenvolveu um formato verdadeiramente "universal". E isso nunca pode ser feito. A introdução desses tipos de padrões geralmente resulta em uma solução de "denominador menos comum", com concessões no interesse de obter a aprovação de todos.

O que você acha? Você prefere um software universalmente compatível, mesmo que isso signifique que não é tão bom? Ou você concorda com o sistema operacional que está usando e não tem interesse nos aplicativos de outras plataformas? Deixe-nos saber abaixo nos comentários!

Créditos da Imagem: Masterchief_Productions / Shutterstock

Aaron tem profundo conhecimento em tecnologia como analista de negócios e gerente de projetos há quinze anos, e é um usuário fiel do Ubuntu por quase tanto tempo (desde o Breezy Badger). Seus interesses incluem código aberto, aplicativos para pequenas empresas, integração de Linux e Android e computação no modo de texto sem formatação.