Conheça a nova versão do Cosmopolitan 2.0, a biblioteca C padrão multiplataforma

O lançamento de a nova versão do projeto "Cosmopolita 2.0", que desenvolve uma biblioteca C padrão e um formato de arquivo executável universal que pode ser usado para distribuir programas para diferentes sistemas operacionais sem o uso de intérpretes e máquinas virtuais.

O recipiente para gerar arquivos executáveis ​​universais depende da combinação de segmentos e cabeçalhos específicos de diferentes sistemas sistemas operacionais em um arquivo, combinando vários formatos diferentes usados ​​em Unix, Windows e macOS.

Para garantir que um único executável rodar em sistemas Windows e Unix, um truque é usado para codificar arquivos do Windows PE como um script de shell, aproveitando o fato de que o Thompson Shell não usa o marcador de script "#!".

Para criar programas que incluem vários arquivos (combinando todos os recursos em um único arquivo), há suporte para gerar um arquivo executável na forma de um arquivo ZIP especialmente criado. Esboço do formato proposto (exemplo de aplicação hello.com):

A chamada qemu-x86_64 é fornecida para portabilidade adicional e permite que o código compilado para a arquitetura x86_64 seja executado em plataformas não x86, como placas Raspberry Pi e dispositivos Apple equipados com processadores ARM. O projeto também pode ser usado para criar aplicativos autônomos que funcionam sem um sistema operacional (bare metal). Nesses aplicativos, um carregador de inicialização é anexado ao arquivo executável e o programa atua como um sistema operacional inicializável.

Principais novidades do Cosmopolitan 2.0

Nesta nova versão destaca-se que o esquema para acessar recursos internos foi alterado em de um arquivo zip (ao abrir arquivos, os caminhos usuais /zip/… agora são usados ​​em vez de usar o prefixo zip:..). Da mesma forma, para acessar discos no Windows, é possível usar caminhos como "/c/…" em vez de "C:/…".

Um novo carregador APE é proposto (Actually Portable Executable), que define o formato dos arquivos executáveis ​​universais. O novo carregador de inicialização usa mmap para alocar o programa na memória e não altera mais o conteúdo em tempo real. Se necessário, o executável universal pode ser convertido em executáveis ​​regulares vinculados a plataformas individuais.

No Linux, é possível usar o módulo do kernel binfmt_misc para executar programas APE. Nota-se que o uso de binfmt_misc é o método de inicialização mais rápido, além de Uma implementação de a funcionalidade das chamadas de sistema promessa() e desvelar(), desenvolvidas pelo projeto OpenBSD, além de fornecer uma API para usar dados de chamadas em programas C, C++, Python e Redbean, além de um utilitário do promise.com para isolar processos arbitrários.

Também podemos encontrar isso para Linux, o desempenho das chamadas clock_gettime e gettimeofday foi aumentado em até 10 vezes devido ao uso do mecanismo vDSO (Virtual Dynamic Shared Object), que permite transferir o manipulador de chamadas do sistema para o espaço do usuário e contornar o contexto do switch.

A construção usa Landlock Make, uma edição do GNU Make com verificação de dependência mais rigorosa e o uso da chamada de sistema Landlock para isolar o programa do resto do sistema e melhorar a eficiência do cache. Como opção, a capacidade do compilador e o GNU Make usual são preservados.

Por outro lado, também destaca a funções implementadas para multithreading: _spawn() e _join(), que são ligações universais sobre APIs específicas para diferentes sistemas operacionais. O trabalho também está em andamento para implementar o suporte para threads POSIX.

Das outras mudanças que se destacam:

  • Adicionado suporte para as opções “–ftrace” e “–strace” para arquivos executáveis ​​para enviar informações sobre todas as chamadas de função e chamadas de sistema para stderr.
  • Adicionado suporte para a chamada de sistema closefrom() compatível com Linux 5.9+, FreeBSD 8+ e OpenBSD.
  • Funções matemáticas para trabalhar com números complexos foram movidas da biblioteca Musl.
  • Muitas funções matemáticas foram aceleradas.
  • A função nointernet() é proposta, que desativa os recursos da rede.
  • Adicionadas novas funções para anexar strings com eficiência: append, appendf, appendr, appends, appendw, appendz, kappendf, kvappendf e vappendf.
  • Uma versão protegida da família de funções kprintf(), projetada para funcionar com privilégios elevados, foi adicionada.
  • Desempenho significativamente aprimorado das implementações de SSL, SHA, curve25519 e RSA.

Por fim, se você estiver interessado em aprender mais sobre isso, saiba que o código do projetoou é distribuído sob a licença ISC (versão simplificada do MIT/BSD).


Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: AB Internet Networks 2008 SL
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.