Keith Packard, desenvolvedor ativo do Debian, líder do projeto X.Org e criador de várias extensões X, incluindo XRender, XComposite e XRandR, lançamento da nova biblioteca padrão C , projetada para uso em dispositivos embarcados com armazenamento permanente e memória RAM limitados. Durante o desenvolvimento, parte do código foi emprestada da biblioteca do projeto Cygwin e , desenvolvida para microcontroladores Atmel AVR. O código do PicoLibc está sob a licença BSD. O suporte para a construção da biblioteca é oferecido para arquiteturas ARM (32 bits), i386, RISC-V, x86_64 e PowerPC.
Kit Packard começou o desenvolvimento após não conseguir encontrar uma versão adequada do Libc que pudesse ser utilizada em dispositivos incorporados com pouca memória RAM. O projeto está em desenvolvimento desde o ano passado. Na primeira fase, o projeto consistia em uma versão do newlib, cujas funções de stdio foram substituídas por uma versão compacta do avrlibc (stdio no newlib não era satisfatório devido ao alto consumo de recursos). Como as atividades atuais de Kit envolvem trabalho contínuo com a arquitetura RISC-V e o desenvolvimento de ferramentas para dispositivos incorporados, recentemente ele revisou o estado das implementações do libc e chegou à conclusão de que, com pequenas modificações, a combinação de newlib e avrlibc poderia se tornar uma boa solução universal. Inicialmente, o projeto foi desenvolvido sob o nome de "newlib-nano", mas para evitar confusões com a biblioteca Newlib, foi renomeado para PicoLibc.
No estado atual, o Picolibc já passou por um trabalho de remoção de todo o código que não é fornecido sob a licença BSD (esse código não era utilizado na construção para dispositivos incorporados), o que simplificou significativamente a situação da licença do projeto. A implementação de threads locais foi alterada de ‘struct _reent’ para o mecanismo TLS (). Uma versão compacta do stdio, emprestada do código da biblioteca avrlibc, foi ativada por padrão (inserções específicas da ATmel foram reescritas em C). O ambiente de construção utilizado é o Meson, o que permitiu não depender dos scripts de construção do newlib e simplificou a transferência de alterações do newlib. Uma versão simplificada do código de inicialização (crt0) foi adicionada, anexada ao executável e executada antes de passar o controle para a função main().
Na versão Picolibc 1.1:
- Uma biblioteca auxiliar foi adicionada para suporte à tecnologia "", permitindo que o código executado em um ambiente de depuração ou emulador use os mecanismos de entrada/saída do sistema host;
- Para sistemas que suportam chamadas de sistema open, close, read e write, interfaces de entrada/saída stdio POSIX padronizadas foram adicionadas ao tinystdio, incluindo funções fopen e fdopen, além da vinculação de stdin/stdout/stderr a descritores de arquivo específicos definidos no POSIX;
- Mudanças recentes da base de código do newlib foram transferidas. Inclusive, foram adicionados stubs libm para , que podem ser usados em sistemas sem suporte para cálculos de ponto flutuante;
- Adicionado um exemplo de construção do aplicativo 'Hello world' com picolibc para sistemas ARM e RISC-V;
- Removidos os diretórios newlib, libm e mathfp, que continham código experimental não utilizado.
Fonte: opennet.ru
