Keith Packard, actieve ontwikkelaar van Debian, projectleider van X.Org en maker van vele X-extensies zoals XRender, XComposite en XRandR, uitgave van de nieuwe standaard C-bibliotheek , ontwikkeld voor gebruik op embedded systemen met beperkte permanente opslagcapaciteit en RAM. Tijdens de ontwikkeling is een deel van de code overgenomen uit de bibliotheek van het Cygwin-project en , dat ontwikkeld werd voor Atmel AVR microcontrollers. De code van PicoLibc is onder de BSD-licentie. Er wordt een bouw van de bibliotheek ondersteund voor de architecturen ARM (32-bit), i386, RISC-V, x86_64 en PowerPC.
Kit Packard begon met de ontwikkeling nadat hij geen fatsoenlijke versie van Libc kon vinden die kon worden gebruikt op embedded apparaten met een beperkte hoeveelheid RAM. Het project is sinds vorig jaar in ontwikkeling. In de eerste fase was het project een variant van newlib, waarbij de stdio-functies zijn vervangen door een compacte versie uit avrlibc (stdio in newlib consumeerde te veel middelen). Aangezien Kit's huidige activiteiten verband houden met voortdurende werkzaamheden met de RISC-V-architectuur en de ontwikkeling van tools voor embedded apparaten, heeft hij onlangs de status van libc-implementaties herzien en geconcludeerd dat met enkele kleine aanpassingen de combinatie van newlib en avrlibc een goede universele oplossing kan worden. Aanvankelijk werd het project ontwikkeld onder de naam 'newlib-nano', maar om verwarring met de Newlib-bibliotheek te voorkomen, is het hernoemd naar PicoLibc.
In de huidige versie van Picolibc is al gewerkt aan het verwijderen van alle code die niet onder de BSD-licentie valt (deze code werd niet gebruikt bij de build voor embedded apparaten), wat de licentiesituatie van het project aanzienlijk vereenvoudigde. De implementatie van lokale threads is omgeschakeld van 'struct _reent' naar het TLS-mechanisme (). Een compacte versie van stdio, overgenomen uit de code van de avrlibc-bibliotheek, is standaard ingeschakeld (specifieke Atmel-assemblage-instructies zijn herschreven in C). Voor de build is gebruikgemaakt van de Meson-toolchain, wat het mogelijk maakte om niet vast te zitten aan de build-scripts van newlib en het verplaatsen van wijzigingen vanuit newlib te vereenvoudigen. Een vereenvoudigde variant van de initialisatiecode (crt0) is toegevoegd, die aan het uitvoerbare bestand is gekoppeld en wordt uitgevoerd voordat de controle aan de main()-functie wordt overgedragen.
In versie Picolibc 1.1:
- is er een hulpprogrammabibliotheek toegevoegd ter ondersteuning van de technologie ‘‘, die het mogelijk maakt voor code die draait in een debugger of emulator om gebruik te maken van de input/output-mechanismen van het hostsysteem;
- Voor systemen die systeemaanroepen zoals open, close, read en write ondersteunen, zijn gestandaardiseerde POSIX-invoeren/outputinterfaces van stdio toegevoegd aan tinystdio, inclusief de functies fopen en fdopen, evenals de binding van stdin/stdout/stderr aan bepaalde POSIX-bestandshandles;
- Recente wijzigingen uit de codebasis van newlib zijn overgenomen. Inclusief de toevoeging van stub-implementaties van libm voor , die kunnen worden gebruikt op systemen zonder ondersteuning voor浮点berekeningen;
- Een voorbeeld van een 'Hello world'-toepassing met picolibc voor ARM- en RISC-V-systemen is toegevoegd;
- De directories newlib, libm en mathfp, waarin ongebruikte experimentele code was opgeslagen, zijn verwijderd.
Bron: opennet.ru
